m17n ライブラリ 1.8.4
|
文字テーブルとそれに関する API. [詳解]
型定義 | |
typedef struct MCharTable | MCharTable |
文字テーブルの型宣言. | |
関数 | |
MCharTable * | mchartable (MSymbol key, void *default_value) |
新しい文字テーブルを作る. | |
int | mchartable_min_char (MCharTable *table) |
int | mchartable_max_char (MCharTable *table) |
void * | mchartable_lookup (MCharTable *table, int c) |
文字テーブル中で文字に割り当てられた値を返す. | |
int | mchartable_set (MCharTable *table, int c, void *val) |
文字テーブル中での文字の値を設定する. | |
int | mchartable_set_range (MCharTable *table, int from, int to, void *val) |
指定範囲の文字に値を設定する. | |
void | mchartable_range (MCharTable *table, int *from, int *to) |
値がデフォルトと異なる文字を探す. | |
int | mchartable_map (MCharTable *table, void *ignore, void(*func)(int, int, void *, void *), void *func_arg) |
文字テーブル中の文字に対して指定の関数を呼ぶ. | |
変数 | |
MSymbol | Mchar_table |
文字テーブルとそれに関する API.
"char-table" という名前を持つシンボル.
m17n ライブラリが扱う文字の空間は広大であるため、文字毎の情報を単純な配列に格納しようとすると、その配列は巨大になりすぎ、非実用的である。 しかし通常必要となる文字についての情報は、ある特定の範囲の文字にのみ付いていることが多い。 全文字に関して情報がある場合にも、連続した文字コードを持つ文字は同じ情報を持つことが多い。
このような傾向を利用して文字とその付加情報を効率的に格納するために、 m17n ライブラリは 文字テーブル (chartable) と呼ぶオブジェクトを用いる。 文字テーブルは配列ではないが、アプリケーションプログラムは文字テーブルを配列の一種として扱うことができる。 ある文字についての特定の情報は、その情報を持つ文字テーブルをその文字のコードで引くこと で得られる。
文字テーブルは管理下オブジェクトである。
シンボル Mchar_table
は名前 "char-table"
を持つ。
typedef struct MCharTable MCharTable |
文字テーブルの型宣言.
MCharTable は 文字テーブル (chartable) オブジェクトの型である。 内部構造はアプリケーションプログラムからは見えない。
MCharTable * mchartable | ( | MSymbol | key, |
void * | default_value | ||
) |
新しい文字テーブルを作る.
関数 mchartable() はキーが key で要素のデフォルト値が default_value である新しい文字テーブルを作る。もし key が管理キーであれば、このテーブルの要素は(デフォルト値を含めて)管理下オブジェクトか NULL のいずれかである。
NULL
を返し、外部変数 merror_code にエラーコードを設定する。 int mchartable_min_char | ( | MCharTable * | table | ) |
int mchartable_max_char | ( | MCharTable * | table | ) |
void * mchartable_lookup | ( | MCharTable * | table, |
int | c | ||
) |
文字テーブル中で文字に割り当てられた値を返す.
関数 mchartable_lookup() は文字テーブル table 中で文字 c に割り当てられた値を返す。c に対する明示的な値がなければ、table のデフォルト値を返す。c が妥当な文字でなければ、mchartable_lookup() は NULL
を返し、外部変数 merror_code にエラーコードを設定する。
MERROR_CHAR
int mchartable_set | ( | MCharTable * | table, |
int | c, | ||
void * | val | ||
) |
文字テーブル中での文字の値を設定する.
関数 mchartable_set() は、文字テーブル table 中の文字 c に値 val を割り当てる。
MERROR_CHAR
int mchartable_set_range | ( | MCharTable * | table, |
int | from, | ||
int | to, | ||
void * | val | ||
) |
指定範囲の文字に値を設定する.
関数 mchartable_set_range() は、文字テーブル table 中の from から to まで(両端を含む)の文字に、値として val を設定する。
MERROR_CHAR
void mchartable_range | ( | MCharTable * | table, |
int * | from, | ||
int * | to | ||
) |
値がデフォルトと異なる文字を探す.
関数 mchartable_range() は文字テーブル table 中で、table のデフォルト値以外の値を持つ最初と最後の文字を探し、それぞれを from と to に設定する。すべての文字が値としてデフォルト値をとっている場合には from と to を -1に設定する。
int mchartable_map | ( | MCharTable * | table, |
void * | ignore, | ||
void(*)(int, int, void *, void *) | func, | ||
void * | func_arg | ||
) |
文字テーブル中の文字に対して指定の関数を呼ぶ.
関数 mchartable_map() は、文字テーブル table 中の文字に対して関数 func を呼ぶ。ただしtable 中でも値が ignore である文字については関数呼び出しを行なわない。ignore と文字の値の比較は ==
で行なうので、文字列リテラルやポインタを使う際には注意を要する。
mchartable_map() は、一文字ごとに func を呼ぶのではなく、関数呼び出しの回数を最適化しようとする。 すなわち、連続した文字が同じ値を持っていた場合には、その文字のまとまり全体について一度の関数呼び出 ししか行なわない。
文字のまとまりの大きさにかかわらず、func は from, to, val, arg の4引数で呼ばれる。from と to (両端を含む)は val を値として持つ文字の範囲を示し、arg は func_arg そのものである。
MSymbol Mchar_table |