LAMA
/home/brandes/workspace/LAMA/src/lama/HostReadAccess.hpp
Go to the documentation of this file.
00001 
00033 #ifndef LAMA_HOSTREADACCESS_HPP_
00034 #define LAMA_HOSTREADACCESS_HPP_
00035 
00036 // for dll_import
00037 #include <lama/config.hpp>
00038 
00039 // base classes
00040 #include <lama/ReadAccess.hpp>
00041 
00042 // others
00043 #include <lama/ContextFactory.hpp>
00044 
00045 namespace lama
00046 {
00047 
00051 template<typename T>
00052 class HostReadAccess : public ReadAccess<T>
00053 {
00054 public:
00058     typedef T ValueType;
00059 
00066     HostReadAccess( const LAMAArray<ValueType>& array );
00067 
00068     HostReadAccess( const LAMAArrayConstView<ValueType>& view );
00069 
00073     virtual ~HostReadAccess();
00074 
00081     inline const ValueType& operator[] (const IndexType i) const;
00082 
00088     inline operator const ValueType*() const;
00089 
00090     using ReadAccess<ValueType>::get;
00091 
00092     using ReadAccess<ValueType>::size;
00093 
00094 private:
00095     const ValueType* const mData;
00096 
00097     LAMA_LOG_DECL_STATIC_LOGGER(logger);
00098 };
00099 
00100 LAMA_LOG_DEF_TEMPLATE_LOGGER( template<typename T>, HostReadAccess<T>::logger, "ReadAccess.HostReadAccess");
00101 
00102 template<typename T>
00103 HostReadAccess<T>::HostReadAccess( const LAMAArray<ValueType>& array )
00104     : ReadAccess<T>( array, ContextFactory::getContext( Context::Host ) ), 
00105       mData( get() )
00106 {
00107     LAMA_LOG_DEBUG(logger, "read access on host, mData = " << mData);
00108 }
00109 
00110 template<typename T>
00111 HostReadAccess<T>::HostReadAccess( const LAMAArrayConstView<ValueType>& view )
00112     : ReadAccess<T>( view, ContextFactory::getContext( Context::Host ) ),
00113       mData( get() )
00114 {
00115     LAMA_LOG_DEBUG(logger, "read access on host, mData = " << mData);
00116 }
00117 
00118 template<typename T>
00119 HostReadAccess<T>::~HostReadAccess()
00120 {
00121     LAMA_LOG_DEBUG(logger, "~HostReadAccess");
00122 }
00123 
00124 template<typename T>
00125 inline const T& HostReadAccess<T>::operator[] (const IndexType i) const
00126 {
00127     return mData[i];
00128 }
00129 
00130 template<typename T>
00131 inline HostReadAccess<T>::operator const T*() const
00132 {
00133     LAMA_LOG_TRACE(logger, "mData = " << mData);
00134     return mData;
00135 }
00136 
00137 }
00138 
00139 #endif // LAMA_HOSTREADACCESS_HPP_