⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 el_base.cpp

📁 PQDIF软件包(SDK,Software Development Kit),它能转换、生成并且显示PQDIF文件.对于开发电力系统的数据输出非常有用。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
**  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 + -