通用循环缓冲区类(c++版)

本文介绍了一个C++实现的通用循环缓冲区类`CCycleBuffer`,包括构造函数、析构函数以及`Write`、`Read`、`GetLength`等方法,用于在满或空的情况下高效地进行数据读写操作。类内部维护了缓冲区的状态和位置信息,确保了数据的正确存取。
摘要由CSDN通过智能技术生成

// 声明

class CCycleBuffer 
{
public:
 BOOL isFull();
 BOOL isEmpty();
 void Empty();
 int GetLength();
 CCycleBuffer(int size);
 virtual ~CCycleBuffer();
 int Write(char* buf, int count);
 int Read(char* buf, int count);
private:
 BOOL m_bEmpty, m_bFull;
 char * m_pBuf;
 int m_nBufSize;
 int m_nReadPos;
 int m_nWritePos;
};

// 定义

CCycleBuffer::CCycleBuffer(int size)
{
 m_nBufSize = size;
 m_nReadPos = 0;
 m_nWritePos = 0;
 m_pBuf = new char[m_nBufSize];
 m_bEmpty = TRUE;
 m_bFull = FALSE;
}

CCycleBuffer::~CCycleBuffer()
{
 delete[] m_pBuf;
}

/************************************************************************/
/* 向缓冲区写入数据,返回实际写入的字节数                               */
/************************************************************************/
int CCycleBuffer::Write(char* buf, int count)
{
 if(count <= 0) return 0;

 m_bEmpty = FALSE;

 // 缓冲区已满,不能继续写入
 if(m_bFull) 
 {
  return 0;
 }
 else if(m_nReadPos == m_nWritePos) // 缓冲区为空时
 {
  /*                          == 内存模型 ==
             (empty)             m_nReadPos                (empty)                     
  |----------------------------------|-----------------------------------------|
                                m_nWritePos        m_nBufSize
  */
  int leftcount = m_nBufSize - m_nWritePos;
  if(leftcount > count)
  {
   CopyMemory(m_pBuf + m_nWritePos, buf, count);
   m_nWritePos += count;
   m_bFull = (m_nWritePos =

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值