LAMA
|
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_