JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
tlist.h
Go to the documentation of this file.
1#ifndef __JBXL_TINY_LIST_H_
2#define __JBXL_TINY_LIST_H_
3
13#include "buffer.h"
14
15
16struct _tList_data;
17struct _tList;
18
19
21 int id;
22 int lv;
25 void* ptr;
26 int sz;
27 struct _tList* lst;
28};
29
30
43typedef struct _tList_data tList_data;
44
45
46struct _tList {
48
49 struct _tList* next;
50 struct _tList* prev;
51 struct _tList* altp;
52 struct _tList* yngr;
53
54 struct _tList* esis;
55 struct _tList* ysis;
56
57 int depth;
58 int num;
59 int ctrl;
61 int state;
62};
63
64
88typedef struct _tList tList;
89
90
91// Anchor Node
92#define TLIST_ANCHOR_NODE JBXL_STATE_ANCHOR
93
94
95// for strncmp_tList()
96#define TLIST_MATCH_COMPLETE 0
97#define TLIST_MATCH_TLISTKEY -1
98#define TLIST_MATCH_STRINGKEY -2
99#define TLIST_MATCH_STRKEY -2
100
101
103// List Data
104
106
107tList_data make_tList_data (int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
108tList_data make_tList_data_bystr(int id, int lv, const char* key, const char* val, void* ptr, int sz);
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)
113
117
118
120// Tiny List Node
121
122tList* new_tList_node(void);
124tList* del_tList_node(tList** node);
126tList* dup_tList_node (tList* node);
127tList* move_tList_node(tList* pp, tList* node);
128tList* swap_tList_node(tList* pp1, tList* pp2);
129
132#define new_tList_anchor() add_tList_node_anchor()
133#define del_tList_anchor(t) del_tList_anchor_node((t))
134
135
136// 追加は new_tList_node() を使用
138tList* add_tList_node_bystr (tList* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
139tList* add_tList_node_byBuffer(tList* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
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)
145
146// 設定
148void set_tList_node_bystr (tList* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
149void set_tList_node_byBuffer(tList* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
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)
153
154// 検索して更新.無ければ追加.(追加は new_tList_node()を使用)
157tList* update_tList_node_bystr(tList* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
158tList* update_tList_node_byBuffer(tList* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
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)
162
163
165// Tiny List
166
167tList* del_tList(tList** pp);
168void del_all_tList(tList** pp);
169int del_tList_key(tList** pp, const char* key, int no);
170
171tList* add_tList_end(tList* pp, tList* pt);
172tList* insert_tList(tList* pp, tList* pt);
173tList* dup_tList(tList* pp);
174void print_tList(FILE* fp, tList* pp);
175void dump_tList(FILE* fp, tList* pp);
176int count_tList(tList* pp);
177
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()
182
185
186// 検索 リストへのポインタを返す
187// len: 1以上:一致させる長さ,0:完全一致,-1:pl->keyの長さに合わせる,-2:keyの長さに合わせる
188tList* strncmp_tList (tList* pl, const char* key, int len, int no);
189tList* strnrvscmp_tList(tList* pl, const char* key, int len, int no);
190tList* strstr_tList (tList* pl, const char* key, int len, int no);
191
192tList* strncasecmp_tList (tList* pl, const char* key, int len, int no);
193tList* strncaservscmp_tList(tList* pl, const char* key, int len, int no);
194tList* strstrcase_tList (tList* pl, const char* key, int len, int no);
195
196tList* strncmp_back_tList (tList* pl, const char* key, int len, int no);
197tList* strnrvscmp_back_tList(tList* pl, const char* key, int len, int no);
198tList* strstr_back_tList (tList* pl, const char* key, int len, int no);
199
200tList* strncasecmp_back_tList (tList* pl, const char* key, int len, int no);
201tList* strncaservscmp_back_tList(tList* pl, const char* key, int len, int no);
202tList* strstrcase_back_tList (tList* pl, const char* key, int len, int no);
203
204// 検索
205tList* search_id_tList (tList* lt, int id, int no);
206tList* search_key_tList(tList* lt, const char* key, int no);
207
208// 検索 ldat.val のコピーを返す
209Buffer buffer_key_tList(tList* lt, const char* key, int no);
210Buffer buffer_key_value_tList(tList* lt, const char* key, char* data, int no);
211
212// Tools
213tList* awk_tList (char* str, char cc);
214tList* cawk_tList(char* str, char cc);
215tList* awk_Buffer_tList (Buffer buf, char cc);
216tList* cawk_Buffer_tList(Buffer buf, char cc);
217char* get_str_join_tList(tList* lp, const char* deli);
218Buffer get_Buffer_join_tList(tList* lp, const char* deli);
219
220// 値変更
221int set_value_tList(tList* lt, const char* key, int no, const char* value, int mode);
222int replace_value_tList(tList* lt, const char* key, int no, const char* srcval, char* value);
223
224int set_value_tList_node(tList* lt, const char* value);
225int replace_value_tList_node(tList* lt, const char* srcval, const char* value);
226
227// for Configuration File
228char* get_str_param_tList(tList* lt, const char* key, const char* dflt);
229int get_int_param_tList(tList* lt, const char* key, int dflt);
230double get_double_param_tList(tList* lt, const char* key, double dflt);
231float get_float_param_tList (tList* lt, const char* key, float dflt);
232int get_bool_param_tList (tList* lt, const char* key, int dflt);
233
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))
238
239
241// File I/O with Tiny List
242
243tList* read_tList_fp(FILE* fp, int mode);
244tList* read_tList_file(const char* fn, int mode);
245tList* read_index_tList_fp(FILE* fp, char deli);
246tList* read_index_tList_file(const char* fn, char deli);
247
248tList* read_Buffer_tList_fp(FILE* fp);
249tList* read_Buffer_tList_file(const char* fn);
250int save_Buffer_tList_fp(FILE* fp, tList* lt);
251int save_Buffer_tList_file(const char* fn, tList* lt);
252
253
254#endif // __JBXL_TINY_LIST_H_
255
Buffer型サポートヘッダ
int sz
*ptrのサイズ
Definition tlist.h:26
int lv
ノード値(整数)
Definition tlist.h:22
Buffer val
ノード値(文字列)
Definition tlist.h:24
int id
ノードID
Definition tlist.h:21
Buffer key
ノードのキー
Definition tlist.h:23
void * ptr
汎用(構造体など)
Definition tlist.h:25
struct _tList * lst
リストデータへのポインタ
Definition tlist.h:27
Definition tlist.h:46
int ctrl
制御用
Definition tlist.h:59
struct _tList * esis
前の姉妹ノードへのポインタ for tTree
Definition tlist.h:54
struct _tList_data ldat
データ
Definition tlist.h:47
int ctrl_alt
制御用2
Definition tlist.h:60
int num
子ノードの数 for tTree
Definition tlist.h:58
int state
ノードの状態
Definition tlist.h:61
struct _tList * prev
親ノードへのポインタ
Definition tlist.h:50
struct _tList * yngr
子(末っ子)ノードへのポインタ for tTree
Definition tlist.h:52
int depth
深さ for tTree
Definition tlist.h:57
struct _tList * next
子ノードへのポインタ(通常は yngr)
Definition tlist.h:49
struct _tList * altp
他のノードへのポインタ
Definition tlist.h:51
struct _tList * ysis
次の姉妹ノードへのポインタ for tTree
Definition tlist.h:55
tList * dup_tList(tList *pp)
リストを複製する.
Definition tlist.cpp:843
tList * new_tList_anchor_node(void)
リスト用の ANCHORノードを動的に生成.
Definition tlist.cpp:371
int del_tList_key(tList **pp, const char *key, int no)
plからサーチして,no番目の keyのノードを削除する.
Definition tlist.cpp:805
tList * strncaservscmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.文字も後方から比べる.大文字小文字を無視.
Definition tlist.cpp:1413
tList_data make_tList_data_bystr(int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データを指定してノードデータを作成
Definition tlist.cpp:89
tList * read_Buffer_tList_file(const char *fn)
ファイルから Buffer型変数を 2つずつ読み込んで,リストのキー部とバッファ部に格納し返す.
Definition tlist.cpp:2286
tList * add_tList_node_bydata(tList *pp, tList_data ldat)
データ(ldat)からリスト用ノードを生成し(new),それを指定したリストの後ろに追加.
Definition tlist.cpp:417
tList * dup_tList_node(tList *node)
ノードデータを複製する (new).ノードのポインタは複製しない.
Definition tlist.cpp:287
char * get_str_join_tList(tList *lp, const char *deli)
リストの一連のキー部を deliを区切りにして結合して,その文字列を返す. 要 free
Definition tlist.cpp:1941
tList * strnrvscmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.文字の後方から比べる
Definition tlist.cpp:1132
int replace_value_tList(tList *lt, const char *key, int no, const char *srcval, char *value)
リスト(lt)中の no番目の keyノードの値の srcvalの部分を value に置き換える.
Definition tlist.cpp:1742
void set_tList_node_bydata(tList *pp, tList_data ldat)
リストのノードに値を設定する.
Definition tlist.cpp:513
Buffer buffer_key_tList(tList *lt, const char *key, int no)
リストの中から no番目の keyノード(ldat.key)を探し出し,ldat.valのコピーを返す.
Definition tlist.cpp:1595
tList * find_tList_top(tList *pp)
リストの最初のノードを探す.
Definition tlist.cpp:1002
double get_double_param_tList(tList *lt, const char *key, double dflt)
keyに対応する値を double型実数として読み出す.キーがない場合は,デフォルト値 dflt を返す.
Definition tlist.cpp:2041
tList * awk_Buffer_tList(Buffer buf, char cc)
Buffer 中の文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.
Definition tlist.cpp:1883
tList * update_tList_node_bydata(tList *pp, char *key, tList_data ldat)
keyで検索し,ノードがあればノードをコピーする.無ければ最後にノードを追加する(new).
Definition tlist.cpp:635
tList * strstrcase_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数による後方からのノードの部分文字列サーチ.大文字小文字を無視.
Definition tlist.cpp:1497
int save_Buffer_tList_fp(FILE *fp, tList *lt)
リストのキー部とバッファ部の Buffer型変数をファイルポンタが指すファイルへ書き込む.
Definition tlist.cpp:2370
tList * find_tList_end(tList *pp)
リストの最後のノードを探す.
Definition tlist.cpp:1023
void print_tList(FILE *fp, tList *pp)
リストの表示.ポインタ pp以降の全てのノードを fpに表示する.
Definition tlist.cpp:928
void del_tList_data(tList_data **ldat)
ノードデータを削除する.
Definition tlist.cpp:149
tList * strncmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.
Definition tlist.cpp:1299
tList * del_tList_anchor_node(tList *node)
ANCHORノードを削除して,TOPのポインターを返す.
Definition tlist.cpp:387
tList * cawk_Buffer_tList(Buffer buf, char cc)
Buffer 中の文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.連続文字列対応.
Definition tlist.cpp:1914
char * get_str_param_tList(tList *lt, const char *key, const char *dflt)
keyに対応する値を 文字列として読み出す.キーがない場合は,デフォルト値 dflt を返す.要 free().
Definition tlist.cpp:1994
tList_data make_tList_data(int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
データを指定してノードデータを作成
Definition tlist.cpp:50
Buffer buffer_key_value_tList(tList *lt, const char *key, char *data, int no)
リストの中から no番目の keyノードを探し出し,ノード値が data で始まる場合,そのノード値を返す.
Definition tlist.cpp:1626
int get_bool_param_tList(tList *lt, const char *key, int dflt)
keyに対応する値を 論理値(実際は整数)として読み出す.キーがない場合は,デフォルト値 dflt を返す.
Definition tlist.cpp:2091
tList * update_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
keyで検索し,ノードがあればノードをコピーする.無ければ最後に追加する(new)
Definition tlist.cpp:668
Buffer get_Buffer_join_tList(tList *lp, const char *deli)
リストの一連のキー部を deliを区切りにして結合して返す.
Definition tlist.cpp:1953
void del_all_tList(tList **pp)
リストの全ノードの削除.ポインタ ppのノードを含むリスト全体を削除する.
Definition tlist.cpp:769
tList * read_Buffer_tList_fp(FILE *fp)
ファイルポインタから Buffer型変数を 2つずつ読み込んで,リストのキー部とバッファ部に格納し返す.
Definition tlist.cpp:2308
tList * insert_tList(tList *pp, tList *pt)
ノードppの直ぐ後ろに ptを挿入する.
Definition tlist.cpp:903
int set_value_tList_node(tList *lt, const char *value)
lt->ldat.val に文字列を設定する(置き換える).
Definition tlist.cpp:1714
int count_tList(tList *pp)
リストの ppノード以降のノードの数を数える.
Definition tlist.cpp:979
tList * del_tList(tList **pp)
指定したリストノード以降のリストを削除.
Definition tlist.cpp:735
float get_float_param_tList(tList *lt, const char *key, float dflt)
keyに対応する値を float型実数として読み出す.キーがない場合は,デフォルト値 dflt を返す.
Definition tlist.cpp:2066
tList * update_tList_node(tList *pp, tList *pt)
pt->keyで検索し,ノードがあればノードをコピーする.無ければ最後にノードを追加する(new).
Definition tlist.cpp:609
tList * move_tList_node(tList *pp, tList *node)
nodeを現在のリストから切り離し,ppへ移動する.
Definition tlist.cpp:321
tList * update_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
key.bufで検索し,ノードがあれば設定する.無ければ最後に追加する(new).
Definition tlist.cpp:703
int get_int_param_tList(tList *lt, const char *key, int dflt)
keyに対応する値を 整数として読み出す.キーがない場合は,デフォルト値 dflt を返す..
Definition tlist.cpp:2016
void clear_tList_data(tList_data *ldat)
ノードデータのバッファ部をクリアする.データ自身は削除しない.
Definition tlist.cpp:120
tList * read_index_tList_fp(FILE *fp, char deli)
ファイルポインタが示すファイルから一行ずつ読み込んで,deliを区切り文字にしてリストのキー部とデータ部に格納.
Definition tlist.cpp:2246
tList * read_tList_fp(FILE *fp, int mode)
ファイルポインタが示すファイルから一行ずつ読み込んでリストのキー部に格納.
Definition tlist.cpp:2158
tList * strncmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.
Definition tlist.cpp:1056
int set_value_tList(tList *lt, const char *key, int no, const char *value, int mode)
リスト(lt)中の no番目の keyノードの値に valueを設定する.
Definition tlist.cpp:1675
tList * read_tList_file(const char *fn, int mode)
ファイルから一行ずつ読み込んでリストのキー部に格納.空行はリストに加えない.
Definition tlist.cpp:2127
tList * add_tList_end(tList *pp, tList *pt)
リストppの最後に リストptを追加する.
Definition tlist.cpp:877
tList * add_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリスト用ノードを生成し(new),それをリストに追加.
Definition tlist.cpp:462
tList_data dup_tList_data(tList_data ldat)
ノードデータの複製を作成する
Definition tlist.cpp:169
tList * strncaservscmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.文字の後方から比べる.大文字小文字を無視.
Definition tlist.cpp:1170
tList * strncasecmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.大文字小文字を無視する
Definition tlist.cpp:1094
tList * swap_tList_node(tList *pp1, tList *pp2)
pp1ノード と pp2ノードを入れ替える.
Definition tlist.cpp:342
tList * free_tList_node(tList *node)
リスト用ノードのバッファ部(データ)の解放.
Definition tlist.cpp:243
tList * search_key_tList(tList *lt, const char *key, int no)
リストの中から no番目の keyノード(ldat.key)を探し出し,tListへのポインタを返す.大文字小文字を無視.
Definition tlist.cpp:1571
int save_Buffer_tList_file(const char *fn, tList *lt)
リストのキー部とバッファ部の Buffer型変数をファイルへ書き込む.
Definition tlist.cpp:2344
tList * search_id_tList(tList *lt, int id, int no)
リストの中から no番目の idノード(ldat.id)を探し出し,tListのポインタを返す.
Definition tlist.cpp:1541
tList * add_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
Buffer データからリスト用ノードを生成し(new),それをリストに追加.
Definition tlist.cpp:492
tList * del_tList_node(tList **node)
リスト用のノードを削除.
Definition tlist.cpp:270
tList * strstr_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードの部分文字列サーチ.
Definition tlist.cpp:1206
tList_data init_tList_data(void)
空のノードデータを静的に作成.データを初期化するのに使用する.
Definition tlist.cpp:26
int replace_value_tList_node(tList *lt, const char *srcval, const char *value)
lt->ldat.val のsrcval部分を value に置き換える.
Definition tlist.cpp:1779
tList make_tList_node(tList_data data)
リスト用ノードを静的に作成する.
Definition tlist.cpp:223
void set_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリストのノードに値を設定する.それぞれのデータは複製されて設定される.
Definition tlist.cpp:536
tList * strstr_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードの部分文字列サーチ.
Definition tlist.cpp:1451
void set_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
リストのノードに値を設定する.それぞれのデータは複製されて設定される.
Definition tlist.cpp:575
tList * read_index_tList_file(const char *fn, char deli)
ファイルから一行ずつ読み込んで,deliを区切り文字にしてリストのキー部とデータ部に格納.
Definition tlist.cpp:2219
tList * cawk_tList(char *str, char cc)
文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.連続文字列対応.
Definition tlist.cpp:1844
tList * strnrvscmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.文字も後方から比べる.
Definition tlist.cpp:1375
tList * awk_tList(char *str, char cc)
文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.
Definition tlist.cpp:1805
tList * strstrcase_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードの部分文字列サーチ.大文字小文字を無視.
Definition tlist.cpp:1250
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.
Definition tlist.cpp:198
void dump_tList(FILE *fp, tList *pp)
val.buf を 16進ダンプする.他のデータは通常通り表示する.
Definition tlist.cpp:952
tList * strncasecmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.大文字小文字を無視.
Definition tlist.cpp:1337