📄 el_base.cpp
字号:
/*
** CPQDIF_Element class. The base class for PQDIF elements.
** --------------------------------------------------------------------------
**
** File name: $Workfile: el_base.cpp $
** Last modified: $Modtime: 5/05/98 3:33p $
** Last modified by: $Author: Rob $
**
** VCS archive path: $Archive: /Hank/DMM/FirmWare/Level3/ObDatMgr/el_base.cpp $
** VCS revision: $Revision: 6 $
*/
#include "PQDIF_classes.h"
#include "pqdsupport.h"
CPQDIF_Element::CPQDIF_Element()
{
memset( &m_tag, 0, sizeof( m_tag ) );
m_typePhysical = 0; // Undefined
m_changed = FALSE;
}
bool CPQDIF_Element::convertFromVariant( const _variant_t & value, PQDIFValue& m_value ) const
{
bool status = true;
INT1 val_int1;
INT2 val_int2;
INT4 val_int4;
// First, verify the variant physical type matches
// (and pull out the integer values)
status = TRUE;
switch( m_typePhysical )
{
case ID_PHYS_TYPE_BOOLEAN1 :
case ID_PHYS_TYPE_BOOLEAN2 :
case ID_PHYS_TYPE_BOOLEAN4 :
if( value.vt != VT_BOOL )
status = false;
break;
case ID_PHYS_TYPE_CHAR1 :
case ID_PHYS_TYPE_INTEGER1 :
case ID_PHYS_TYPE_UNS_INTEGER1 :
switch( value.vt )
{
case VT_UI1:
val_int1 = (INT1) value.bVal;
break;
case VT_I1:
val_int1 = (INT1) value.cVal;
break;
default:
status = false;
}
break;
case ID_PHYS_TYPE_CHAR2 :
case ID_PHYS_TYPE_INTEGER2 :
case ID_PHYS_TYPE_UNS_INTEGER2 :
switch( value.vt )
{
case VT_UI2:
val_int2 = (INT2) value.uiVal;
break;
case VT_I2:
val_int2 = (INT2) value.iVal;
break;
default:
status = false;
}
break;
case ID_PHYS_TYPE_INTEGER4 :
case ID_PHYS_TYPE_UNS_INTEGER4 :
switch( value.vt )
{
case VT_UI4:
val_int4 = (INT4) value.ulVal;
break;
case VT_I4:
val_int4 = (INT4) value.lVal;
break;
default:
status = false;
}
break;
// Real/complex
case ID_PHYS_TYPE_REAL4 :
if( value.vt != VT_R4 )
status = false;
break;
case ID_PHYS_TYPE_REAL8 :
if( value.vt != VT_R4 )
status = false;
break;
case ID_PHYS_TYPE_COMPLEX8 :
case ID_PHYS_TYPE_COMPLEX16 :
//if( value.vt == VT_ARRAY ) ???
break;
case ID_PHYS_TYPE_TIMESTAMPPQDIF :
if( value.vt != VT_DATE )
status = false;
break;
case ID_PHYS_TYPE_GUID :
//if( value.vt == VT_ARRAY ) ???
break;
default:
status = false;
break;
}
if( status )
{
switch( m_typePhysical )
{
case ID_PHYS_TYPE_BOOLEAN1 :
m_value.bool1 = (BOOL1) value.boolVal;
case ID_PHYS_TYPE_BOOLEAN2 :
m_value.bool2 = (BOOL2) value.boolVal;
case ID_PHYS_TYPE_BOOLEAN4 :
m_value.bool4 = (BOOL4) value.boolVal;
break;
case ID_PHYS_TYPE_CHAR1 :
m_value.char1 = (CHAR1) val_int1;
break;
case ID_PHYS_TYPE_INTEGER1 :
m_value.int1 = (INT1) val_int1;
break;
case ID_PHYS_TYPE_UNS_INTEGER1 :
m_value.uint1 = (UINT1) val_int1;
break;
case ID_PHYS_TYPE_CHAR2 :
m_value.char2 = (CHAR2) val_int2;
break;
case ID_PHYS_TYPE_INTEGER2 :
m_value.int2 = (INT2) val_int2;
break;
case ID_PHYS_TYPE_UNS_INTEGER2 :
m_value.uint2 = (UINT2) val_int2;
break;
case ID_PHYS_TYPE_INTEGER4 :
m_value.int4 = (INT4) val_int4;
break;
case ID_PHYS_TYPE_UNS_INTEGER4 :
m_value.uint4 = (UINT4) val_int4;
break;
// Real/complex
case ID_PHYS_TYPE_REAL4 :
m_value.real4 = (REAL4) value.fltVal;
break;
case ID_PHYS_TYPE_REAL8 :
m_value.real8 = (REAL8) value.dblVal;
break;
case ID_PHYS_TYPE_COMPLEX8 :
case ID_PHYS_TYPE_COMPLEX16 :
// need to fix
// SAFEARRAY?
break;
// Date/time
case ID_PHYS_TYPE_TIMESTAMPPQDIF :
// From the documentation, it appears that the
// whole number portion of the DATE is compatible
// with our .day member. (Although it is possible that
// they will be off by 1 day...)
m_value.ts.day = (UINT4) ( value.date );
// Convert the fractional day to fractional seconds.
m_value.ts.sec = (REAL8) ( value.date - (DATE) m_value.ts.day );
m_value.ts.sec *= (REAL8) SECONDS_PER_DAY;
break;
// GUID
case ID_PHYS_TYPE_GUID :
// need to fix
// SAFEARRAY?
break;
default:
status = false;
break;
}
}
return status;
}
bool CPQDIF_Element::convertToVariant( const PQDIFValue& m_value, _variant_t & value ) const
{
bool status = true;
string strRep;
// VariantInit( &value ); // auto initialized when using _variant_t type
if( status )
{
switch( m_typePhysical )
{
case ID_PHYS_TYPE_BOOLEAN1 :
value.vt = VT_BOOL;
value.boolVal = m_value.bool1;
break;
case ID_PHYS_TYPE_CHAR1 :
value.vt = VT_I1;
value.cVal = m_value.char1;
break;
case ID_PHYS_TYPE_INTEGER1 :
value.vt = VT_I1;
value.cVal = m_value.int1;
break;
case ID_PHYS_TYPE_UNS_INTEGER1 :
// VT_UI1 / value.bVal
value.vt = VT_I1;
value.cVal = m_value.uint1;
break;
case ID_PHYS_TYPE_BOOLEAN2 :
value.vt = VT_BOOL;
value.boolVal = m_value.bool2;
break;
case ID_PHYS_TYPE_CHAR2 :
// Single-char Unicode string instead?
value.vt = VT_I2;
value.iVal = m_value.char2;
break;
case ID_PHYS_TYPE_INTEGER2 :
value.vt = VT_I2;
value.iVal = m_value.int2;
break;
case ID_PHYS_TYPE_UNS_INTEGER2 :
//VT_UI2 / uiVal
value.vt = VT_I2;
value.iVal = m_value.uint2 ;
break;
case ID_PHYS_TYPE_BOOLEAN4 :
value.vt = VT_BOOL;
value.boolVal = (VARIANT_BOOL) m_value.bool4;
break;
case ID_PHYS_TYPE_INTEGER4 :
value.vt = VT_I4;
value.lVal = m_value.int4;
break;
case ID_PHYS_TYPE_UNS_INTEGER4 :
// VT_UI4 / ulVal
value.vt = VT_I4;
value.lVal = m_value.uint4;
break;
// Real/complex
case ID_PHYS_TYPE_REAL4 :
value.vt = VT_R4;
value.fltVal = m_value.real4;
break;
case ID_PHYS_TYPE_REAL8 :
value.vt = VT_R8;
value.dblVal = m_value.real8;
break;
case ID_PHYS_TYPE_COMPLEX8 :
case ID_PHYS_TYPE_COMPLEX16 :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -