Index: src/libchcore/DataBuffer.cpp =================================================================== diff -u -N -r6df9b4cff81dedf8c5571a98702b584b061eac09 -rfdf4929dc7df1376ed439b7271765f1a4ca31de6 --- src/libchcore/DataBuffer.cpp (.../DataBuffer.cpp) (revision 6df9b4cff81dedf8c5571a98702b584b061eac09) +++ src/libchcore/DataBuffer.cpp (.../DataBuffer.cpp) (revision fdf4929dc7df1376ed439b7271765f1a4ca31de6) @@ -86,117 +86,20 @@ m_auiSizes[eType] = uiSize; } -TDataBuffer::TDataBuffer() : - m_pBuffer(NULL), - m_uiRealSize(0) +UINT TBufferSizes::GetMaxSize() const { -} - -TDataBuffer::~TDataBuffer() -{ - Delete(); -} - -const TBufferSizes& TDataBuffer::Create(const TBufferSizes& rbsSizes) -{ - // if trying to set 0-size buffer - TBufferSizes bsSizes = rbsSizes; // copy - not to mix in the def. param - - for(int iIndex = TBufferSizes::eBuffer_Default; iIndex < TBufferSizes::eBuffer_Last; ++iIndex) - { - TBufferSizes::EBufferType eType = (TBufferSizes::EBufferType)iIndex; - if(bsSizes.GetSizeByType(eType) == 0) - bsSizes.SetSizeByType(eType, DEFAULT_SIZE); - } - - // max value from the all - UINT uiLargest = 0; - if(bsSizes.IsOnlyDefault()) - uiLargest = bsSizes.GetDefaultSize(); + if(m_bOnlyDefault) + return m_auiSizes[eBuffer_Default]; else { - for(int iIndex = TBufferSizes::eBuffer_Default; iIndex < TBufferSizes::eBuffer_Last; ++iIndex) + UINT uiMaxSize = 0; + for(size_t stIndex = 0; stIndex < eBuffer_Last; ++stIndex) { - TBufferSizes::EBufferType eType = (TBufferSizes::EBufferType)iIndex; - - if(uiLargest < bsSizes.GetSizeByType(eType)) - uiLargest = bsSizes.GetSizeByType(eType); + if(m_auiSizes[stIndex] > uiMaxSize) + uiMaxSize = m_auiSizes[stIndex]; } + return uiMaxSize; } - - // modify buffer size to the next 64k boundary - UINT uiRealSize = ROUNDTODS(uiLargest); - if(m_uiRealSize == uiRealSize) - { - // real buffersize hasn't changed - m_bsSizes = bsSizes; - - return m_bsSizes; - } - - // try to allocate buffer - LPVOID pBuffer = VirtualAlloc(NULL, uiRealSize, MEM_COMMIT, PAGE_READWRITE); - if(pBuffer == NULL) - { - if(m_pBuffer == NULL) - { - // try safe buffesize - pBuffer = VirtualAlloc(NULL, DEFAULT_SIZE, MEM_COMMIT, PAGE_READWRITE); - if(pBuffer == NULL) - return m_bsSizes; // do not change anything - - // delete old buffer - Delete(); - - // store data - m_pBuffer = static_cast(pBuffer); - m_uiRealSize = DEFAULT_SIZE; - m_bsSizes.SetOnlyDefault(bsSizes.IsOnlyDefault()); - m_bsSizes.SetDefaultSize(DEFAULT_SIZE); - m_bsSizes.SetOneDiskSize(DEFAULT_SIZE); - m_bsSizes.SetTwoDisksSize(DEFAULT_SIZE); - m_bsSizes.SetCDSize(DEFAULT_SIZE); - m_bsSizes.SetLANSize(DEFAULT_SIZE); - - return m_bsSizes; - } - else - { - // no new buffer could be created - leave the old one - return m_bsSizes; - } - } - else - { - // succeeded - Delete(); // get rid of old buffer - - // store data - m_pBuffer = static_cast(pBuffer); - m_uiRealSize = uiRealSize; - m_bsSizes = bsSizes; - - return m_bsSizes; - } } -void TDataBuffer::Delete() -{ - if(m_pBuffer != NULL) - { - VirtualFree(static_cast(m_pBuffer), 0, MEM_RELEASE); - m_pBuffer = NULL; - m_uiRealSize = 0; - m_bsSizes.Clear(); - } -} - -void TDataBuffer::CutDataFromBuffer(UINT uiCount) -{ - if(uiCount >= m_uiRealSize || !m_pBuffer) - return; // nothing to do - - memmove(m_pBuffer, m_pBuffer + uiCount, m_uiRealSize - uiCount); -} - END_CHCORE_NAMESPACE