?? 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;
// 瀝規(guī)氫
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;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -