📄 cbytebuffer.cpp
字号:
#include "stdafx.h"
#include "CByteBuffer.h"
CByteBuffer::CByteBuffer(UINT uTheMaxLength)
{
uMaxLength=uTheMaxLength;
uLength=0;
uHeader=0;
uTail=0;
pbyContent=(BYTE*)GlobalAlloc(GMEM_FIXED,uMaxLength);
}
CByteBuffer::~CByteBuffer()
{
GlobalFree(pbyContent);
}
UINT CByteBuffer::DetachHeader(BYTE* pbyDetachedContent,UINT uDetachLength)
{
CSingleLock sLock(&CriSec);
sLock.Lock();
if(uDetachLength==0)return 0;
if(pbyDetachedContent==NULL)return 0;
if(uLength==0)return 0;
if(uDetachLength>uLength)uDetachLength=uLength;
if(uHeader>=uTail)
{
BYTE *pTemp=pbyContent+uHeader;
if(uDetachLength+uHeader<=uMaxLength)
CopyMemory(pbyDetachedContent,pTemp,uDetachLength);
else
{
CopyMemory(pbyDetachedContent,pTemp,uMaxLength-uHeader);
CopyMemory(pbyDetachedContent+uMaxLength-uHeader,
pbyContent,uDetachLength-(uMaxLength-uHeader));
}
}
else
CopyMemory(pbyDetachedContent,
pbyContent+uHeader,uDetachLength);
uHeader+=uDetachLength;
uHeader%=uMaxLength;
uLength-=uDetachLength;
return uDetachLength;
}
UINT CByteBuffer::GetHeader(BYTE* pbyBuffer,UINT uGetLength)
{
CSingleLock sLock(&CriSec);
sLock.Lock();
if(uGetLength==0)return 0;
if(pbyBuffer==NULL)return 0;
if(uLength==0)return 0;
if(uGetLength>uLength)uGetLength=uLength;
if(uHeader>=uTail)
{
BYTE *pTemp=pbyContent+uHeader;
if(uGetLength+uHeader<=uMaxLength)
CopyMemory(pbyBuffer,pTemp,uGetLength);
else
{
CopyMemory(pbyBuffer,pTemp,uMaxLength-uHeader);
CopyMemory(pbyBuffer+uMaxLength-uHeader,
pbyContent,uGetLength-(uMaxLength-uHeader));
}
}
else
CopyMemory(pbyBuffer,
pbyContent+uHeader,uGetLength);
return uGetLength;
}
void CByteBuffer::RemoveHeader(UINT uRemoveLength)
{
CSingleLock sLock(&CriSec);
sLock.Lock();
if(uRemoveLength==0)return ;
if(uLength==0)return ;
if(uRemoveLength>uLength)uRemoveLength=uLength;
uHeader+=uRemoveLength;
uHeader%=uMaxLength;
uLength-=uRemoveLength;
}
BOOL CByteBuffer::AppendTail(BYTE* pbyAppendContent,UINT uAppendLength)
{
CSingleLock sLock(&CriSec);
sLock.Lock();
if(uAppendLength==0)return TRUE;
if(pbyAppendContent==NULL)return FALSE;
if(uAppendLength+uLength>=uMaxLength)return FALSE;
if(uHeader<=uTail)
{
if(uMaxLength-uTail>=uAppendLength)
CopyMemory(pbyContent+uTail,
pbyAppendContent,uAppendLength);
else
{
CopyMemory(pbyContent+uTail,
pbyAppendContent,uMaxLength-uTail);
CopyMemory(pbyContent,pbyAppendContent+uMaxLength-uTail,
uAppendLength-(uMaxLength-uTail));
}
}
else
CopyMemory(pbyContent+uTail,pbyAppendContent,uAppendLength);
uTail+=uAppendLength;
uTail%=uMaxLength;
uLength+=uAppendLength;
return TRUE;
}
UINT CByteBuffer::GetLength()
{
CSingleLock sLock(&CriSec);
sLock.Lock();
return uLength;
}
UINT CByteBuffer::GetMaxLength()
{
CSingleLock sLock(&CriSec);
sLock.Lock();
return uMaxLength;
}
void CByteBuffer::Clear()
{
CSingleLock sLock(&CriSec);
sLock.Lock();
uLength=0;
uHeader=0;
uTail=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -