出处:未知
说明:总的来说,用着还可以。
头文件:
#ifndef DataBuffer__INCLUDED
#define DataBuffer__INCLUDED
#pragma once
#include <windows.h>
class DataBuffer
{
public:
DataBuffer(unsigned int uMaxSize);
DataBuffer();
~DataBuffer(void);
void Allocate(unsigned int uMaxSize);
bool Append(char* _pBuffer, unsigned int _uSize);
void Pop(int _uSize);
unsigned int GetDataSize();
unsigned int GetMaxDataSize();
char* GetBuffer();
void GrowSize(unsigned int growBy);
unsigned int getRemainingSize();
char getAt(int offset);
private:
char* pBuffer;
unsigned int uSize;
unsigned int uMaxSize;
};
#endif
cpp文件:
#include "StdAfx.h"
#include "DataBuffer.h"
#include <winbase.h>
DataBuffer::DataBuffer(unsigned int uMaxSize)
{
uSize = 0;
Allocate(uMaxSize);
}
DataBuffer::DataBuffer()
{
uSize = 0;
pBuffer = NULL;
}
void DataBuffer::Allocate( unsigned int uMaxSize )
{
this->uMaxSize = uMaxSize;
pBuffer = new char[uMaxSize];
}
DataBuffer::~DataBuffer(void)
{
delete[] pBuffer;
}
bool DataBuffer::Append( char* _pBuffer, unsigned int _uSize )
{
if(getRemainingSize() < _uSize)
return false;
//Copy the data :
CopyMemory(pBuffer+uSize,_pBuffer,_uSize);
//Update the size of the buffer.
uSize+=_uSize;
return true;
}
void DataBuffer::Pop( int _uSize )
{
MoveMemory(pBuffer,pBuffer+_uSize,(uSize-_uSize));
uSize-=_uSize;
}
unsigned int DataBuffer::GetDataSize()
{
return uSize;
}
unsigned int DataBuffer::GetMaxDataSize()
{
return uMaxSize;
}
char* DataBuffer::GetBuffer()
{
return pBuffer;
}
unsigned int DataBuffer::getRemainingSize()
{
return uMaxSize - uSize;
}
void DataBuffer::GrowSize( unsigned int growBy )
{
uSize += growBy;
}
char DataBuffer::getAt( int offset )
{
return pBuffer[offset];
}