新增了PQDIF补招线程,导入了新的lib库
This commit is contained in:
431
LFtid1056/pqdif/include/el_vect.cpp
Normal file
431
LFtid1056/pqdif/include/el_vect.cpp
Normal file
@@ -0,0 +1,431 @@
|
||||
/*
|
||||
** CPQDIF_E_Vector class. Implements the PQDIF vector element.
|
||||
** --------------------------------------------------------------------------
|
||||
**
|
||||
** File name: $Workfile: el_vect.cpp $
|
||||
** Last modified: $Modtime: 11/13/00 3:56p $
|
||||
** Last modified by: $Author: Bill $
|
||||
**
|
||||
** VCS archive path: $Archive: /Hank/DMM/FirmWare/Level3/ObDatMgr/el_vect.cpp $
|
||||
** VCS revision: $Revision: 14 $
|
||||
*/
|
||||
#include "PQDIF_classes.h"
|
||||
|
||||
|
||||
const int defaultGrowBy = 4;
|
||||
|
||||
// Construction
|
||||
// ============
|
||||
|
||||
CPQDIF_E_Vector::CPQDIF_E_Vector()
|
||||
{
|
||||
m_array.SetSize( 0, defaultGrowBy );
|
||||
}
|
||||
|
||||
|
||||
CPQDIF_E_Vector::~CPQDIF_E_Vector()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void CPQDIF_E_Vector::SetPhysicalType( long type )
|
||||
{
|
||||
long count = m_array.GetSize() / getNumBytesOfType();
|
||||
|
||||
if( m_typePhysical != type )
|
||||
{
|
||||
// Yup, it's changed!
|
||||
m_typePhysical = type;
|
||||
|
||||
// ... and realloc space for the new type.
|
||||
SetCount( count );
|
||||
|
||||
// Signal that the record changed.
|
||||
if( m_pRecord )
|
||||
m_pRecord->SetChanged( true );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef PQDIF_USE_COM
|
||||
bool CPQDIF_E_Vector::SetValue( long index, VARIANT & value )
|
||||
{
|
||||
bool status = false;
|
||||
PQDIFValue valPQ;
|
||||
|
||||
// Copy over the information
|
||||
status = convertFromVariant( value, valPQ );
|
||||
if( status )
|
||||
{
|
||||
SetValue( index, valPQ );
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
bool CPQDIF_E_Vector::GetValue( long index, VARIANT & value ) const
|
||||
{
|
||||
bool status = false;
|
||||
PQDIFValue valPQ;
|
||||
long nItem;
|
||||
GetCount(nItem);
|
||||
|
||||
if( index >= 0 && index < nItem )
|
||||
{
|
||||
status = GetValue( index, valPQ );
|
||||
if( status )
|
||||
{
|
||||
status = convertToVariant( valPQ, value );
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool CPQDIF_E_Vector::SetValue( long index, const PQDIFValue& value )
|
||||
{
|
||||
bool status = false;
|
||||
BYTE * pvalSource = (BYTE *) getPointerToValue( value );
|
||||
BYTE * pvalTarget = (BYTE *) getPointer( index );
|
||||
|
||||
if( pvalSource && pvalTarget )
|
||||
{
|
||||
memcpy( pvalTarget, pvalSource, getNumBytesOfType() );
|
||||
status = true;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::GetValue( long index, PQDIFValue& value ) const
|
||||
{
|
||||
bool status = false;
|
||||
BYTE * pvalTarget = (BYTE *) getPointerToValue( value );
|
||||
BYTE * pvalSource = (BYTE *) getPointer( index );
|
||||
|
||||
if( pvalSource && pvalTarget )
|
||||
{
|
||||
memcpy( pvalTarget, pvalSource, getNumBytesOfType() );
|
||||
status = true;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::SetValue( long index, double value )
|
||||
{
|
||||
bool status;
|
||||
PQDIFValue valuePQ;
|
||||
|
||||
status = convertFromDouble( value, valuePQ );
|
||||
if( status )
|
||||
{
|
||||
status = SetValue( index, valuePQ );
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::GetValue( long index, double& value ) const
|
||||
{
|
||||
bool status;
|
||||
PQDIFValue valuePQ;
|
||||
|
||||
status = GetValue( index, valuePQ );
|
||||
if( status )
|
||||
{
|
||||
status = convertToDouble( valuePQ, value );
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::SetValues( const char * text )
|
||||
{
|
||||
bool status = false;
|
||||
long idxItem;
|
||||
long countItems;
|
||||
BYTE * data = NULL;
|
||||
|
||||
// Init
|
||||
countItems = strlen( text ) + 1;
|
||||
|
||||
switch( GetPhysicalType() )
|
||||
{
|
||||
case ID_PHYS_TYPE_CHAR1:
|
||||
SetCount( countItems );
|
||||
data = GetRawData();
|
||||
if( data )
|
||||
{
|
||||
// Copy the string across directly
|
||||
memcpy( data, text, countItems - 1 );
|
||||
|
||||
// Make sure it's null-terminated
|
||||
data[ countItems - 1 ] = (BYTE) 0;
|
||||
status = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_PHYS_TYPE_CHAR2:
|
||||
SetCount( countItems );
|
||||
data = GetRawData();
|
||||
if( data )
|
||||
{
|
||||
CHAR2 * temp = (CHAR2 *) data;
|
||||
|
||||
// Copy the data across by physical item size
|
||||
// Don't copy the last character -- should be a NULL
|
||||
for( idxItem = 0; idxItem < ( countItems - 1); idxItem++ )
|
||||
{
|
||||
// Copy each value
|
||||
*temp = (CHAR2) text[ (int) idxItem ];
|
||||
temp++;
|
||||
}
|
||||
|
||||
// NULL-terminate it
|
||||
*temp = (CHAR2) 0;
|
||||
status = true;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
status = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::GetValues( string& strOutput ) const
|
||||
{
|
||||
bool status = false;
|
||||
long idxItem;
|
||||
long countItems;
|
||||
const BYTE * data = NULL;
|
||||
|
||||
// Init
|
||||
GetCount( countItems );
|
||||
data = GetRawData();
|
||||
|
||||
switch( GetPhysicalType() )
|
||||
{
|
||||
case ID_PHYS_TYPE_CHAR1:
|
||||
if( data )
|
||||
{
|
||||
// Copy the data across by physical item size
|
||||
// Don't copy the last character -- should be a NULL
|
||||
strOutput = (const char *) data;
|
||||
status = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_PHYS_TYPE_CHAR2:
|
||||
if( data )
|
||||
{
|
||||
CHAR2 * temp = (CHAR2 *) data;
|
||||
|
||||
// Copy the data across by physical item size
|
||||
// Don't copy the last character -- should be a NULL
|
||||
for( idxItem = 0; idxItem < ( countItems - 1); idxItem++ )
|
||||
{
|
||||
// Copy across a single value
|
||||
strOutput += (TCHAR) ( *temp );
|
||||
|
||||
// Next!
|
||||
temp++;
|
||||
}
|
||||
|
||||
status = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
status = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
BYTE * CPQDIF_E_Vector::GetRawData( void )
|
||||
{
|
||||
return m_array.GetData();
|
||||
}
|
||||
|
||||
|
||||
const BYTE * CPQDIF_E_Vector::GetRawData( void ) const
|
||||
{
|
||||
return m_array.GetData();
|
||||
}
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::GetCount( long& count ) const
|
||||
{
|
||||
bool status = false;
|
||||
|
||||
count = m_array.GetSize() / getNumBytesOfType();
|
||||
status = true;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
bool CPQDIF_E_Vector::SetCount( long count )
|
||||
{
|
||||
bool status = false;
|
||||
|
||||
// Resize the array.
|
||||
int size = count * getNumBytesOfType();
|
||||
m_array.SetSize( size, defaultGrowBy );
|
||||
status = m_array.GetSize() == size;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
long CPQDIF_E_Vector::GetSizeBytes( void )
|
||||
{
|
||||
return m_array.GetSize();
|
||||
}
|
||||
|
||||
|
||||
BYTE * CPQDIF_E_Vector::getPointer( int idx )
|
||||
{
|
||||
BYTE * ptr = NULL;
|
||||
long count = m_array.GetSize() / getNumBytesOfType();
|
||||
|
||||
ptr = m_array.GetData();
|
||||
if( ptr && idx >= 0 && idx < count )
|
||||
{
|
||||
ptr += ( idx * getNumBytesOfType() );
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
const BYTE * CPQDIF_E_Vector::getPointer( int idx ) const
|
||||
{
|
||||
const BYTE * ptr = NULL;
|
||||
long count = m_array.GetSize() / getNumBytesOfType();
|
||||
|
||||
ptr = m_array.GetData();
|
||||
if( ptr && idx >= 0 && idx < count )
|
||||
{
|
||||
ptr += ( idx * getNumBytesOfType() );
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
// Type-specific member functions
|
||||
// ------------------------------
|
||||
|
||||
#define ELVECT_SETVALUE( nametype, type, idtype ) \
|
||||
void CPQDIF_E_Vector::SetValue##nametype( long index, type value ) \
|
||||
{ \
|
||||
bool status = false; \
|
||||
type * pval = NULL; \
|
||||
SetPhysicalType( idtype ); \
|
||||
pval = (type *) getPointer( index ); \
|
||||
if( pval ) \
|
||||
{ \
|
||||
*pval = value; \
|
||||
status = true; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#define ELVECT_GETVALUE( nametype, type, idtype ) \
|
||||
bool CPQDIF_E_Vector::GetValue##nametype( long index, type& value ) const \
|
||||
{ bool status = false; \
|
||||
type * pval = NULL; \
|
||||
if( GetPhysicalType() == idtype ) \
|
||||
{ \
|
||||
pval = (type *) getPointer( index ); \
|
||||
if( pval ) \
|
||||
{ \
|
||||
value = *pval; \
|
||||
status = true; \
|
||||
} \
|
||||
} \
|
||||
return status; }
|
||||
|
||||
|
||||
#define ELVECT_SETVALUES_ARRAY( nametype, type, idtype ) \
|
||||
void CPQDIF_E_Vector::SetValues##nametype( const type * values, long count ) \
|
||||
{ bool status = false; \
|
||||
type * pval = NULL; \
|
||||
SetPhysicalType( idtype ); \
|
||||
SetCount( count ); \
|
||||
pval = (type *) getPointer( 0 ); \
|
||||
if( pval ) \
|
||||
{ \
|
||||
memcpy( pval, values, count * sizeof( type ) ); \
|
||||
status = true; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#define ELVECT_GETVALUES_ARRAY( nametype, type, idtype ) \
|
||||
long CPQDIF_E_Vector::GetValues##nametype( type * values, long max ) const \
|
||||
{ long countActual = 0; \
|
||||
type * pval = NULL; \
|
||||
long sizeType = getNumBytesOfType(); \
|
||||
long count = m_array.GetSize() / sizeType; \
|
||||
if( GetPhysicalType() == idtype ) \
|
||||
{ \
|
||||
pval = (type *) getPointer( 0 ); \
|
||||
if( pval ) \
|
||||
{ \
|
||||
countActual = min( max, count ); \
|
||||
memcpy( values, pval, countActual * sizeType ); \
|
||||
} \
|
||||
} \
|
||||
return countActual; }
|
||||
|
||||
|
||||
ELVECT_SETVALUE ( INT1, INT1, ID_PHYS_TYPE_INTEGER1 )
|
||||
ELVECT_SETVALUES_ARRAY( INT1, INT1, ID_PHYS_TYPE_INTEGER1 )
|
||||
ELVECT_GETVALUE ( INT1, INT1, ID_PHYS_TYPE_INTEGER1 )
|
||||
ELVECT_GETVALUES_ARRAY( INT1, INT1, ID_PHYS_TYPE_INTEGER1 )
|
||||
|
||||
ELVECT_SETVALUE ( INT2, INT2, ID_PHYS_TYPE_INTEGER2 )
|
||||
ELVECT_SETVALUES_ARRAY( INT2, INT2, ID_PHYS_TYPE_INTEGER2 )
|
||||
ELVECT_GETVALUE ( INT2, INT2, ID_PHYS_TYPE_INTEGER2 )
|
||||
ELVECT_GETVALUES_ARRAY( INT2, INT2, ID_PHYS_TYPE_INTEGER2 )
|
||||
|
||||
ELVECT_SETVALUE ( INT4, INT4, ID_PHYS_TYPE_INTEGER4 )
|
||||
ELVECT_SETVALUES_ARRAY( INT4, INT4, ID_PHYS_TYPE_INTEGER4 )
|
||||
ELVECT_GETVALUE ( INT4, INT4, ID_PHYS_TYPE_INTEGER4 )
|
||||
ELVECT_GETVALUES_ARRAY( INT4, INT4, ID_PHYS_TYPE_INTEGER4 )
|
||||
|
||||
ELVECT_SETVALUE ( UINT4, UINT4, ID_PHYS_TYPE_UNS_INTEGER4 )
|
||||
ELVECT_SETVALUES_ARRAY( UINT4, UINT4, ID_PHYS_TYPE_UNS_INTEGER4 )
|
||||
ELVECT_GETVALUE ( UINT4, UINT4, ID_PHYS_TYPE_UNS_INTEGER4 )
|
||||
ELVECT_GETVALUES_ARRAY( UINT4, UINT4, ID_PHYS_TYPE_UNS_INTEGER4 )
|
||||
|
||||
ELVECT_SETVALUE ( REAL4, REAL4, ID_PHYS_TYPE_REAL4 )
|
||||
ELVECT_SETVALUES_ARRAY( REAL4, REAL4, ID_PHYS_TYPE_REAL4 )
|
||||
ELVECT_GETVALUE ( REAL4, REAL4, ID_PHYS_TYPE_REAL4 )
|
||||
ELVECT_GETVALUES_ARRAY( REAL4, REAL4, ID_PHYS_TYPE_REAL4 )
|
||||
|
||||
ELVECT_SETVALUE ( REAL8, REAL8, ID_PHYS_TYPE_REAL8 )
|
||||
ELVECT_SETVALUES_ARRAY( REAL8, REAL8, ID_PHYS_TYPE_REAL8 )
|
||||
ELVECT_GETVALUE ( REAL8, REAL8, ID_PHYS_TYPE_REAL8 )
|
||||
ELVECT_GETVALUES_ARRAY( REAL8, REAL8, ID_PHYS_TYPE_REAL8 )
|
||||
|
||||
ELVECT_SETVALUE ( TimeStamp, TIMESTAMPPQDIF, ID_PHYS_TYPE_TIMESTAMPPQDIF )
|
||||
ELVECT_SETVALUES_ARRAY( TimeStamp, TIMESTAMPPQDIF, ID_PHYS_TYPE_TIMESTAMPPQDIF )
|
||||
ELVECT_GETVALUE ( TimeStamp, TIMESTAMPPQDIF, ID_PHYS_TYPE_TIMESTAMPPQDIF )
|
||||
ELVECT_GETVALUES_ARRAY( TimeStamp, TIMESTAMPPQDIF, ID_PHYS_TYPE_TIMESTAMPPQDIF )
|
||||
|
||||
Reference in New Issue
Block a user