可変長配列
[低レベル処理関数]


説明

C++ の vector template class を模した、動的可変長配列です。 但し、配列の動的確保に関する部分のみの実装で、iteratorに相当する仕組みは有りません。

Example:

#include <stdio.h>
#include "fie.h"

INT main()
{
    FHANDLE hvarray;
    DPNT_T *p;
    DPNT_T data;
    INT num, i;

    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    hvarray = fnFIE_vectarray_alloc( 0, sizeof(DPNT_T), 100 );
    if( hvarray )
    {
        /* 配列の先頭アドレスを取得 */
        p = (DPNT_T*)fnFIE_vectarray_getptr( hvarray );

        /* 配列に適当な値を書き込む */
        for( i=0; i<100; i++ ){
            p[i].x = i;
            p[i].y = i;
        }

        /* サイズを増やす */
        fnFIE_vectarray_resize( hvarray, 200 );

        /* resize等を行ったときはアドレスが変わるので、ポインタをキャッシュしてはいけない */
        p = (DPNT_T*)fnFIE_vectarray_getptr( hvarray );
        /* 増やした領域は初期化されないので、必要に応じて初期化する */
        for( i=100; i<200; i++ ){
            p[i].x = 0;
            p[i].y = 0;
        }

        
        /* 最後にデータを追加する */
        data.x = 10;
        data.y = 20;
        fnFIE_vectarray_push_back( hvarray, &data );

        /* 先頭にデータを追加する */
        fnFIE_vectarray_insert( hvarray, 0, &data );
        
        /* 要素数を取得 */
        num = fnFIE_vectarray_getnum( hvarray ); /* num == 202 */


        /* 最後のデータを取得する */
        fnFIE_vectarray_pop_back( hvarray, &data );
        /* data.x == 10, data.y == 20 */

        /* 要素数を取得 */
        num = fnFIE_vectarray_getnum( hvarray ); /* num == 201 */


        /* 先頭のデータを削除 */
        fnFIE_vectarray_erace( hvarray, 0 );

        /* 要素数を取得 */
        num = fnFIE_vectarray_getnum( hvarray ); /* num == 200 */


        /* 要素を全て消す */
        fnFIE_vectarray_clear( hvarray );

        /* 要素数を取得 */
        num = fnFIE_vectarray_getnum( hvarray ); /* num == 0 */
        
        fnFIE_vectarray_free( hvarray );
    }
    // 終了処理
    fnFIE_teardown();
}


関数

FHANDLE FVALGAPI fnFIE_vectarray_alloc (enum f_objtag tag, size_t elemsz, size_t num)
 配列オブジェクトの確保
VOID FVALGAPI fnFIE_vectarray_free (FHANDLE hvarray)
 配列オブジェクトの解放
VOID *FVALGAPI fnFIE_vectarray_getptr (FHANDLE hvarray)
 先頭ポインタの取得
VOID *FVALGAPI fnFIE_vectarray_getat (FHANDLE hvarray, size_t idx)
 指定位置要素のポインタ取得
size_t FVALGAPI fnFIE_vectarray_getnum (FHANDLE hvarray)
 配列の要素数を取得
size_t FVALGAPI fnFIE_vectarray_getmaxnum (FHANDLE hvarray)
 保持しているメモリ量を取得
INT FVALGAPI fnFIE_vectarray_resize (FHANDLE hvarray, size_t num)
 要素数の変更
VOID FVALGAPI fnFIE_vectarray_clear (FHANDLE hvarray)
 全ての要素を削除する。
INT FVALGAPI fnFIE_vectarray_push_back (FHANDLE hvarray, const VOID *data)
 配列の最後に追加
INT FVALGAPI fnFIE_vectarray_pop_back (FHANDLE hvarray, VOID *data)
 配列の最後の要素の取り出し
INT FVALGAPI fnFIE_vectarray_insert (FHANDLE hvarray, size_t idx, const VOID *data)
 要素の追加
INT FVALGAPI fnFIE_vectarray_erace (FHANDLE hvarray, size_t idx)
 要素の削除

関数

FHANDLE FVALGAPI fnFIE_vectarray_alloc ( enum f_objtag  tag,
size_t  elemsz,
size_t  num 
)

配列オブジェクトの確保

vectarray配列オブジェクトを確保します。 本関数は、使用する型に合わせて、ラップして使うことを想定した関数です。 ラップしなくても使用することが出来ますが、その際返されるハンドルは fnFIE_free_object() ではなく fnFIE_vectarray_free() を使って解放しなければいけないこと、 他のFHANDLEを引数に取る関数へは渡せないことに注意して下さい。

パラメータ tag には任意の値を指定することが出来ます。 FHANDLEのオブジェクト識別の仕組みで使う場合に指定して下さい。 特に必要ない場合は0を指定しておく事をおすすめします。

確保された領域は、特に初期化されないので、必要に応じて初期化を行って下さい。 本関数で作成したオブジェクトが不要になった場合は fnFIE_vectarray_free() 関数にて解放して下さい。

引数:
[in] tag オブジェクト型認識のための種別IDを指定します。
[in] elemsz 1要素当たりのバイト数を指定します。(1以上)
[in] num 要素の数を指定します。0以下の値が指定された場合は、要素数0の配列を作成します。
戻り値:
正常終了した場合は、配列オブジェクトのハンドルを返します。 メモリ不足などにより異常終了した場合は、NULL を返します。

VOID FVALGAPI fnFIE_vectarray_free ( FHANDLE  hvarray  ) 

配列オブジェクトの解放

fnFIE_vectarray_alloc() 関数で確保された 配列オブジェクトを解放します。

引数:
[in] hvarray 解放する配列オブジェクト

VOID* FVALGAPI fnFIE_vectarray_getptr ( FHANDLE  hvarray  ) 

先頭ポインタの取得

配列の先頭ポインタを取得します。 なお、サイズ変更や追加の際に、メモリの実体が変わる可能性があるため、 本関数で取得したポインタをキャッシュしてはいけません。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 使用する際は十分注意してください。
引数:
[in] hvarray 配列オブジェクトのハンドル

VOID* FVALGAPI fnFIE_vectarray_getat ( FHANDLE  hvarray,
size_t  idx 
)

指定位置要素のポインタ取得

idx 番目の要素のポインタを取得します。 なお、サイズ変更や追加の際に、メモリの実体が変わる可能性があるため、 本関数で取得したポインタをキャッシュしてはいけません。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 また idx に渡された値が配列の範囲を超えている場合も不正な動作となります。 使用する際は十分注意してください。
引数:
[in] hvarray 配列オブジェクトのハンドル
[in] idx 要素番号

size_t FVALGAPI fnFIE_vectarray_getnum ( FHANDLE  hvarray  ) 

配列の要素数を取得

配列の要素数(size)を取得します。 この数は実際に確保されているメモリの量とは等しくない場合がある点に注意して下さい。 メモリ量が取得したい場合は fnFIE_vectarray_getmaxnum() を使用して下さい。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
戻り値:
要素数

size_t FVALGAPI fnFIE_vectarray_getmaxnum ( FHANDLE  hvarray  ) 

保持しているメモリ量を取得

配列オブジェクトが保持しているメモリ量を返します。 要素数(size)を取得したい場合は fnFIE_vectarray_getnum() を使用して下さい。

オブジェクト内で確保されている配列のメモリ量を返します。 返される値の単位は、要素の数で、byte数では無い点に注意して下さい。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
戻り値:
確保されているメモリ量(要素の数)

INT FVALGAPI fnFIE_vectarray_resize ( FHANDLE  hvarray,
size_t  num 
)

要素数の変更

要素の個数を変更します。 確保済みのメモリ領域が指定の num より小さい場合には、メモリ領域を拡張します。 この時、元の配列の内容は元の要素数の分だけ保存されます。 また、増えた領域は初期化されません。

既に確保済みのメモリ領域が num より大きい場合には、要素数のみ変更し、 メモリ領域は変更しません。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
[in] num 変更後の個数
戻り値:
F_ERR_NONE 正常終了
F_ERR_NOMEMORY メモリ不足エラー

VOID FVALGAPI fnFIE_vectarray_clear ( FHANDLE  hvarray  ) 

全ての要素を削除する。

配列の全ての要素を削除します。 但し、本関数では要素数を0にするのみです。 実際に確保されているメモリ領域は変更しません。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
戻り値:
F_ERR_NONE 正常終了

INT FVALGAPI fnFIE_vectarray_push_back ( FHANDLE  hvarray,
const VOID *  data 
)

配列の最後に追加

配列の最後に指定の値を追加します。 追加は、data の値コピーで行われます。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 また data へ渡されたポインタが不正な場合も、不正な動作をします。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
[in] data 追加する値
戻り値:
F_ERR_NONE 正常終了
F_ERR_NOMEMORY メモリ不足エラー

INT FVALGAPI fnFIE_vectarray_pop_back ( FHANDLE  hvarray,
VOID *  data 
)

配列の最後の要素の取り出し

配列の最後の値を data に代入し、配列から削除します。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 また data へ渡されたポインタが不正な場合も、不正な動作をします。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
[in] data 追加する値
戻り値:
F_ERR_NONE 正常終了
F_ERR_UNKNOWN 配列の要素が0個のためエラー

INT FVALGAPI fnFIE_vectarray_insert ( FHANDLE  hvarray,
size_t  idx,
const VOID *  data 
)

要素の追加

配列の idx 番目の位置に要素を追加します。 idx に指定できる値の範囲は、配列の要素数を num とすると、0〜num です。 この範囲外の値を idx に指定した場合はエラーになります。 追加は data の値コピーで行われます。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 また data へ渡されたポインタが不正な場合や idx が配列の範囲を超えている場合も、不正な動作をします。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
[in] idx 追加位置の番号
[in] data 追加する値
戻り値:
F_ERR_NONE 正常終了
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_INVALID_PARAM パラメータエラー(不正なidxが指定された)

INT FVALGAPI fnFIE_vectarray_erace ( FHANDLE  hvarray,
size_t  idx 
)

要素の削除

配列の idx 番目の要素を削除して、詰めます。 idx に指定できる値の範囲は、配列の要素数を num とすると、0〜(num-1) です。 この範囲外の値を idx に指定した場合はエラーになります。

警告:
本関数では、速度重視のために渡される引数のチェックを省いています。 そのため hvarrayfnFIE_vectarray_alloc() で作成した以外の 不正なハンドルが渡された場合には、不正な動作となります。 また idx が配列の範囲を超えている場合も、不正な動作をします。 使用する際は十分注意して下さい。
引数:
[in] hvarray 配列オブジェクトのハンドル
[in] idx 削除する要素の番号
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータエラー(不正なidxが指定された)


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2