您的位置:首页 > 编程语言 > C语言/C++

缓冲区的C++封装

2015-08-25 16:47 387 查看
#include "windows.h"

class CBuffer{

public:
CBuffer(DWORD size = 1024)
{
if(size == 0)
size = 1024;

m_TxDSize = 0;
m_TxStart = 0;
m_TxBufSz = size;
m_pTxBuf  = new BYTE[size];

if(m_pTxBuf == NULL)
m_TxBufSz = 0;
}
~CBuffer(void)
{
delete m_pTxBuf;
}

public:

int Read(BYTE *pBuf, DWORD nSize)
{
DWORD Num, cpsz, left;

Num = min(nSize, m_TxDSize);
if(Num == 0)
return 0;

cpsz = m_TxBufSz - m_TxStart;
cpsz = min(Num, cpsz);
if(cpsz)
{
memcpy(pBuf, m_pTxBuf + m_TxStart, cpsz);
//memset(m_pTxBuf + m_TxStart, 0, cpsz);
}

left = Num - cpsz;
if(left)
{
memcpy(pBuf+cpsz, m_pTxBuf, left);
//memset(m_pTxBuf, 0, left);
}

m_TxDSize -= Num;
m_TxStart += Num;
m_TxStart %= m_TxBufSz;

return Num;
}

int Write(BYTE *pBuf, DWORD nSize)
{
DWORD Num, tail, cpsz, left;

Num = m_TxBufSz - m_TxDSize;
Num = min(nSize, Num);
if(Num == 0)
return 0;

tail =  (m_TxStart + m_TxDSize) % m_TxBufSz;

cpsz = m_TxBufSz - tail;
cpsz = min(Num, cpsz);
if(cpsz)
memcpy(m_pTxBuf + tail, pBuf, cpsz);

left = Num - cpsz;
if(left)
memcpy(m_pTxBuf, pBuf+cpsz, left);

m_TxDSize += Num;

return Num;
}

private:
BYTE *m_pTxBuf;
DWORD m_TxBufSz;
DWORD m_TxDSize;
DWORD m_TxStart;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: