Files
ls-2019-source/extra/LS_TTBot/cBuffer.cpp
T
2026-11-07 13:30:45 +07:00

266 lines
4.3 KiB
C++

#include "stdafx.h"
#include "cBuffer.h"
#include <iostream>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
cBuffer::cBuffer() : m_pDT(NULL), m_length(0), m_max(0)
{
}
cBuffer::cBuffer( uint32 length ) : m_pDT(NULL), m_length(length), m_max(0)
{
Create( length );
}
cBuffer::~cBuffer()
{
Destroy();
}
void cBuffer::Init()
{
m_pDT = NULL;
m_length = 0;
m_max = 0;
}
void cBuffer::Destroy()
{
if( m_pDT )
delete []m_pDT;
m_pDT = NULL;
m_length = 0;
m_max = 0;
}
//////////////////////////////////////////////////////////////////////
// Create/Erase
//////////////////////////////////////////////////////////////////////
BOOL cBuffer::Create( uint32 length )
{
if( m_pDT )
Destroy();
m_pDT = new uint8[ length ];
if( m_pDT )
{
m_length = 0;
m_max = length;
Erase();
return TRUE;
}
return FALSE;
}
BOOL cBuffer::Erase()
{
if( m_pDT )
{
ZeroMemory( m_pDT, m_length );
m_length = 0;
return TRUE;
}
return FALSE;
}
//////////////////////////////////////////////////////////////////////
// Copy/Append
//////////////////////////////////////////////////////////////////////
/*
BOOL cBuffer::Copy( const uint8* pDT, uint32 length )
{
if( m_pDT )
{
if( length <= m_max )
{
Erase();
m_length = length;
CopyMemory( m_pDT, pDT, m_length );
return TRUE;
}
}
return FALSE;
}
BOOL cBuffer::Copy( const uint32 segment, const uint8* pDT, uint32 length )
{
if( m_pDT )
{
if( (segment+length) <= m_max )
{
CopyMemory( m_pDT + segment, pDT, length );
m_length = segment + length;
return TRUE;
}
}
return FALSE;
}
BOOL cBuffer::Append( const uint8* pDT, uint32 length )
{
if( m_pDT )
{
if( (length+m_length) <= m_max )
{
CopyMemory( m_pDT + m_length, pDT, length );
m_length += length;
return TRUE;
}
}
return FALSE;
}
*/
void cBuffer::Shift( uint32 length )
{
if( m_pDT )
{
if( length <= m_length )
{
uint32 remain = m_length - length;
//uint32 remain = m_max - length;
CopyMemory( m_pDT, m_pDT+length, remain );
m_length = remain;
//m_length = m_length - length;
}
else
{
Erase();
}
}
}
bool cBuffer::Copy( const TCHAR* pDT )
{
if( m_pDT )
{
uint32 length = (_tcslen( pDT ) + 1) * sizeof(TCHAR);
if( length <= m_max )
{
Erase();
m_length = length;
CopyMemory( m_pDT, pDT, m_length );
return true;
}
}
return false;
}
bool cBuffer::Copy( uint32 unDst, const TCHAR* pDT )
{
if( m_pDT )
{
uint32 length = (_tcslen( pDT ) + 1) * sizeof(TCHAR);
if( (unDst+length) <= m_max )
{
CopyMemory( m_pDT+unDst, pDT, length );
m_length = unDst + length;
return true;
}
}
return false;
}
bool cBuffer::Copy( const uint8* pDT, uint32 length )
{
if( m_pDT )
{
if( length <= m_max )
{
Erase();
m_length = length;
CopyMemory( m_pDT, pDT, m_length );
return true;
}
}
return false;
}
bool cBuffer::Copy( uint32 unDst, const uint8* pDT, uint32 length )
{
if( m_pDT )
{
if( (unDst+length) <= m_max )
{
CopyMemory( m_pDT + unDst, pDT, length );
m_length = unDst + length;
return true;
}
}
return false;
}
bool cBuffer::Append( const char pDT )
{
if( m_pDT )
{
if( (sizeof(char)+m_length) <= m_max )
{
m_pDT[m_length] = pDT;
m_length++;
return true;
}
}
return false;
}
bool cBuffer::Append( const char* pDT )
{
if( m_pDT )
{
uint32 length = strlen( pDT ) + 1;
if( (length+m_length) <= m_max )
{
CopyMemory( m_pDT+m_length, pDT, length );
m_length += length;
return true;
}
}
return false;
}
bool cBuffer::Append( const uint8* pDT, uint32 length )
{
if( m_pDT )
{
if( (length+m_length) <= m_max )
{
CopyMemory( m_pDT + m_length, pDT, length );
m_length += length;
return true;
}
}
return false;
}
bool cBuffer::Append( const char* pDT, uint32 length )
{
if( m_pDT )
{
if( (length+m_length) <= m_max )
{
CopyMemory( m_pDT + m_length, pDT, length );
m_length += length;
return true;
}
}
return false;
}