缓冲区的C++封装

#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;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值