缓冲区的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; };
相关文章推荐
- C语言求质数
- C语言学习-----指针篇(1)-----指向多维数组的指针和指针变量
- House Robber
- c++11新特性 auto的使用
- 最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(C/C++)
- 最短路径算法—SPFA(Shortest Path Faster Algorithm)算法分析与实现(C/C++)
- c++基础1:需要了解的几点重要概念
- 《算法导论》中的计数排序的C++实现
- Item 10:赋值运算符要返回自己的引用 Effective C++笔记
- Item 9:在析构/构造时不要调用虚函数 Effective C++笔记
- C/C++中计算程序运行时间
- C++ 11开发环境的搭建(Windows Platform)
- 【c++】猜单词游戏
- Des算法的实现
- 排序算法之插入排序(C语言实现)
- c语言与c++区别
- 二叉树遍历
- 使用C语言判断英文字符大小写的方法
- C++11引用临时变量的终极解析
- C++ List 双向链表 实现 会用也要会写