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

📄 pqptrarray.cpp

📁 PQDIF软件包(SDK,Software Development Kit),它能转换、生成并且显示PQDIF文件.对于开发电力系统的数据输出非常有用。
💻 CPP
字号:
//  File name:          $Workfile: pqptrarray.cpp $
//  Last modified:      $Modtime: 7/29/98 9:23a $
//  Last modified by:   $Author: Rob $
//  
//  VCS archive path:   $Archive: /Hank/DMM/FirmWare/Level3/ObDatMgr/pqptrarray.cpp $
//  VCS revision:       $Revision: 3 $ 

#include "PQDIF_classes.h"

const   int sizeElement = sizeof( void * );


CPQPtrArray::CPQPtrArray()
{
    m_data = (void **) malloc( 16 * sizeElement );
    m_size = 0;
    m_max = 16;
    m_growBy = 16;
}


CPQPtrArray::~CPQPtrArray()
{
    if( m_data )
    {
        free( m_data );
    }
}


int CPQPtrArray::GetSize( void ) const
{
    return m_size;
}


void CPQPtrArray::SetSize( int NewSize, int GrowBy )
{
    m_size = NewSize;
    if( GrowBy > 0 )
        m_growBy = GrowBy;

    //  Grow?
    if( NewSize > m_max )
    {
        m_max = NewSize + m_growBy;
        m_data = (void **) realloc( (void *) m_data, m_max * sizeElement );
    }
}


void * CPQPtrArray::GetAt( int idx ) const
{
    void *  bogus = NULL;

    if( idx >=0 && idx < m_size )
    {
        return m_data[ idx ];
    }
    else
    {
        return bogus;
    }
}


void CPQPtrArray::SetAt( int idx, void * value )
{
    if( idx >= 0 && idx < m_size )
    {
        m_data[ idx ] = value;
    }
}


void CPQPtrArray::InsertAt( int indexToInsert, void * value )
{
    if( indexToInsert >= 0 && indexToInsert < m_size )
    {
        SetSize( GetSize() + 1 );

        for( int idx = m_size - 1; idx >= indexToInsert; idx-- )
        {
            m_data[ idx ] = m_data[ idx - 1 ];
        }

        m_data[ indexToInsert ] = value;
    }
}


void CPQPtrArray::RemoveAt( int indexToRemove )
{
    if( indexToRemove >= 0 && indexToRemove < m_size )
    {
        for( int idx = indexToRemove + 1; idx < m_size; idx++ )
        {
            m_data[ idx - 1 ] = m_data[ idx ];
        }

        SetSize( GetSize() - 1 );
    }
}


int CPQPtrArray::Add( void * value )
{
    int     pos = m_size;

    SetSize( m_size + 1, m_growBy );
    if( m_data )
    {
        m_data[ pos ] = value;
        return pos;
    }
    else
    {
        return -1;
    }
}


void * CPQPtrArray::operator[] ( int idx ) const
{
    return GetAt( idx );
}


#ifdef _DEBUG
bool CPQPtrArray::Test( void )
{
    bool    failed = false;
    void *  ptr1 = (void *) 1;
    void *  ptr2 = (void *) 2;
    void *  ptr3 = (void *) 3;
    void *  ptr4 = (void *) 4;
    void *  ptr5 = (void *) 5;

    SetSize( 16, 4 );
    if( m_size != 16 || m_growBy != 4 )
        failed = true;

    SetSize( 0 );
    if( m_size != 0 || m_growBy != 4 )
        failed = true;

    Add( ptr1 );
    Add( ptr2 );
    if( m_size != 2 )
        failed = true;
    if( m_data[0] != ptr1 || m_data[1] != ptr2 )
        failed = true;

    Add( ptr3 );
    InsertAt( 1, ptr4 );
    if( m_size != 4 )
        failed = true;
    if( m_data[0] != ptr1 || m_data[1] != ptr4 || m_data[2] != ptr2 || m_data[3] != ptr3 )
        failed = true;    

    SetSize( 2, 16 );
    if( m_size != 2 )
        failed = true;
    if( m_growBy != 16 )
        failed = true;
    if( m_data[0] != ptr1 || m_data[1] != ptr4 )
        failed = true;    

    SetSize( 3 );
    if( m_size != 3 )
        failed = true;
    if( m_growBy != 16 )
        failed = true;

    if( failed )
    {
        //TRACE( "CPQPtrArray::Test - *FAILED*" );
        return false;
    }

    return true;
}
#endif

⌨️ 快捷键说明

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