新增了PQDIF补招线程,导入了新的lib库
This commit is contained in:
178
LFtid1056/pqdif/include/ser_cont_el.cpp
Normal file
178
LFtid1056/pqdif/include/ser_cont_el.cpp
Normal file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
** PQController class. This class is used to control the reconstitution
|
||||
** of PQDIF element objects from a buffer where they have been archived.
|
||||
** --------------------------------------------------------------------------
|
||||
**
|
||||
** File name: $Workfile: ser_cont_el.cpp $
|
||||
** Last modified: $Modtime: 10/07/02 7:41a $
|
||||
** Last modified by: $Author: Jack $
|
||||
**
|
||||
** VCS archive path: $Archive: /PQDIF/PQDcom/PQDcom4/pqdiflib/ser_cont_el.cpp $
|
||||
** VCS revision: $Revision: 11 $
|
||||
*/
|
||||
#include "PQDIF_classes.h"
|
||||
|
||||
|
||||
|
||||
// Construction
|
||||
// ============
|
||||
|
||||
PQController::PQController( void )
|
||||
{
|
||||
}
|
||||
|
||||
PQController::~PQController( void )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void PQController::ParseRecord
|
||||
(
|
||||
BYTE * buffer,
|
||||
SIZE4 size,
|
||||
CPQDIF_E_Collection * pcollMain
|
||||
)
|
||||
{
|
||||
|
||||
PQDIFIterator piter( this, buffer, size, 0, pcollMain );
|
||||
piter.ParseCollection();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
CPQDIF_E_Collection * PQController::acceptCollection
|
||||
(
|
||||
CPQDIF_E_Collection * pcoll,
|
||||
int /*index*/,
|
||||
const GUID& tag
|
||||
)
|
||||
{
|
||||
CPQDIF_E_Collection * pcollNew;
|
||||
|
||||
// Create the new collection object
|
||||
pcollNew = (CPQDIF_E_Collection *) theFactory.NewElement( ID_ELEMENT_TYPE_COLLECTION );
|
||||
if( pcollNew )
|
||||
{
|
||||
|
||||
// Add it to the previous collection
|
||||
pcollNew->SetTag( tag );
|
||||
pcoll->Add( pcollNew );
|
||||
|
||||
}
|
||||
|
||||
return pcollNew;
|
||||
}
|
||||
|
||||
|
||||
CPQDIF_E_Scalar * PQController::acceptScalar
|
||||
(
|
||||
CPQDIF_E_Collection * pcoll,
|
||||
int /*index*/,
|
||||
const GUID& tag,
|
||||
long typePhysical,
|
||||
void * pdata
|
||||
)
|
||||
{
|
||||
CPQDIF_E_Scalar * pel;
|
||||
|
||||
//ASSERT( pdata );
|
||||
|
||||
// Create new element
|
||||
pel = (CPQDIF_E_Scalar *) theFactory.NewElement( ID_ELEMENT_TYPE_SCALAR );
|
||||
//ASSERT( pel );
|
||||
if( pel )
|
||||
{
|
||||
// Initialize it. If successful then ...
|
||||
pel->SetTag( tag );
|
||||
if( pel->SetValue( typePhysical, *(PQDIFValue *)pdata ) )
|
||||
{
|
||||
|
||||
// Add it to the current collection
|
||||
//ASSERT( pcoll );
|
||||
pcoll->Add( pel );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
delete pel;
|
||||
pel = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return pel;
|
||||
}
|
||||
|
||||
|
||||
CPQDIF_E_Vector * PQController::acceptVector
|
||||
(
|
||||
CPQDIF_E_Collection * pcoll,
|
||||
int index,
|
||||
const GUID& tag,
|
||||
long typePhysical,
|
||||
c_vector * pvector,
|
||||
void * pdata
|
||||
)
|
||||
{
|
||||
SIZE4 sizeValue;
|
||||
CPQDIF_E_Vector * pel = NULL;
|
||||
|
||||
// Validate parameters
|
||||
//ASSERT( pvector );
|
||||
//ASSERT( pdata );
|
||||
|
||||
// Init
|
||||
sizeValue = theInfo.GetNumBytesOfType( typePhysical );
|
||||
SIZE4 TotalSize = sizeValue * pvector->count;
|
||||
if ((TotalSize > 0) && (TotalSize < 1000000))
|
||||
{
|
||||
|
||||
// Create new element
|
||||
pel = (CPQDIF_E_Vector *) theFactory.NewElement( ID_ELEMENT_TYPE_VECTOR );
|
||||
//ASSERT( pel );
|
||||
if( pel )
|
||||
{
|
||||
|
||||
// Initialize it
|
||||
pel->SetTag( tag );
|
||||
pel->SetPhysicalType( typePhysical );
|
||||
if( pel->SetCount( pvector->count ) )
|
||||
{
|
||||
memcpy( pel->GetRawData(), pdata, pvector->count * sizeValue );
|
||||
|
||||
// Add the element to the current collection
|
||||
//ASSERT( pcoll );
|
||||
pcoll->Add( pel );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
delete pel;
|
||||
pel = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return pel;
|
||||
}
|
||||
|
||||
|
||||
bool PQController::decodeValue
|
||||
(
|
||||
long typePhysical,
|
||||
void * pdata,
|
||||
PQDIFValue& value
|
||||
)
|
||||
{
|
||||
bool status = false;
|
||||
int iSize = theInfo.GetNumBytesOfType( typePhysical );
|
||||
if( iSize > 0 )
|
||||
{
|
||||
memcpy( (void *)&value, pdata, iSize );
|
||||
status = true;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user