Index: src/libchcore/TDataBuffer.h =================================================================== diff -u -N -r2c34ba2265e64a9547ace8cf1d29b1def1a552f4 -rfdf4929dc7df1376ed439b7271765f1a4ca31de6 --- src/libchcore/TDataBuffer.h (.../TDataBuffer.h) (revision 2c34ba2265e64a9547ace8cf1d29b1def1a552f4) +++ src/libchcore/TDataBuffer.h (.../TDataBuffer.h) (revision fdf4929dc7df1376ed439b7271765f1a4ca31de6) @@ -37,7 +37,7 @@ void GetFreeChunks(std::list& rListChunks); void ReleaseChunks(std::list& rListChunks); - void ReleaseChunk(LPVOID pChunk); + bool ReleaseChunk(LPVOID pChunk); size_t CountOwnChunks(const std::list& rListChunks); @@ -64,6 +64,8 @@ typedef boost::shared_ptr TVirtualAllocMemoryBlockPtr; } +template T RoundUp(T number, T roundValue) { return ((number + roundValue - 1) & ~(roundValue - 1)); } + class TDataBufferManager; class LIBCHCORE_API TSimpleDataBuffer @@ -75,6 +77,11 @@ LPVOID GetBufferPtr(); void ReleaseBuffer(); + void SetDataSize(size_t stDataSize); + size_t GetDataSize() const { return m_stDataSize; } + + void CutDataFromBuffer(size_t stCount); + private: TSimpleDataBuffer(const TSimpleDataBuffer&); TSimpleDataBuffer& operator=(const TSimpleDataBuffer&); @@ -85,13 +92,19 @@ LPVOID m_pBuffer; TDataBufferManager* m_pBufferManager; size_t m_stBufferSize; + size_t m_stDataSize; friend class TDataBufferManager; }; +typedef boost::shared_ptr TSimpleDataBufferPtr; + class LIBCHCORE_API TDataBufferManager { public: + static const size_t DefaultAllocGranularity = 4096; + +public: TDataBufferManager(); ~TDataBufferManager(); @@ -109,7 +122,7 @@ // current settings size_t GetMaxMemorySize() const { return m_stMaxMemory; } size_t GetPageSize() const { return m_stPageSize; } - size_t GetBufferSize() const { return m_stBufferSize; } + size_t GetSimpleBufferSize() const { return m_stBufferSize; } // buffer retrieval bool HasFreeBuffer() const; // checks if a buffer is available without allocating any new memory