📄 ringbufferex.h
字号:
#pragma once
namespace util
{
//=============================================================================================================================
/// RingBufferEx class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2004. 12. 29
@remark
- 扁粮狼 傅滚欺(RingBuffer)狼 促弗 扁瓷狼 傅滚欺
@note
-
@history
-
*/
//=============================================================================================================================
//
// Socket栏肺 data甫 林绊罐扁 傈俊 历厘秦滴绰 buffer( circular queue )
//
// m_Head==m_Tail : empty
// m_Head==m_Tail+1 : full ( m_Head > m_Tail )
// m_Head==0, m_Tail==m_BufferSize-1 : full ( m_Head < m_Tail )
// (!) m_Tail 磊府绰 亲惑 empty捞促.
//
class RingBufferEx
{
public :
RingBufferEx(int bufferSize = 0);
virtual ~RingBufferEx();
void Init( int bufferSize );
void Release();
void Recycle();
int Write( const BYTE * pBuffer, int len ); // 郴何 buffer俊 敬促.
int Read( BYTE * pBuffer, int len ); // 郴何 buffer俊辑 佬绢柯促.
int Peek( BYTE * pBuffer, int len ); // Read牢单 head, tail篮 函拳绝促.
int Skip( int len ); // head, tail父 函拳
bool IsEmpty() const { return m_Head == m_Tail; }
bool IsFull() const { return GetFreeSize()==0; }
int GetBufferSize() const { return m_BufferSize; }
int GetDataSize() const { return m_Head <= m_Tail? m_Tail-m_Head : m_BufferSize-m_Head+m_Tail; }
int GetFreeSize() const { return GetBufferSize() - GetDataSize() - 1; } // -1 for tail position
BYTE * GetContigousPtr(OUT int & size) const;
protected :
BYTE * m_pBuffer;
int m_BufferSize;
int m_Head;
int m_Tail;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -