147 lines
2.9 KiB
C++
147 lines
2.9 KiB
C++
/*
|
|
** CPQDIF_StreamIO class. The base class for implementing "stream I/O" which
|
|
** works along with a CPQDIF_PersistController class to supports a specific
|
|
** persistence mechanism.
|
|
** --------------------------------------------------------------------------
|
|
**
|
|
** File name: $Workfile: str_base.cpp $
|
|
** Last modified: $Modtime: 9/21/00 9:09a $
|
|
** Last modified by: $Author: Bill $
|
|
**
|
|
** VCS archive path: $Archive: /Hank/DMM/FirmWare/Level3/ObDatMgr/str_base.cpp $
|
|
** VCS revision: $Revision: 8 $
|
|
*/
|
|
#include "PQDIF_classes.h"
|
|
|
|
|
|
// Local constants
|
|
const long sizeDefaultGrowBy = 16*1024;
|
|
|
|
// Construction
|
|
// ============
|
|
|
|
CPQDIF_StreamIO::CPQDIF_StreamIO()
|
|
{
|
|
m_processor = NULL;
|
|
|
|
m_canWriteFull = false;
|
|
m_canWriteInc = false;
|
|
|
|
m_buffRead.SetSize( 0, sizeDefaultGrowBy );
|
|
m_posRead = 0;
|
|
m_buffWrite.SetSize( 0, sizeDefaultGrowBy );
|
|
m_posWrite = 0;
|
|
}
|
|
|
|
|
|
CPQDIF_StreamIO::~CPQDIF_StreamIO()
|
|
{
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::ConnectProcessor( CPQDIF_StreamProcessor * proc )
|
|
{
|
|
m_processor = proc;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
long CPQDIF_StreamIO::GetChecksum( void )
|
|
{
|
|
return m_processor->GetChecksum();
|
|
}
|
|
|
|
|
|
void CPQDIF_StreamIO::ResetChecksum( void )
|
|
{
|
|
m_processor->ResetChecksum();
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::ExecuteProcessorEncode( void )
|
|
{
|
|
bool status = false;
|
|
|
|
if( m_processor )
|
|
{
|
|
// Make sure we are connected to it
|
|
m_processor->ConnectStream( this );
|
|
|
|
status = m_processor->StreamEncode();
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::ExecuteProcessorDecode( void )
|
|
{
|
|
bool status = false;
|
|
|
|
if( m_processor )
|
|
{
|
|
// Make sure we are connected to it
|
|
m_processor->ConnectStream( this );
|
|
|
|
status = m_processor->StreamDecode();
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::ProcessRead( const BYTE * &buffer, long max, long& sizeActual )
|
|
{
|
|
buffer = m_buffRead.GetData() + m_posRead; // Adjust to current position
|
|
sizeActual = m_buffRead.GetSize() - m_posRead; // Get size minus current position
|
|
if( max > 0 && max > sizeActual )
|
|
sizeActual = max;
|
|
return sizeActual > 0;
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::ProcessWriteReserve( BYTE * & buffer, long size )
|
|
{
|
|
buffer = NULL;
|
|
bool status = m_buffWrite.SetSize( m_posWrite + size );
|
|
if( status )
|
|
{
|
|
buffer = m_buffWrite.GetData() + m_posWrite;
|
|
}
|
|
return status;
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::ProcessWriteRelease( long size )
|
|
{
|
|
bool status = m_buffWrite.SetSize( m_posWrite + size );
|
|
if( status )
|
|
m_posWrite += size;
|
|
return status;
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::BeginBlock( void )
|
|
{
|
|
bool status = true;
|
|
|
|
// Clear buffers
|
|
m_buffRead.SetSize( 0, sizeDefaultGrowBy );
|
|
m_posRead = 0;
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
bool CPQDIF_StreamIO::AppendBlock( BYTE * buffer, long size )
|
|
{
|
|
bool status = true;
|
|
|
|
// Fill the read buffer
|
|
m_buffRead.Append( buffer, size );
|
|
|
|
return status;
|
|
}
|
|
|