bytearray.h

来自「服务端: 这是一个完整的基于Wince 4.1图形图象,网络通讯(C/S)模式」· C头文件 代码 · 共 82 行

H
82
字号
#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 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?