Index: src/libchcore/TDataBuffer.cpp =================================================================== diff -u -N -r409a0af1e9fdea72ca016118d76a5a95e53496e8 -r6f082e25ab71169e9e631f139a2eddc4ef45d2e9 --- src/libchcore/TDataBuffer.cpp (.../TDataBuffer.cpp) (revision 409a0af1e9fdea72ca016118d76a5a95e53496e8) +++ src/libchcore/TDataBuffer.cpp (.../TDataBuffer.cpp) (revision 6f082e25ab71169e9e631f139a2eddc4ef45d2e9) @@ -228,7 +228,7 @@ // first the user-facing buffer size if(stBufferSize == 0) { - stBufferSize = DefaultMaxMemory; + stBufferSize = DefaultBufferSize; bResult = false; } else @@ -262,13 +262,13 @@ stMaxMemory = std::max(DefaultMaxMemory, RoundUp(DefaultMaxMemory, stPageSize)); bResult = false; } - else if(stMaxMemory < stPageSize) + else { - size_t stNewSize = RoundUp(stMaxMemory, stBufferSize); - if(stNewSize != stMaxMemory) + size_t stNewSize = RoundUp(stMaxMemory, stPageSize); + if(stMaxMemory != stNewSize) { + stMaxMemory = stNewSize; bResult = false; - stMaxMemory = stPageSize; } } @@ -313,7 +313,7 @@ bool TDataBufferManager::CheckResizeSize(size_t& stNewMaxSize) { - if(m_stPageSize == 0 || m_stMaxMemory == 0 || m_stBufferSize == 0) + if(!IsInitialized()) { stNewMaxSize = 0; return false; @@ -362,11 +362,21 @@ } } +size_t TDataBufferManager::GetRealAllocatedMemorySize() const +{ + return m_stPageSize * (m_vAllocBlocksToFree.size() + m_vVirtualAllocBlocks.size()); +} + bool TDataBufferManager::HasFreeBuffer() const { return !m_listUnusedBuffers.empty(); } +size_t TDataBufferManager::GetCountOfFreeBuffers() const +{ + return m_listUnusedBuffers.size(); +} + bool TDataBufferManager::CanAllocPage() const { if(!IsInitialized()) @@ -445,6 +455,7 @@ { m_vAllocBlocksToFree.push_back(spAllocBlock); } + m_stMaxMemory -= m_stPageSize; } bool TDataBufferManager::GetFreeBuffer(TSimpleDataBuffer& rSimpleBuffer)