#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の配列を作成します。 |
VOID FVALGAPI fnFIE_vectarray_free | ( | FHANDLE | hvarray | ) |
VOID* FVALGAPI fnFIE_vectarray_getptr | ( | FHANDLE | hvarray | ) |
先頭ポインタの取得
配列の先頭ポインタを取得します。 なお、サイズ変更や追加の際に、メモリの実体が変わる可能性があるため、 本関数で取得したポインタをキャッシュしてはいけません。
[in] | hvarray | 配列オブジェクトのハンドル |
VOID* FVALGAPI fnFIE_vectarray_getat | ( | FHANDLE | hvarray, | |
size_t | idx | |||
) |
指定位置要素のポインタ取得
idx 番目の要素のポインタを取得します。 なお、サイズ変更や追加の際に、メモリの実体が変わる可能性があるため、 本関数で取得したポインタをキャッシュしてはいけません。
[in] | hvarray | 配列オブジェクトのハンドル |
[in] | idx | 要素番号 |
size_t FVALGAPI fnFIE_vectarray_getnum | ( | FHANDLE | hvarray | ) |
配列の要素数を取得
配列の要素数(size)を取得します。 この数は実際に確保されているメモリの量とは等しくない場合がある点に注意して下さい。 メモリ量が取得したい場合は fnFIE_vectarray_getmaxnum() を使用して下さい。
[in] | hvarray | 配列オブジェクトのハンドル |
size_t FVALGAPI fnFIE_vectarray_getmaxnum | ( | FHANDLE | hvarray | ) |
保持しているメモリ量を取得
配列オブジェクトが保持しているメモリ量を返します。 要素数(size)を取得したい場合は fnFIE_vectarray_getnum() を使用して下さい。
オブジェクト内で確保されている配列のメモリ量を返します。 返される値の単位は、要素の数で、byte数では無い点に注意して下さい。
[in] | hvarray | 配列オブジェクトのハンドル |
INT FVALGAPI fnFIE_vectarray_resize | ( | FHANDLE | hvarray, | |
size_t | num | |||
) |
要素数の変更
要素の個数を変更します。 確保済みのメモリ領域が指定の num より小さい場合には、メモリ領域を拡張します。 この時、元の配列の内容は元の要素数の分だけ保存されます。 また、増えた領域は初期化されません。
既に確保済みのメモリ領域が num より大きい場合には、要素数のみ変更し、 メモリ領域は変更しません。
[in] | hvarray | 配列オブジェクトのハンドル |
[in] | num | 変更後の個数 |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足エラー |
VOID FVALGAPI fnFIE_vectarray_clear | ( | FHANDLE | hvarray | ) |
全ての要素を削除する。
配列の全ての要素を削除します。 但し、本関数では要素数を0にするのみです。 実際に確保されているメモリ領域は変更しません。
[in] | hvarray | 配列オブジェクトのハンドル |
F_ERR_NONE | 正常終了 |
INT FVALGAPI fnFIE_vectarray_push_back | ( | FHANDLE | hvarray, | |
const VOID * | data | |||
) |
配列の最後に追加
配列の最後に指定の値を追加します。 追加は、data の値コピーで行われます。
[in] | hvarray | 配列オブジェクトのハンドル |
[in] | data | 追加する値 |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足エラー |
INT FVALGAPI fnFIE_vectarray_pop_back | ( | FHANDLE | hvarray, | |
VOID * | data | |||
) |
配列の最後の要素の取り出し
配列の最後の値を 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 の値コピーで行われます。
[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 に指定した場合はエラーになります。
[in] | hvarray | 配列オブジェクトのハンドル |
[in] | idx | 削除する要素の番号 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | パラメータエラー(不正なidxが指定された) |