LAMA
|
00001 00033 #ifndef LAMA_DEFAULT_HOST_CONTEXT_HPP_ 00034 #define LAMA_DEFAULT_HOST_CONTEXT_HPP_ 00035 00036 // for dll_import 00037 #include <lama/config.hpp> 00038 00039 // base classes 00040 #include <lama/HostContext.hpp> 00041 00042 // boost 00043 #include <boost/weak_ptr.hpp> 00044 #include <boost/thread/recursive_mutex.hpp> 00045 00046 namespace lama 00047 { 00048 00057 class LAMA_DLL_IMPORTEXPORT DefaultHostContext : public HostContext 00058 { 00059 00060 friend class DefaultHostContextManager; 00061 00062 public: 00063 00064 virtual ~DefaultHostContext(); 00065 00066 HostContextType getHostType() const { return HostContext::DefaultHost; } 00067 00068 virtual void writeAt( std::ostream& stream ) const; 00069 00070 virtual void* allocate( const size_t size ) const; 00071 00072 virtual void allocate( ContextData& contextData, const size_t size ) const; 00073 00074 virtual void free( void* pointer, const size_t size ) const; 00075 00076 virtual void free( ContextData& contextData ) const; 00077 00078 virtual void memcpy( void* dst, const void* src, const size_t size ) const; 00079 00080 virtual std::auto_ptr<SyncToken> memcpyAsync( void* dst, const void* src, const size_t size ) const; 00081 00082 virtual bool cancpy( const ContextData& dst, const ContextData& src ) const; 00083 00084 virtual void memcpy( ContextData& dst, const ContextData& src, const size_t size ) const; 00085 00086 virtual std::auto_ptr<SyncToken> memcpyAsync( ContextData& dst, const ContextData& src, const size_t size ) const; 00087 00088 private: 00089 00090 DefaultHostContext(); 00091 00092 LAMA_LOG_DECL_STATIC_LOGGER(logger); 00093 00094 mutable size_t mNumberOfAllocates; 00095 00096 mutable size_t mNumberOfAllocatedBytes; 00097 00098 mutable boost::recursive_mutex allocate_mutex; // needed to make allocate/free thread-safe 00099 }; 00100 00101 } 00102 00103 #endif // LAMA_DEFAULT_HOST_CONTEXT_HPP_