TuttleOFX
1
|
00001 #ifndef _TUTTLE_HOST_CORE_IMEMORYPOOL_HPP_ 00002 #define _TUTTLE_HOST_CORE_IMEMORYPOOL_HPP_ 00003 00004 #include <cstddef> 00005 #include <stdexcept> 00006 #include <boost/smart_ptr/intrusive_ptr.hpp> 00007 00008 namespace tuttle { 00009 namespace host { 00010 namespace memory { 00011 00012 class IUnknown 00013 { 00014 public: 00015 virtual ~IUnknown() = 0; 00016 virtual void addRef() = 0; 00017 virtual void release() = 0; 00018 }; 00019 00020 class IPoolData : public IUnknown 00021 { 00022 public: 00023 virtual ~IPoolData () = 0; 00024 virtual char* data() = 0; 00025 virtual const char* data() const = 0; 00026 virtual const size_t size() const = 0; 00027 virtual const size_t reservedSize() const = 0; 00028 }; 00029 00030 void intrusive_ptr_add_ref( IPoolData* pData ); 00031 void intrusive_ptr_release( IPoolData* pData ); 00032 00033 typedef ::boost::intrusive_ptr<IPoolData> IPoolDataPtr; 00034 00035 class IMemoryPool 00036 { 00037 public: 00038 virtual ~IMemoryPool() = 0; 00039 virtual size_t getUsedMemorySize() const = 0; 00040 virtual std::size_t getAllocatedAndUnusedMemorySize() const = 0; 00041 virtual size_t getAllocatedMemorySize() const = 0; 00042 virtual size_t getAvailableMemorySize() const = 0; 00043 virtual size_t getWastedMemorySize() const = 0; 00044 virtual size_t getMaxMemorySize() const = 0; 00045 virtual void clear( size_t size ) = 0; 00046 virtual void clearOne() = 0; 00047 virtual void clear() = 0; 00048 virtual IPoolDataPtr allocate( const size_t size ) = 0; 00049 virtual std::size_t updateMemoryAuthorizedWithRAM() = 0; 00050 }; 00051 00052 } 00053 } 00054 } 00055 00056 #endif