📄 ringbuffer.cpp
字号:
// RingBuffer.cpp: implementation of the RingBuffer class.
//
//////////////////////////////////////////////////////////////////////
#include "UtilityCommon.h"
#include <Windows.h>
#include "RingBuffer.h"
#include <assert.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
namespace util
{
RingBuffer::RingBuffer()
{
m_pBuffer = NULL;
}
RingBuffer::~RingBuffer()
{
ReleaseBuffer();
}
VOID RingBuffer::ReleaseBuffer()
{
if( m_pBuffer )
{
delete [] m_pBuffer;
m_pBuffer = NULL;
}
}
VOID RingBuffer::InitBuffer( DWORD dwBufferSize )
{
m_dwMaxBufferSize = dwBufferSize;
m_dwExtraBufferSize = m_dwMaxBufferSize/4;
m_pBuffer = new BYTE [ m_dwMaxBufferSize + m_dwExtraBufferSize ];
ResetBuffer();
}
VOID RingBuffer::ResetBuffer()
{
m_dwAvailableSize = m_dwMaxBufferSize;
m_pFront = m_pRear = &m_pBuffer[0];
m_pHead = &m_pBuffer[ 0 ];
m_pTail = &m_pBuffer[ m_dwMaxBufferSize ];
}
BOOL RingBuffer::Put( BYTE * pData, DWORD dwSize )
{
assert( dwSize > 0 );
//<= -> <肺 荐沥
if( GetAvailableSize() < dwSize ) return FALSE;
if( (m_pRear+dwSize) > (m_pTail+m_dwExtraBufferSize) )
return FALSE;
if( pData ) memcpy( m_pRear, pData, dwSize );
m_pRear += dwSize;
// 沥规氢
if( m_pFront <= m_pRear )
{
// m_dwMaxBufferSize 檬苞 何盒阑 荤侩沁栏骨肺 促澜俊绰 m_pHead 何磐 矫累茄促.
if( m_pRear > m_pTail )
{
m_pRear = m_pHead;
}
}
m_dwAvailableSize -= dwSize;
return TRUE;
}
BOOL RingBuffer::Get( BYTE * pData, DWORD dwSize )
{
if( GetOccupiedSize() < dwSize ) return FALSE;
if( pData ) memcpy( pData, m_pFront, dwSize );
m_pFront += dwSize;
// m_dwMaxBufferSize 檬苞 何盒阑 荤侩沁栏骨肺 促澜俊绰 m_pHead 何磐 矫累茄促.
if( m_pFront > m_pTail )
{
m_pFront = m_pHead;
}
m_dwAvailableSize += dwSize;
return TRUE;
}
BOOL RingBuffer::Peek( BYTE * pData, DWORD dwSize )
{
if( GetOccupiedSize() < dwSize ) return FALSE;
if( pData ) memcpy( pData, m_pFront, dwSize );
return TRUE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -