TuttleOFX  1
IMemoryPool.hpp
Go to the documentation of this file.
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