/*******************************************************}
{
}
{ File: Buffer.h }
{ Created by Tsviatko Jongov }
{ http://tsviatko.jongov.com }
{
}
{ CBuffer class. }
{
}
{*******************************************************/
#ifndef
__BUFFER_H__
#define
__BUFFER_H__
class CBuffer
{
protected:
unsigned char * m_Buffer;
unsigned long m_Size;
public:
unsigned long m_First;
unsigned long m_Last;
CBuffer(unsigned
long Size):
m_First(0),
m_Size(0),
m_Last(0)
{
if
(Size > 0)
{
m_Buffer = new
unsigned char[Size];
m_Size = Size;
}
}
~CBuffer()
{
if
(m_Buffer)
{
delete
[] m_Buffer;
}
}
void Add(unsigned char * Data,
unsigned long
Size)
{
if
(m_Last + Size > m_Size)
{
unsigned
char * TempBuffer = new
unsigned char[m_Size
+ Size];
memcpy(TempBuffer, m_Buffer, m_Last);
m_Size += Size;
delete
[] m_Buffer;
m_Buffer = TempBuffer;
}
memcpy(m_Buffer + m_Last, Data, Size);
m_Last += Size;
}
unsigned char * Tail()
{
return
(m_Buffer + m_Last);
}
void
Compact()
{
if
(m_First > 0)
{
unsigned
long aLen = m_Last - m_First;
memcpy(m_Buffer, m_Buffer +
m_First, aLen);
m_First = 0;
m_Last = aLen;
}
}
void
Empty()
{
m_First = 0;
m_Last = 0;
}
unsigned long Size()
{
return
m_Size;
}
unsigned char * Head()
{
return
(m_Buffer + m_First);
}
unsigned long Len()
{
return
(m_Last - m_First);
}
};
#endif // __BUFFER_H__