Files
Sun1602/Server/Shop/ClientStub/WBANetwork/util/Stream.cpp
T
2022-10-26 12:25:11 +08:00

187 lines
3.3 KiB
C++

#include "stdafx.h"
#include <WBANetwork/Common.h>
#include <WBANetwork/WBANetwork.h>
#include <WBANetwork/util/Stream.h>
using namespace WBANetwork;
Stream::Stream( int size )
: m_dataSize( 0 ),
m_bufferSize( size )
{
if( size == STREAM_DEFAULT_SIZE )
{
m_buffer = &m_defaultBuffer[0];
}
else
{
m_buffer = _new_dbg_ BYTE [size];
}
memset(m_buffer, 0, size);
m_readPos = &m_buffer[0];
m_endPos = &m_buffer[m_bufferSize - 1];
}
Stream::Stream( Stream& stream )
{
if( stream.m_bufferSize == STREAM_DEFAULT_SIZE )
m_buffer = &m_defaultBuffer[0];
else
m_buffer = _new_dbg_ BYTE [stream.m_bufferSize];
m_dataSize = stream.m_dataSize;
m_bufferSize = stream.m_bufferSize;
m_readPos = &m_buffer[0];
m_endPos = &m_buffer[m_bufferSize - 1];
Write( stream.m_buffer, m_dataSize );
}
Stream::Stream( PBYTE buffer, int len )
: m_dataSize( 0 )
{
if( len <= STREAM_DEFAULT_SIZE )
{
m_buffer = &m_defaultBuffer[0];
m_bufferSize = STREAM_DEFAULT_SIZE;
}
else
{
m_buffer = _new_dbg_ BYTE [len];
m_bufferSize = len;
}
m_readPos = &m_buffer[0];
m_endPos = &m_buffer[m_bufferSize - 1];
Write( buffer, len );
}
Stream::~Stream()
{
if( m_buffer != &m_defaultBuffer[0] )
delete [] m_buffer;
}
void Stream::Clear( int resize )
{
m_dataSize = 0;
m_readPos = &m_buffer[0];
m_endPos = &m_buffer[m_bufferSize - 1];
if( resize > 0 && m_bufferSize != (u_long)resize )
{
if( m_buffer != &m_defaultBuffer[0] )
delete [] m_buffer;
if( resize < STREAM_DEFAULT_SIZE )
m_buffer = &m_defaultBuffer[0];
else
m_buffer = _new_dbg_ BYTE [resize];
m_bufferSize = resize;
m_readPos = &m_buffer[0];
m_endPos = &m_buffer[m_bufferSize - 1];
}
memset(m_buffer, 0, m_bufferSize);
}
bool Stream::Write( void* source, int size )
{
if( m_dataSize + size > m_bufferSize )
{
return false;
}
::memcpy( ( m_buffer + m_dataSize ), source, size );
m_dataSize += size;
return true;
}
bool Stream::Read( void* dest, int size )
{
if( m_readPos + size > m_endPos )
{
return false;
}
::memcpy( dest, m_readPos, size );
m_readPos += size;
return true;
}
Stream& Stream::operator = ( Stream& stream )
{
Write( stream.m_buffer, stream.m_dataSize );
return *this;
}
Stream& Stream::operator << ( Stream& stream )
{
Write( ( void* )stream.m_buffer, stream.m_dataSize );
return *this;
}
/*
Stream& Stream::operator << ( char* arg )
{
Write( ( void* )arg, ( int )::strlen( ( char* )arg ) + 1 );
return *this;
}
Stream& Stream::operator << ( const char* arg )
{
Write( ( void* )arg, ( int )::strlen( ( char* )arg ) + 1 );
return *this;
}
Stream& Stream::operator << ( unsigned char* arg )
{
Write( ( void* )arg, ( int )::strlen( ( char* )arg ) + 1 );
return *this;
}
Stream& Stream::operator << ( const unsigned char* arg )
{
Write( ( void* )arg, ( int )::strlen( ( char* )arg ) + 1 );
return *this;
}
Stream& Stream::operator >> ( char* arg )
{
Read( ( void* )arg, ( int )::strlen( m_readPos ) + 1 );
return *this;
}
Stream& Stream::operator >> ( const char* arg )
{
Read( ( void* )arg, ( int )::strlen( m_readPos ) + 1 );
return *this;
}
Stream& Stream::operator >> ( unsigned char* arg )
{
Read( ( void* )arg, ( int )::strlen( m_readPos ) + 1 );
return *this;
}
Stream& Stream::operator >> ( const unsigned char* arg )
{
Read( ( void* )arg, ( int )::strlen( m_readPos ) + 1 );
return *this;
}
*/