gps/GPSProject/ImageViewer/ByteArray.h

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