データ構造 | |
struct | M17NObjectHead |
管理下オブジェクトの最初のメンバ. [詳細] | |
関数 | |
void * | m17n_object (int size, void(*freer)(void *)) |
管理下オブジェクトを割り当てる. | |
int | m17n_object_ref (void *object) |
管理下オブジェクトの参照数を 1 増やす. | |
int | m17n_object_unref (void *object) |
管理下オブジェクトの参照数を 1 減らす. |
キーが管理キーであるプロパティは、値として管理下オブジェクトだけを取る。 関数 msymbol_put() や mplist_put() などはそれらのプロパティを特別扱いする。
定義済み管理下オブジェクトタイプの他に、ユーザは必要な管理下オブジェクトタイプを自分で定義することができる。詳細は m17n_object() の説明を参照。
void* m17n_object | ( | int | size, | |
void(*)(void *) | freer | |||
) |
関数 m17n_object() はsize バイトの新しい管理下オブジェクトを割り当て、その参照数を 1 とする。 freer は参照数が 0 になった際にそのオブジェクトを解放するために用いられる関数である。freer が NULLならば、オブジェクトは関数 free() によって解放される。
割り当てられたオブジェクト冒頭のバイトは、M17NObjectHead が占める。この領域は m17n ライブラリが使用するので、アプリケーションプログラムは触れてはならない。
typedef struct { M17NObjectHead head; int mem1; char *mem2; } MYStruct; void my_freer (void *obj) { free (((MYStruct *) obj)->mem2); free (obj); } void my_func (MText *mt, MSymbol key, int num, char *str) { MYStruct *st = m17n_object (sizeof (MYStruct), my_freer); st->mem1 = num; st->mem2 = strdup (str); /* KEY must be a managing key. */ mtext_put_prop (mt, 0, mtext_len (mt), key, st); /* This sets the reference count of ST back to 1. */ m17n_object_unref (st); }
int m17n_object_ref | ( | void * | object | ) |
関数 m17n_object_ref() は object で指される管理下オブジェクトの参照数を 1 増やす。
int m17n_object_unref | ( | void * | object | ) |
関数 m17n_object_unref() は object で指される管理下オブジェクトの参照数を 1 減らす。参照数が 0 になれば、オブジェクトは解放関数によって解放される。