#ifndef APE_CIRCLEBUFFER_H
#define APE_CIRCLEBUFFER_H
class CCircleBuffer
{
public:
CCircleBuffer();
virtual ~CCircleBuffer();
void CreateBuffer(int nBytes, int nMaxDirectWriteBytes);
int MaxAdd();
int MaxGet();
inline unsigned char * GetDirectWritePointer()
{
return &m_pBuffer[m_nTail];
}
inline void UpdateAfterDirectWrite(int nBytes)
{
m_nTail += nBytes;
if (m_nTail >= (m_nTotal - m_nMaxDirectWriteBytes))
{
m_nEndCap = m_nTail;
m_nTail = 0;
}
}
int Get(unsigned char * pBuffer, int nBytes);
void Empty();
int RemoveHead(int nBytes);
int RemoveTail(int nBytes);
private:
int m_nTotal;
int m_nMaxDirectWriteBytes;
int m_nEndCap;
int m_nHead;
int m_nTail;
unsigned char * m_pBuffer;
};
#endif