| Index: core/src/fxcrt/fx_basic_buffer.cpp
|
| diff --git a/core/src/fxcrt/fx_basic_buffer.cpp b/core/src/fxcrt/fx_basic_buffer.cpp
|
| index d6225b46f2ab24c37e7dd1d2a4f6b85240937bab..77884c63c0cbacf27b7b58a44cfbd6b4084949cb 100644
|
| --- a/core/src/fxcrt/fx_basic_buffer.cpp
|
| +++ b/core/src/fxcrt/fx_basic_buffer.cpp
|
| @@ -7,413 +7,360 @@
|
| #include "../../include/fxcrt/fx_basic.h"
|
| FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf);
|
| CFX_BinaryBuf::CFX_BinaryBuf()
|
| - : m_AllocStep(0)
|
| - , m_pBuffer(NULL)
|
| - , m_DataSize(0)
|
| - , m_AllocSize(0)
|
| -{
|
| -}
|
| + : m_AllocStep(0), m_pBuffer(NULL), m_DataSize(0), m_AllocSize(0) {}
|
| CFX_BinaryBuf::CFX_BinaryBuf(FX_STRSIZE size)
|
| - : m_AllocStep(0)
|
| - , m_DataSize(size)
|
| - , m_AllocSize(size)
|
| -{
|
| - m_pBuffer = FX_Alloc(uint8_t, size);
|
| -}
|
| -CFX_BinaryBuf::~CFX_BinaryBuf()
|
| -{
|
| - if (m_pBuffer) {
|
| - FX_Free(m_pBuffer);
|
| - }
|
| -}
|
| -void CFX_BinaryBuf::Delete(int start_index, int count)
|
| -{
|
| - if (!m_pBuffer || start_index < 0 || start_index + count > m_DataSize) {
|
| - return;
|
| - }
|
| - FXSYS_memmove(m_pBuffer + start_index, m_pBuffer + start_index + count, m_DataSize - start_index - count);
|
| - m_DataSize -= count;
|
| -}
|
| -void CFX_BinaryBuf::Clear()
|
| -{
|
| - m_DataSize = 0;
|
| -}
|
| -void CFX_BinaryBuf::DetachBuffer()
|
| -{
|
| + : m_AllocStep(0), m_DataSize(size), m_AllocSize(size) {
|
| + m_pBuffer = FX_Alloc(uint8_t, size);
|
| +}
|
| +CFX_BinaryBuf::~CFX_BinaryBuf() {
|
| + if (m_pBuffer) {
|
| + FX_Free(m_pBuffer);
|
| + }
|
| +}
|
| +void CFX_BinaryBuf::Delete(int start_index, int count) {
|
| + if (!m_pBuffer || start_index < 0 || start_index + count > m_DataSize) {
|
| + return;
|
| + }
|
| + FXSYS_memmove(m_pBuffer + start_index, m_pBuffer + start_index + count,
|
| + m_DataSize - start_index - count);
|
| + m_DataSize -= count;
|
| +}
|
| +void CFX_BinaryBuf::Clear() {
|
| + m_DataSize = 0;
|
| +}
|
| +void CFX_BinaryBuf::DetachBuffer() {
|
| + m_DataSize = 0;
|
| + m_pBuffer = NULL;
|
| + m_AllocSize = 0;
|
| +}
|
| +void CFX_BinaryBuf::AttachData(void* buffer, FX_STRSIZE size) {
|
| + if (m_pBuffer) {
|
| + FX_Free(m_pBuffer);
|
| + }
|
| + m_DataSize = size;
|
| + m_pBuffer = (uint8_t*)buffer;
|
| + m_AllocSize = size;
|
| +}
|
| +void CFX_BinaryBuf::TakeOver(CFX_BinaryBuf& other) {
|
| + AttachData(other.GetBuffer(), other.GetSize());
|
| + other.DetachBuffer();
|
| +}
|
| +void CFX_BinaryBuf::EstimateSize(FX_STRSIZE size, FX_STRSIZE step) {
|
| + m_AllocStep = step;
|
| + if (m_AllocSize >= size) {
|
| + return;
|
| + }
|
| + ExpandBuf(size - m_DataSize);
|
| +}
|
| +void CFX_BinaryBuf::ExpandBuf(FX_STRSIZE add_size) {
|
| + FX_STRSIZE new_size = add_size + m_DataSize;
|
| + if (m_AllocSize >= new_size) {
|
| + return;
|
| + }
|
| + int alloc_step;
|
| + if (m_AllocStep == 0) {
|
| + alloc_step = m_AllocSize / 4;
|
| + if (alloc_step < 128) {
|
| + alloc_step = 128;
|
| + }
|
| + } else {
|
| + alloc_step = m_AllocStep;
|
| + }
|
| + new_size = (new_size + alloc_step - 1) / alloc_step * alloc_step;
|
| + uint8_t* pNewBuffer = m_pBuffer;
|
| + if (pNewBuffer) {
|
| + pNewBuffer = FX_Realloc(uint8_t, m_pBuffer, new_size);
|
| + } else {
|
| + pNewBuffer = FX_Alloc(uint8_t, new_size);
|
| + }
|
| + m_pBuffer = pNewBuffer;
|
| + m_AllocSize = new_size;
|
| +}
|
| +void CFX_BinaryBuf::CopyData(const void* pStr, FX_STRSIZE size) {
|
| + if (size == 0) {
|
| m_DataSize = 0;
|
| - m_pBuffer = NULL;
|
| - m_AllocSize = 0;
|
| -}
|
| -void CFX_BinaryBuf::AttachData(void* buffer, FX_STRSIZE size)
|
| -{
|
| - if (m_pBuffer) {
|
| - FX_Free(m_pBuffer);
|
| - }
|
| - m_DataSize = size;
|
| - m_pBuffer = (uint8_t*)buffer;
|
| - m_AllocSize = size;
|
| -}
|
| -void CFX_BinaryBuf::TakeOver(CFX_BinaryBuf& other)
|
| -{
|
| - AttachData(other.GetBuffer(), other.GetSize());
|
| - other.DetachBuffer();
|
| -}
|
| -void CFX_BinaryBuf::EstimateSize(FX_STRSIZE size, FX_STRSIZE step)
|
| -{
|
| - m_AllocStep = step;
|
| - if (m_AllocSize >= size) {
|
| - return;
|
| - }
|
| + return;
|
| + }
|
| + if (m_AllocSize < size) {
|
| ExpandBuf(size - m_DataSize);
|
| -}
|
| -void CFX_BinaryBuf::ExpandBuf(FX_STRSIZE add_size)
|
| -{
|
| - FX_STRSIZE new_size = add_size + m_DataSize;
|
| - if (m_AllocSize >= new_size) {
|
| - return;
|
| - }
|
| - int alloc_step;
|
| - if (m_AllocStep == 0) {
|
| - alloc_step = m_AllocSize / 4;
|
| - if (alloc_step < 128 ) {
|
| - alloc_step = 128;
|
| - }
|
| - } else {
|
| - alloc_step = m_AllocStep;
|
| - }
|
| - new_size = (new_size + alloc_step - 1) / alloc_step * alloc_step;
|
| - uint8_t* pNewBuffer = m_pBuffer;
|
| - if (pNewBuffer) {
|
| - pNewBuffer = FX_Realloc(uint8_t, m_pBuffer, new_size);
|
| - } else {
|
| - pNewBuffer = FX_Alloc(uint8_t, new_size);
|
| - }
|
| - m_pBuffer = pNewBuffer;
|
| - m_AllocSize = new_size;
|
| -}
|
| -void CFX_BinaryBuf::CopyData(const void* pStr, FX_STRSIZE size)
|
| -{
|
| - if (size == 0) {
|
| - m_DataSize = 0;
|
| - return;
|
| - }
|
| - if (m_AllocSize < size) {
|
| - ExpandBuf(size - m_DataSize);
|
| - }
|
| - if (!m_pBuffer) {
|
| - return;
|
| - }
|
| - FXSYS_memcpy(m_pBuffer, pStr, size);
|
| - m_DataSize = size;
|
| -}
|
| -void CFX_BinaryBuf::AppendBlock(const void* pBuf, FX_STRSIZE size)
|
| -{
|
| - ExpandBuf(size);
|
| - if (pBuf && m_pBuffer) {
|
| - FXSYS_memcpy(m_pBuffer + m_DataSize, pBuf, size);
|
| - }
|
| - m_DataSize += size;
|
| -}
|
| -void CFX_BinaryBuf::InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size)
|
| -{
|
| - ExpandBuf(size);
|
| - if (!m_pBuffer) {
|
| - return;
|
| - }
|
| - FXSYS_memmove(m_pBuffer + pos + size, m_pBuffer + pos, m_DataSize - pos);
|
| - if (pBuf) {
|
| - FXSYS_memcpy(m_pBuffer + pos, pBuf, size);
|
| - }
|
| - m_DataSize += size;
|
| -}
|
| -void CFX_BinaryBuf::AppendFill(uint8_t byte, FX_STRSIZE count)
|
| -{
|
| - ExpandBuf(count);
|
| - if (!m_pBuffer) {
|
| - return;
|
| - }
|
| - FXSYS_memset(m_pBuffer + m_DataSize, byte, count);
|
| - m_DataSize += count;
|
| -}
|
| -CFX_ByteStringC CFX_BinaryBuf::GetByteString() const
|
| -{
|
| - return CFX_ByteStringC(m_pBuffer, m_DataSize);
|
| -}
|
| -CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (const CFX_ByteStringC& lpsz)
|
| -{
|
| - AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
|
| - return *this;
|
| -}
|
| -CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (int i)
|
| -{
|
| - char buf[32];
|
| - FXSYS_itoa(i, buf, 10);
|
| - AppendBlock(buf, FXSYS_strlen(buf));
|
| - return *this;
|
| -}
|
| -CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (FX_DWORD i)
|
| -{
|
| - char buf[32];
|
| - FXSYS_itoa(i, buf, 10);
|
| - AppendBlock(buf, FXSYS_strlen(buf));
|
| - return *this;
|
| -}
|
| -CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (double f)
|
| -{
|
| - char buf[32];
|
| - FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
|
| - AppendBlock(buf, len);
|
| - return *this;
|
| -}
|
| -CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (const CFX_ByteTextBuf& buf)
|
| -{
|
| - AppendBlock(buf.m_pBuffer, buf.m_DataSize);
|
| - return *this;
|
| -}
|
| -void CFX_ByteTextBuf::operator =(const CFX_ByteStringC& str)
|
| -{
|
| - CopyData(str.GetPtr(), str.GetLength());
|
| -}
|
| -void CFX_WideTextBuf::AppendChar(FX_WCHAR ch)
|
| -{
|
| - if (m_AllocSize < m_DataSize + (FX_STRSIZE)sizeof(FX_WCHAR)) {
|
| - ExpandBuf(sizeof(FX_WCHAR));
|
| - }
|
| - ASSERT(m_pBuffer != NULL);
|
| - *(FX_WCHAR*)(m_pBuffer + m_DataSize) = ch;
|
| - m_DataSize += sizeof(FX_WCHAR);
|
| -}
|
| -CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideStringC& str)
|
| -{
|
| - AppendBlock(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
|
| - return *this;
|
| -}
|
| -CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideString &str)
|
| -{
|
| - AppendBlock(str.c_str(), str.GetLength() * sizeof(FX_WCHAR));
|
| - return *this;
|
| -}
|
| -CFX_WideTextBuf& CFX_WideTextBuf::operator << (int i)
|
| -{
|
| - char buf[32];
|
| - FXSYS_itoa(i, buf, 10);
|
| - FX_STRSIZE len = FXSYS_strlen(buf);
|
| - if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
|
| - ExpandBuf(len * sizeof(FX_WCHAR));
|
| - }
|
| - ASSERT(m_pBuffer != NULL);
|
| - FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
|
| - for (FX_STRSIZE j = 0; j < len; j ++) {
|
| - *str ++ = buf[j];
|
| - }
|
| - m_DataSize += len * sizeof(FX_WCHAR);
|
| - return *this;
|
| -}
|
| -CFX_WideTextBuf& CFX_WideTextBuf::operator << (double f)
|
| -{
|
| - char buf[32];
|
| - FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
|
| - if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
|
| - ExpandBuf(len * sizeof(FX_WCHAR));
|
| - }
|
| - ASSERT(m_pBuffer != NULL);
|
| - FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
|
| - for (FX_STRSIZE i = 0; i < len; i ++) {
|
| - *str ++ = buf[i];
|
| - }
|
| - m_DataSize += len * sizeof(FX_WCHAR);
|
| - return *this;
|
| -}
|
| -CFX_WideTextBuf& CFX_WideTextBuf::operator << (const FX_WCHAR* lpsz)
|
| -{
|
| - AppendBlock(lpsz, FXSYS_wcslen(lpsz)*sizeof(FX_WCHAR));
|
| - return *this;
|
| -}
|
| -CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideTextBuf& buf)
|
| -{
|
| - AppendBlock(buf.m_pBuffer, buf.m_DataSize);
|
| - return *this;
|
| -}
|
| -void CFX_WideTextBuf::operator =(const CFX_WideStringC& str)
|
| -{
|
| - CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
|
| -}
|
| -CFX_WideStringC CFX_WideTextBuf::GetWideString() const
|
| -{
|
| - return CFX_WideStringC((const FX_WCHAR*)m_pBuffer, m_DataSize / sizeof(FX_WCHAR));
|
| -}
|
| -void CFX_BitStream::Init(const uint8_t* pData, FX_DWORD dwSize)
|
| -{
|
| - m_pData = pData;
|
| - m_BitSize = dwSize * 8;
|
| - m_BitPos = 0;
|
| -}
|
| -void CFX_BitStream::ByteAlign()
|
| -{
|
| - int mod = m_BitPos % 8;
|
| - if (mod == 0) {
|
| - return;
|
| - }
|
| - m_BitPos += 8 - mod;
|
| -}
|
| -FX_DWORD CFX_BitStream::GetBits(FX_DWORD nBits)
|
| -{
|
| - if (nBits > m_BitSize || m_BitPos + nBits > m_BitSize) {
|
| - return 0;
|
| - }
|
| - if (nBits == 1) {
|
| - int bit = (m_pData[m_BitPos / 8] & (1 << (7 - m_BitPos % 8))) ? 1 : 0;
|
| - m_BitPos ++;
|
| - return bit;
|
| - }
|
| - FX_DWORD byte_pos = m_BitPos / 8;
|
| - FX_DWORD bit_pos = m_BitPos % 8, bit_left = nBits;
|
| - FX_DWORD result = 0;
|
| - if (bit_pos) {
|
| - if (8 - bit_pos >= bit_left) {
|
| - result = (m_pData[byte_pos] & (0xff >> bit_pos)) >> (8 - bit_pos - bit_left);
|
| - m_BitPos += bit_left;
|
| - return result;
|
| - }
|
| - bit_left -= 8 - bit_pos;
|
| - result = (m_pData[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left;
|
| - }
|
| - while (bit_left >= 8) {
|
| - bit_left -= 8;
|
| - result |= m_pData[byte_pos++] << bit_left;
|
| - }
|
| - if (bit_left) {
|
| - result |= m_pData[byte_pos] >> (8 - bit_left);
|
| - }
|
| - m_BitPos += nBits;
|
| - return result;
|
| + }
|
| + if (!m_pBuffer) {
|
| + return;
|
| + }
|
| + FXSYS_memcpy(m_pBuffer, pStr, size);
|
| + m_DataSize = size;
|
| +}
|
| +void CFX_BinaryBuf::AppendBlock(const void* pBuf, FX_STRSIZE size) {
|
| + ExpandBuf(size);
|
| + if (pBuf && m_pBuffer) {
|
| + FXSYS_memcpy(m_pBuffer + m_DataSize, pBuf, size);
|
| + }
|
| + m_DataSize += size;
|
| +}
|
| +void CFX_BinaryBuf::InsertBlock(FX_STRSIZE pos,
|
| + const void* pBuf,
|
| + FX_STRSIZE size) {
|
| + ExpandBuf(size);
|
| + if (!m_pBuffer) {
|
| + return;
|
| + }
|
| + FXSYS_memmove(m_pBuffer + pos + size, m_pBuffer + pos, m_DataSize - pos);
|
| + if (pBuf) {
|
| + FXSYS_memcpy(m_pBuffer + pos, pBuf, size);
|
| + }
|
| + m_DataSize += size;
|
| +}
|
| +void CFX_BinaryBuf::AppendFill(uint8_t byte, FX_STRSIZE count) {
|
| + ExpandBuf(count);
|
| + if (!m_pBuffer) {
|
| + return;
|
| + }
|
| + FXSYS_memset(m_pBuffer + m_DataSize, byte, count);
|
| + m_DataSize += count;
|
| +}
|
| +CFX_ByteStringC CFX_BinaryBuf::GetByteString() const {
|
| + return CFX_ByteStringC(m_pBuffer, m_DataSize);
|
| +}
|
| +CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(const CFX_ByteStringC& lpsz) {
|
| + AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
|
| + return *this;
|
| +}
|
| +CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(int i) {
|
| + char buf[32];
|
| + FXSYS_itoa(i, buf, 10);
|
| + AppendBlock(buf, FXSYS_strlen(buf));
|
| + return *this;
|
| +}
|
| +CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(FX_DWORD i) {
|
| + char buf[32];
|
| + FXSYS_itoa(i, buf, 10);
|
| + AppendBlock(buf, FXSYS_strlen(buf));
|
| + return *this;
|
| +}
|
| +CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(double f) {
|
| + char buf[32];
|
| + FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
|
| + AppendBlock(buf, len);
|
| + return *this;
|
| +}
|
| +CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(const CFX_ByteTextBuf& buf) {
|
| + AppendBlock(buf.m_pBuffer, buf.m_DataSize);
|
| + return *this;
|
| +}
|
| +void CFX_ByteTextBuf::operator=(const CFX_ByteStringC& str) {
|
| + CopyData(str.GetPtr(), str.GetLength());
|
| +}
|
| +void CFX_WideTextBuf::AppendChar(FX_WCHAR ch) {
|
| + if (m_AllocSize < m_DataSize + (FX_STRSIZE)sizeof(FX_WCHAR)) {
|
| + ExpandBuf(sizeof(FX_WCHAR));
|
| + }
|
| + ASSERT(m_pBuffer != NULL);
|
| + *(FX_WCHAR*)(m_pBuffer + m_DataSize) = ch;
|
| + m_DataSize += sizeof(FX_WCHAR);
|
| +}
|
| +CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideStringC& str) {
|
| + AppendBlock(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
|
| + return *this;
|
| +}
|
| +CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideString& str) {
|
| + AppendBlock(str.c_str(), str.GetLength() * sizeof(FX_WCHAR));
|
| + return *this;
|
| +}
|
| +CFX_WideTextBuf& CFX_WideTextBuf::operator<<(int i) {
|
| + char buf[32];
|
| + FXSYS_itoa(i, buf, 10);
|
| + FX_STRSIZE len = FXSYS_strlen(buf);
|
| + if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
|
| + ExpandBuf(len * sizeof(FX_WCHAR));
|
| + }
|
| + ASSERT(m_pBuffer != NULL);
|
| + FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
|
| + for (FX_STRSIZE j = 0; j < len; j++) {
|
| + *str++ = buf[j];
|
| + }
|
| + m_DataSize += len * sizeof(FX_WCHAR);
|
| + return *this;
|
| +}
|
| +CFX_WideTextBuf& CFX_WideTextBuf::operator<<(double f) {
|
| + char buf[32];
|
| + FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
|
| + if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
|
| + ExpandBuf(len * sizeof(FX_WCHAR));
|
| + }
|
| + ASSERT(m_pBuffer != NULL);
|
| + FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
|
| + for (FX_STRSIZE i = 0; i < len; i++) {
|
| + *str++ = buf[i];
|
| + }
|
| + m_DataSize += len * sizeof(FX_WCHAR);
|
| + return *this;
|
| +}
|
| +CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const FX_WCHAR* lpsz) {
|
| + AppendBlock(lpsz, FXSYS_wcslen(lpsz) * sizeof(FX_WCHAR));
|
| + return *this;
|
| +}
|
| +CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideTextBuf& buf) {
|
| + AppendBlock(buf.m_pBuffer, buf.m_DataSize);
|
| + return *this;
|
| +}
|
| +void CFX_WideTextBuf::operator=(const CFX_WideStringC& str) {
|
| + CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
|
| +}
|
| +CFX_WideStringC CFX_WideTextBuf::GetWideString() const {
|
| + return CFX_WideStringC((const FX_WCHAR*)m_pBuffer,
|
| + m_DataSize / sizeof(FX_WCHAR));
|
| +}
|
| +void CFX_BitStream::Init(const uint8_t* pData, FX_DWORD dwSize) {
|
| + m_pData = pData;
|
| + m_BitSize = dwSize * 8;
|
| + m_BitPos = 0;
|
| +}
|
| +void CFX_BitStream::ByteAlign() {
|
| + int mod = m_BitPos % 8;
|
| + if (mod == 0) {
|
| + return;
|
| + }
|
| + m_BitPos += 8 - mod;
|
| +}
|
| +FX_DWORD CFX_BitStream::GetBits(FX_DWORD nBits) {
|
| + if (nBits > m_BitSize || m_BitPos + nBits > m_BitSize) {
|
| + return 0;
|
| + }
|
| + if (nBits == 1) {
|
| + int bit = (m_pData[m_BitPos / 8] & (1 << (7 - m_BitPos % 8))) ? 1 : 0;
|
| + m_BitPos++;
|
| + return bit;
|
| + }
|
| + FX_DWORD byte_pos = m_BitPos / 8;
|
| + FX_DWORD bit_pos = m_BitPos % 8, bit_left = nBits;
|
| + FX_DWORD result = 0;
|
| + if (bit_pos) {
|
| + if (8 - bit_pos >= bit_left) {
|
| + result =
|
| + (m_pData[byte_pos] & (0xff >> bit_pos)) >> (8 - bit_pos - bit_left);
|
| + m_BitPos += bit_left;
|
| + return result;
|
| + }
|
| + bit_left -= 8 - bit_pos;
|
| + result = (m_pData[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left;
|
| + }
|
| + while (bit_left >= 8) {
|
| + bit_left -= 8;
|
| + result |= m_pData[byte_pos++] << bit_left;
|
| + }
|
| + if (bit_left) {
|
| + result |= m_pData[byte_pos] >> (8 - bit_left);
|
| + }
|
| + m_BitPos += nBits;
|
| + return result;
|
| }
|
| IFX_BufferArchive::IFX_BufferArchive(FX_STRSIZE size)
|
| - : m_BufSize(size)
|
| - , m_pBuffer(NULL)
|
| - , m_Length(0)
|
| -{
|
| -}
|
| -void IFX_BufferArchive::Clear()
|
| -{
|
| - m_Length = 0;
|
| - if (m_pBuffer) {
|
| - FX_Free(m_pBuffer);
|
| - m_pBuffer = NULL;
|
| - }
|
| -}
|
| -FX_BOOL IFX_BufferArchive::Flush()
|
| -{
|
| - FX_BOOL bRet = DoWork(m_pBuffer, m_Length);
|
| - m_Length = 0;
|
| - return bRet;
|
| -}
|
| -int32_t IFX_BufferArchive::AppendBlock(const void* pBuf, size_t size)
|
| -{
|
| - if (!pBuf || size < 1) {
|
| - return 0;
|
| - }
|
| - if (!m_pBuffer) {
|
| - m_pBuffer = FX_Alloc(uint8_t, m_BufSize);
|
| - }
|
| - uint8_t* buffer = (uint8_t*)pBuf;
|
| - FX_STRSIZE temp_size = (FX_STRSIZE)size;
|
| - while (temp_size > 0) {
|
| - FX_STRSIZE buf_size = FX_MIN(m_BufSize - m_Length, (FX_STRSIZE)temp_size);
|
| - FXSYS_memcpy(m_pBuffer + m_Length, buffer, buf_size);
|
| - m_Length += buf_size;
|
| - if (m_Length == m_BufSize) {
|
| - if (!Flush()) {
|
| - return -1;
|
| - }
|
| - }
|
| - temp_size -= buf_size;
|
| - buffer += buf_size;
|
| - }
|
| - return (int32_t)size;
|
| -}
|
| -int32_t IFX_BufferArchive::AppendByte(uint8_t byte)
|
| -{
|
| - return AppendBlock(&byte, 1);
|
| -}
|
| -int32_t IFX_BufferArchive::AppendDWord(FX_DWORD i)
|
| -{
|
| - char buf[32];
|
| - FXSYS_itoa(i, buf, 10);
|
| - return AppendBlock(buf, (size_t)FXSYS_strlen(buf));
|
| -}
|
| -int32_t IFX_BufferArchive::AppendString(const CFX_ByteStringC& lpsz)
|
| -{
|
| - return AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
|
| + : m_BufSize(size), m_pBuffer(NULL), m_Length(0) {}
|
| +void IFX_BufferArchive::Clear() {
|
| + m_Length = 0;
|
| + if (m_pBuffer) {
|
| + FX_Free(m_pBuffer);
|
| + m_pBuffer = NULL;
|
| + }
|
| +}
|
| +FX_BOOL IFX_BufferArchive::Flush() {
|
| + FX_BOOL bRet = DoWork(m_pBuffer, m_Length);
|
| + m_Length = 0;
|
| + return bRet;
|
| +}
|
| +int32_t IFX_BufferArchive::AppendBlock(const void* pBuf, size_t size) {
|
| + if (!pBuf || size < 1) {
|
| + return 0;
|
| + }
|
| + if (!m_pBuffer) {
|
| + m_pBuffer = FX_Alloc(uint8_t, m_BufSize);
|
| + }
|
| + uint8_t* buffer = (uint8_t*)pBuf;
|
| + FX_STRSIZE temp_size = (FX_STRSIZE)size;
|
| + while (temp_size > 0) {
|
| + FX_STRSIZE buf_size = FX_MIN(m_BufSize - m_Length, (FX_STRSIZE)temp_size);
|
| + FXSYS_memcpy(m_pBuffer + m_Length, buffer, buf_size);
|
| + m_Length += buf_size;
|
| + if (m_Length == m_BufSize) {
|
| + if (!Flush()) {
|
| + return -1;
|
| + }
|
| + }
|
| + temp_size -= buf_size;
|
| + buffer += buf_size;
|
| + }
|
| + return (int32_t)size;
|
| +}
|
| +int32_t IFX_BufferArchive::AppendByte(uint8_t byte) {
|
| + return AppendBlock(&byte, 1);
|
| +}
|
| +int32_t IFX_BufferArchive::AppendDWord(FX_DWORD i) {
|
| + char buf[32];
|
| + FXSYS_itoa(i, buf, 10);
|
| + return AppendBlock(buf, (size_t)FXSYS_strlen(buf));
|
| +}
|
| +int32_t IFX_BufferArchive::AppendString(const CFX_ByteStringC& lpsz) {
|
| + return AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
|
| }
|
| CFX_FileBufferArchive::CFX_FileBufferArchive(FX_STRSIZE size)
|
| - : IFX_BufferArchive(size)
|
| - , m_pFile(NULL)
|
| - , m_bTakeover(FALSE)
|
| -{
|
| -}
|
| -CFX_FileBufferArchive::~CFX_FileBufferArchive()
|
| -{
|
| - Clear();
|
| -}
|
| -void CFX_FileBufferArchive::Clear()
|
| -{
|
| - if (m_pFile && m_bTakeover) {
|
| - m_pFile->Release();
|
| - }
|
| - m_pFile = NULL;
|
| - m_bTakeover = FALSE;
|
| - IFX_BufferArchive::Clear();
|
| -}
|
| -FX_BOOL CFX_FileBufferArchive::AttachFile(IFX_StreamWrite *pFile, FX_BOOL bTakeover )
|
| -{
|
| - if (!pFile) {
|
| - return FALSE;
|
| - }
|
| - if (m_pFile && m_bTakeover) {
|
| - m_pFile->Release();
|
| - }
|
| - m_pFile = pFile;
|
| - m_bTakeover = bTakeover;
|
| - return TRUE;
|
| -}
|
| -FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_WCHAR* filename)
|
| -{
|
| - if (!filename) {
|
| - return FALSE;
|
| - }
|
| - if (m_pFile && m_bTakeover) {
|
| - m_pFile->Release();
|
| - }
|
| - m_pFile = FX_CreateFileWrite(filename);
|
| - if (!m_pFile) {
|
| - return FALSE;
|
| - }
|
| - m_bTakeover = TRUE;
|
| + : IFX_BufferArchive(size), m_pFile(NULL), m_bTakeover(FALSE) {}
|
| +CFX_FileBufferArchive::~CFX_FileBufferArchive() {
|
| + Clear();
|
| +}
|
| +void CFX_FileBufferArchive::Clear() {
|
| + if (m_pFile && m_bTakeover) {
|
| + m_pFile->Release();
|
| + }
|
| + m_pFile = NULL;
|
| + m_bTakeover = FALSE;
|
| + IFX_BufferArchive::Clear();
|
| +}
|
| +FX_BOOL CFX_FileBufferArchive::AttachFile(IFX_StreamWrite* pFile,
|
| + FX_BOOL bTakeover) {
|
| + if (!pFile) {
|
| + return FALSE;
|
| + }
|
| + if (m_pFile && m_bTakeover) {
|
| + m_pFile->Release();
|
| + }
|
| + m_pFile = pFile;
|
| + m_bTakeover = bTakeover;
|
| + return TRUE;
|
| +}
|
| +FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_WCHAR* filename) {
|
| + if (!filename) {
|
| + return FALSE;
|
| + }
|
| + if (m_pFile && m_bTakeover) {
|
| + m_pFile->Release();
|
| + }
|
| + m_pFile = FX_CreateFileWrite(filename);
|
| + if (!m_pFile) {
|
| + return FALSE;
|
| + }
|
| + m_bTakeover = TRUE;
|
| + return TRUE;
|
| +}
|
| +FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_CHAR* filename) {
|
| + if (!filename) {
|
| + return FALSE;
|
| + }
|
| + if (m_pFile && m_bTakeover) {
|
| + m_pFile->Release();
|
| + }
|
| + m_pFile = FX_CreateFileWrite(filename);
|
| + if (!m_pFile) {
|
| + return FALSE;
|
| + }
|
| + m_bTakeover = TRUE;
|
| + return TRUE;
|
| +}
|
| +FX_BOOL CFX_FileBufferArchive::DoWork(const void* pBuf, size_t size) {
|
| + if (!m_pFile) {
|
| + return FALSE;
|
| + }
|
| + if (!pBuf || size < 1) {
|
| return TRUE;
|
| -}
|
| -FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_CHAR* filename)
|
| -{
|
| - if (!filename) {
|
| - return FALSE;
|
| - }
|
| - if (m_pFile && m_bTakeover) {
|
| - m_pFile->Release();
|
| - }
|
| - m_pFile = FX_CreateFileWrite(filename);
|
| - if (!m_pFile) {
|
| - return FALSE;
|
| - }
|
| - m_bTakeover = TRUE;
|
| - return TRUE;
|
| -}
|
| -FX_BOOL CFX_FileBufferArchive::DoWork(const void* pBuf, size_t size)
|
| -{
|
| - if (!m_pFile) {
|
| - return FALSE;
|
| - }
|
| - if (!pBuf || size < 1) {
|
| - return TRUE;
|
| - }
|
| - return m_pFile->WriteBlock(pBuf, size);
|
| + }
|
| + return m_pFile->WriteBlock(pBuf, size);
|
| }
|
|
|