⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ringbuffer.cpp

📁 奇迹世界公用文件源代码,研究网络游戏的朋友可以研究下
💻 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 + -