187 lines
3.3 KiB
C++
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;
|
|
}
|
|
*/ |