82 lines
1.6 KiB
C++
Executable File
82 lines
1.6 KiB
C++
Executable File
#ifndef __BYTE_ARRAY__H__
|
|
#define __BYTE_ARRAY__H__
|
|
|
|
#define OUT_OF_MEMORY_QUITING _T("Fatal Error: Out of memory. Quiting.")
|
|
|
|
class ByteArray {
|
|
|
|
public:
|
|
BYTE* m_pBuffer;
|
|
|
|
ByteArray(const int nGrowBy = 50) :
|
|
m_nGrowBy(nGrowBy), m_nBufferSize(0), m_nSize(0)
|
|
{
|
|
//m_pBuffer = new BYTE[m_nSize];
|
|
m_pBuffer = (BYTE*)::malloc(m_nSize);
|
|
//if (! m_pBuffer) {
|
|
// ::AfxMessageBox(OUT_OF_MEMORY_QUITING);
|
|
// ::PostQuitMessage(1);
|
|
//}
|
|
}
|
|
|
|
inline int GetSize() const {
|
|
return m_nSize;
|
|
}
|
|
|
|
inline bool Add(const BYTE b) {
|
|
if (m_nSize >= m_nBufferSize) {
|
|
if (! GrowBuffer()) {
|
|
return false;
|
|
}
|
|
}
|
|
m_pBuffer[m_nSize++] = b;
|
|
return true;
|
|
}
|
|
|
|
inline bool Append(const BYTE* pArray, const int nSize) {
|
|
while ((m_nSize + nSize) > m_nBufferSize) {
|
|
if (! GrowBuffer()) {
|
|
return false;
|
|
}
|
|
}
|
|
::memcpy((m_pBuffer + m_nSize), pArray, sizeof(BYTE) * nSize);
|
|
m_nSize += nSize;
|
|
return true;
|
|
}
|
|
|
|
BYTE* GetData() const {
|
|
return m_pBuffer;
|
|
}
|
|
|
|
~ByteArray() {
|
|
//delete m_pBuffer;
|
|
::free(m_pBuffer);
|
|
}
|
|
|
|
|
|
private:
|
|
int m_nBufferSize;
|
|
int m_nGrowBy;
|
|
int m_nSize;
|
|
|
|
bool GrowBuffer()
|
|
{
|
|
ASSERT(m_pBuffer);
|
|
|
|
int nNewBufferSize = m_nBufferSize + m_nGrowBy;
|
|
//BYTE* pNewBuffer = new BYTE[nNewBufferSize];
|
|
BYTE* pNewBuffer = (BYTE*)::malloc(sizeof(BYTE)*nNewBufferSize);
|
|
if (! pNewBuffer) {
|
|
return false;
|
|
}
|
|
memcpy(pNewBuffer, m_pBuffer, sizeof(BYTE) * m_nSize);
|
|
//delete m_pBuffer;
|
|
::free(m_pBuffer);
|
|
m_pBuffer = pNewBuffer;
|
|
m_nBufferSize = nNewBufferSize;
|
|
return true;
|
|
}
|
|
|
|
};
|
|
|
|
#endif |