FHANDLE

FIE ライブラリでは画像やリージョン等の "FIE オブジェクト" を [1] FHANDLE 型というハンドルで扱います。 FIE(C 言語) での FHANDLE 型の実態は VOID のポインタとなっています。

PyFIE においても同様に FIE オブジェクトを扱うための FHANDLE 型が用意されていますが、 これには単なる VOID ポインタ (VOID.PTR 型) としての他に以下のような機能が付加されています。


ガベージコレクション

PyFIE の FHANDLE 型はデストラクタを実装しており Python によるガベージコレクションの対象となります。 FHANDLE 型のデストラクタでは FIE オブジェクトのリソース解放処理を行う fnFIE_free_object() が実行されるため 明示的に fnFIE_free_object() の呼び出しを行う必要はありません。

C 言語
VOID func( VOID )
{
    FHANDLE img = fnFIE_img_root_alloc( F_IMG_UC8, 1, 512, 480 );

    fnFIE_free_object( img );
    // ここでリソースの解放を行わなければメモリリークとなる.
}
Python
def func():
    img = pyfie.fnFIE_img_root_alloc(pyfie.F_IMG_UC8, 1, 512, 480)

    # 関数スコープから抜けることにより変数 img はどこからも参照されなくなり GC の対象となる.
    # GC の際には img に対し暗黙的に fnFIE_free_object() の呼び出しが行われる.

注釈

PyFIE の FHANDLE 型に対して明示的に fnFIE_free_object() を呼び出しても問題はありません。 その場合 FHANDLE 型のデストラクタでは fnFIE_free_object() の呼び出しは行われませんので、 リソースの二重解放とはなりません。



オブジェクト機能

FHANDLE 型インスタンスでは FIE オブジェクトとして、 以下の機能を使用することができます。


また、 FHANDLE 型インスタンスが "画像オブジェクト" である場合、 以下のような機能を使用することができます。