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

📄 ser_cont_el.cpp

📁 电能质量交换格式转换库
💻 CPP
字号:
/*
**  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;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -