1#ifndef __JBXL_TINY_LIST_H_
2#define __JBXL_TINY_LIST_H_
92#define TLIST_ANCHOR_NODE JBXL_STATE_ANCHOR
96#define TLIST_MATCH_COMPLETE 0
97#define TLIST_MATCH_TLISTKEY -1
98#define TLIST_MATCH_STRINGKEY -2
99#define TLIST_MATCH_STRKEY -2
109#define make_tList_data_byBuffer(i, l, k, v, d, s) make_tList_data((i), (l), (k), (v), (d), (s))
110#define make_tList_data_int(k, v) make_tList_data_bystr((k), (v), NULL, NULL, NULL, 0)
111#define make_tList_data_str(k, v) make_tList_data_bystr(0, 0, (char*)(k), (char*)(v), NULL, 0)
112#define make_tList_data_Buffer(k, v) make_tList_data(0, 0, (k), (v), NULL, 0)
132#define new_tList_anchor() add_tList_node_anchor()
133#define del_tList_anchor(t) del_tList_anchor_node((t))
140#define add_tList_node_anchor() add_tList_node_bystr(NULL, TLIST_ANCHOR_NODE, 0, NULL, NULL, NULL, 0)
141#define add_tList_node_int(p, k, v) add_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
142#define add_tList_node_str(p, k, v) add_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
143#define add_tList_node_null(p) add_tList_node_bystr((p), 0, 0, NULL, NULL, NULL, 0)
144#define add_tList_node_Buffer(p, k, v) add_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
150#define set_tList_node_int(p, k, v) set_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
151#define set_tList_node_str(p, k, v) set_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
152#define set_tList_node_Buffer(p, k, v) set_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
159#define update_tList_node_int(p, k, v) update_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
160#define update_tList_node_str(p, k, v) update_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
161#define update_tList_node_Buffer(p, k, v) update_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
178#define add_tList(p, t) insert_tList((p), (t))
179#define add_tList_node(p, t) insert_tList((p), (t))
180#define insert_tList_node(p, t) insert_tList((p), (t))
181#define new_tList() new_tList_node()
234#define get_strparam_tList(l, k, d) get_str_param_tList((l), (k), (d))
235#define get_intparam_tList(l, k, d) get_int_param_tList((l), (k), (d))
236#define get_doubleparam_tList(l, k, d) get_double_param_tList((l), (k), (d))
237#define get_boolparam_tList(l, k, d) get_bool_param_tList((l), (k), (d))
struct _tList * lst
リストデータへのポインタ
struct _tList * esis
前の姉妹ノードへのポインタ for tTree
struct _tList_data ldat
データ
struct _tList * prev
親ノードへのポインタ
struct _tList * yngr
子(末っ子)ノードへのポインタ for tTree
struct _tList * next
子ノードへのポインタ(通常は yngr)
struct _tList * altp
他のノードへのポインタ
struct _tList * ysis
次の姉妹ノードへのポインタ for tTree
tList * dup_tList(tList *pp)
リストを複製する.
tList * new_tList_anchor_node(void)
リスト用の ANCHORノードを動的に生成.
int del_tList_key(tList **pp, const char *key, int no)
plからサーチして,no番目の keyのノードを削除する.
tList * strncaservscmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.文字も後方から比べる.大文字小文字を無視.
tList_data make_tList_data_bystr(int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データを指定してノードデータを作成
tList * read_Buffer_tList_file(const char *fn)
ファイルから Buffer型変数を 2つずつ読み込んで,リストのキー部とバッファ部に格納し返す.
tList * add_tList_node_bydata(tList *pp, tList_data ldat)
データ(ldat)からリスト用ノードを生成し(new),それを指定したリストの後ろに追加.
tList * dup_tList_node(tList *node)
ノードデータを複製する (new).ノードのポインタは複製しない.
char * get_str_join_tList(tList *lp, const char *deli)
リストの一連のキー部を deliを区切りにして結合して,その文字列を返す. 要 free
tList * strnrvscmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.文字の後方から比べる
int replace_value_tList(tList *lt, const char *key, int no, const char *srcval, char *value)
リスト(lt)中の no番目の keyノードの値の srcvalの部分を value に置き換える.
void set_tList_node_bydata(tList *pp, tList_data ldat)
リストのノードに値を設定する.
Buffer buffer_key_tList(tList *lt, const char *key, int no)
リストの中から no番目の keyノード(ldat.key)を探し出し,ldat.valのコピーを返す.
tList * find_tList_top(tList *pp)
リストの最初のノードを探す.
double get_double_param_tList(tList *lt, const char *key, double dflt)
keyに対応する値を double型実数として読み出す.キーがない場合は,デフォルト値 dflt を返す.
tList * awk_Buffer_tList(Buffer buf, char cc)
Buffer 中の文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.
tList * update_tList_node_bydata(tList *pp, char *key, tList_data ldat)
keyで検索し,ノードがあればノードをコピーする.無ければ最後にノードを追加する(new).
tList * strstrcase_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数による後方からのノードの部分文字列サーチ.大文字小文字を無視.
int save_Buffer_tList_fp(FILE *fp, tList *lt)
リストのキー部とバッファ部の Buffer型変数をファイルポンタが指すファイルへ書き込む.
tList * find_tList_end(tList *pp)
リストの最後のノードを探す.
void print_tList(FILE *fp, tList *pp)
リストの表示.ポインタ pp以降の全てのノードを fpに表示する.
void del_tList_data(tList_data **ldat)
ノードデータを削除する.
tList * strncmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.
tList * del_tList_anchor_node(tList *node)
ANCHORノードを削除して,TOPのポインターを返す.
tList * cawk_Buffer_tList(Buffer buf, char cc)
Buffer 中の文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.連続文字列対応.
char * get_str_param_tList(tList *lt, const char *key, const char *dflt)
keyに対応する値を 文字列として読み出す.キーがない場合は,デフォルト値 dflt を返す.要 free().
tList_data make_tList_data(int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
データを指定してノードデータを作成
Buffer buffer_key_value_tList(tList *lt, const char *key, char *data, int no)
リストの中から no番目の keyノードを探し出し,ノード値が data で始まる場合,そのノード値を返す.
int get_bool_param_tList(tList *lt, const char *key, int dflt)
keyに対応する値を 論理値(実際は整数)として読み出す.キーがない場合は,デフォルト値 dflt を返す.
tList * update_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
keyで検索し,ノードがあればノードをコピーする.無ければ最後に追加する(new)
Buffer get_Buffer_join_tList(tList *lp, const char *deli)
リストの一連のキー部を deliを区切りにして結合して返す.
void del_all_tList(tList **pp)
リストの全ノードの削除.ポインタ ppのノードを含むリスト全体を削除する.
tList * read_Buffer_tList_fp(FILE *fp)
ファイルポインタから Buffer型変数を 2つずつ読み込んで,リストのキー部とバッファ部に格納し返す.
tList * insert_tList(tList *pp, tList *pt)
ノードppの直ぐ後ろに ptを挿入する.
int set_value_tList_node(tList *lt, const char *value)
lt->ldat.val に文字列を設定する(置き換える).
int count_tList(tList *pp)
リストの ppノード以降のノードの数を数える.
tList * del_tList(tList **pp)
指定したリストノード以降のリストを削除.
float get_float_param_tList(tList *lt, const char *key, float dflt)
keyに対応する値を float型実数として読み出す.キーがない場合は,デフォルト値 dflt を返す.
tList * update_tList_node(tList *pp, tList *pt)
pt->keyで検索し,ノードがあればノードをコピーする.無ければ最後にノードを追加する(new).
tList * move_tList_node(tList *pp, tList *node)
nodeを現在のリストから切り離し,ppへ移動する.
tList * update_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
key.bufで検索し,ノードがあれば設定する.無ければ最後に追加する(new).
int get_int_param_tList(tList *lt, const char *key, int dflt)
keyに対応する値を 整数として読み出す.キーがない場合は,デフォルト値 dflt を返す..
void clear_tList_data(tList_data *ldat)
ノードデータのバッファ部をクリアする.データ自身は削除しない.
tList * read_index_tList_fp(FILE *fp, char deli)
ファイルポインタが示すファイルから一行ずつ読み込んで,deliを区切り文字にしてリストのキー部とデータ部に格納.
tList * read_tList_fp(FILE *fp, int mode)
ファイルポインタが示すファイルから一行ずつ読み込んでリストのキー部に格納.
tList * strncmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.
int set_value_tList(tList *lt, const char *key, int no, const char *value, int mode)
リスト(lt)中の no番目の keyノードの値に valueを設定する.
tList * read_tList_file(const char *fn, int mode)
ファイルから一行ずつ読み込んでリストのキー部に格納.空行はリストに加えない.
tList * add_tList_end(tList *pp, tList *pt)
リストppの最後に リストptを追加する.
tList * add_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリスト用ノードを生成し(new),それをリストに追加.
tList_data dup_tList_data(tList_data ldat)
ノードデータの複製を作成する
tList * strncaservscmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.文字の後方から比べる.大文字小文字を無視.
tList * strncasecmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.大文字小文字を無視する
tList * swap_tList_node(tList *pp1, tList *pp2)
pp1ノード と pp2ノードを入れ替える.
tList * free_tList_node(tList *node)
リスト用ノードのバッファ部(データ)の解放.
tList * search_key_tList(tList *lt, const char *key, int no)
リストの中から no番目の keyノード(ldat.key)を探し出し,tListへのポインタを返す.大文字小文字を無視.
int save_Buffer_tList_file(const char *fn, tList *lt)
リストのキー部とバッファ部の Buffer型変数をファイルへ書き込む.
tList * search_id_tList(tList *lt, int id, int no)
リストの中から no番目の idノード(ldat.id)を探し出し,tListのポインタを返す.
tList * add_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
Buffer データからリスト用ノードを生成し(new),それをリストに追加.
tList * del_tList_node(tList **node)
リスト用のノードを削除.
tList * strstr_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードの部分文字列サーチ.
tList_data init_tList_data(void)
空のノードデータを静的に作成.データを初期化するのに使用する.
int replace_value_tList_node(tList *lt, const char *srcval, const char *value)
lt->ldat.val のsrcval部分を value に置き換える.
tList make_tList_node(tList_data data)
リスト用ノードを静的に作成する.
void set_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリストのノードに値を設定する.それぞれのデータは複製されて設定される.
tList * strstr_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードの部分文字列サーチ.
void set_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
リストのノードに値を設定する.それぞれのデータは複製されて設定される.
tList * read_index_tList_file(const char *fn, char deli)
ファイルから一行ずつ読み込んで,deliを区切り文字にしてリストのキー部とデータ部に格納.
tList * cawk_tList(char *str, char cc)
文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.連続文字列対応.
tList * strnrvscmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.文字も後方から比べる.
tList * awk_tList(char *str, char cc)
文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.
tList * strstrcase_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードの部分文字列サーチ.大文字小文字を無視.
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.
void dump_tList(FILE *fp, tList *pp)
val.buf を 16進ダンプする.他のデータは通常通り表示する.
tList * strncasecmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.大文字小文字を無視.