JunkBox_Lib  1.10.2
ttree.h
Go to the documentation of this file.
1 #ifndef __JBXL_TINY_TREE_H_
2 #define __JBXL_TINY_TREE_H_
3 
13 #include "buffer.h"
14 #include "tlist.h"
15 
16 
47 typedef tList tTree;
48 
49 
51 #define TREE_ANCHOR_NODE JBXL_STATE_ANCHOR
52 #define TREE_NOCTRL_NODE 0
53 #define TREE_NOCMP_NODE 100
54 #define TREE_NOCMP_COPY_NODE 101
55 #define TREE_COPY_NODE 102
56 #define TREE_NOSIS_NODE 103
57 #define TREE_DELETE_NODE 104
58 #define TREE_KEEP_NODE 105
59 #define TREE_ALREADY_FOUND_NODE 110
60 #define TREE_ALREADY_FOUND_NODE_TEMP 111
61 
62 
64 // Tiny Tree Graph Node
65 
66 tTree* new_tTree_node(void);
70 #define del_tTree_anchor(t) del_tTree_anchor_node((t))
71 #define new_tTree() new_tTree_node()
72 #define new_tTree_anchor() new_tTree_anchor_node()
73 
74 tTree* add_tTree_node (tTree* pp, tTree* node);
76 tTree* add_tTree_node_bystr (tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
77 tTree* add_tTree_node_byBuffer(tTree* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
78 
79 #define add_tTree_node_int(p, k, v) add_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
80 #define add_tTree_node_str(p, k, v) add_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
81 #define add_tTree_node_Buffer(p, k, v) add_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
82 
83 tTree* insert_tTree_node (tTree* pp, tTree* pt);
85 tTree* insert_tTree_node_bystr (tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
86 tTree* insert_tTree_node_byBuffer(tTree* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
87 
88 #define insert_tTree_node_int(p, k, v) insert_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
89 #define insert_tTree_node_str(p, k, v) insert_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
90 #define insert_tTree_node_Buffer(p, k, v) insert_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
91 
92 tTree* move_tTree_node(tTree* node, tTree* pp);
93 int replace_all_tTree_node(tTree* pp, char* key, char* src, char* dst, int len);
94 tTree* del_tTree_node(tTree** node);
95 tTree* free_tTree_node(tTree* node);
96 
97 #define set_tTree_node_bydata(p, k) set_tList_node_bydata((p), (k))
98 #define set_tTree_node_bystr(p, i, l, k, v, d, s) set_tList_node_bystr((p), (i), (l), (k), (v), (d), (s))
99 #define set_tTree_node_byBuffer(p, i, l, k, v, d, s) set_tList_node_byBuffer((p), (i), (l), (k), (v), (d), (s))
100 
101 #define set_tTree_node_int(p, k, d) set_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
102 #define set_tTree_node_str(p, k, d) set_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
103 #define set_tTree_node_Buffer(p, k, d) set_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
104 
105 #define dup_tTree_node(p) dup_tList_node(p)
106 
107 
109 // Tiny Tree Graph
110 
111 void del_delete_node_tTree(tTree** pp);
112 void _del_delete_node_tTree(tTree** pp);
113 void del_non_keep_node_tTree(tTree** pp);
114 void _del_non_keep_node_tTree(tTree** pp);
115 
116 tTree* del_tTree(tTree** pp);
117 void del_all_tTree(tTree** pp);
121 
122 void adjust_tTree_depth(tTree* pp);
123 void print_tTree(FILE* fp, tTree* pp);
124 void print_tTree_tree(FILE* fp, tTree* pp, const char* space);
125 
126 tTree* add_tTree(tTree* pp, tTree* pt);
127 tTree* div_tTree(tTree* pp);
128 tTree* dup_merge_tTree(tTree* pp, tTree* tp);
129 void merge_tTree(tTree* tp, tTree* tt);
130 void exchange_tTree(tTree* tl, tTree* tt);
131 int count_tTree(tTree* pp);
132 
138 #define find_tTree_top(p) find_tList_top((p))
139 tTree* find_tTree_end(tTree* pp);
140 
141 // 検索/置換
142 tTree* strncmp_tTree (tTree* pp, const char* key, int len, int no);
143 tTree* strncasecmp_tTree(tTree* pp, const char* key, int len, int no);
144 
145 int find_match_tTree (tTree* pp, tTree* pt);
148 
149 int check_match_tTree (tTree* tp, tTree* tr);
150 tTree* cmp_sisters_tTree (tTree* tp, tTree* tr);
151 
152 int replace_tTree_node(tTree* pp, tTree* pt);
153 void _copy_tTree_byctrl (tTree* pt);
154 void _clear_tTree_ctrl (tTree* pp);
155 
156 Buffer get_value_tTree (tTree* pp, tTree* pt);
157 #define set_value_tTree(p, t) replace_tTree_node((p), (t))
158 
159 // 補助的関数
160 tTree* _next_strncmp_vertical_tTree (tTree* pp, const char* key, int len, int no, int* nn);
161 tTree* _next_strncasecmp_vertical_tTree(tTree* pp, const char* key, int len, int no, int* nn);
162 
163 tTree* _next_strncmp_horizon_tTree (tTree* pp, const char* key, int len, int no, int* nn);
164 tTree* _next_strncasecmp_horizon_tTree(tTree* pp, const char* key, int len, int no, int* nn);
165 
166 
167 #endif // __JBXL_TINY_TREE_H_
168 
Buffer型サポートヘッダ
unsigned char unsigned long * len
Definition: jpeg_tool.h:96
Definition: buffer.h:35
Tiny List 構造ライブラリヘッダ
tTree * insert_tTree_node_byBuffer(tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
ノードを長子としてリストに追加.
Definition: ttree.c:298
tTree * strncmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ
Definition: ttree.c:1190
tList * _find_match_tTree_endlist_rcsv(tTree *pp, tTree *pt, tTree *te)
find_match_tTree_endlist() の補助関数
Definition: ttree.c:1466
void del_delete_node_tTree(tTree **pp)
ctrl==TREE_DELETE_NODE を削除する.
Definition: ttree.c:534
tTree * new_tTree_node(void)
ツリー用の空ノードを動的に生成.
Definition: ttree.c:23
tTree * find_tTree_end(tTree *pp)
ツリーの最終ノードを見つける.
Definition: ttree.c:1132
tTree * del_sisters_tTree(tTree **pp)
指定したノード以下のXMLツリー(ppの姉妹を含む)を削除する.
Definition: ttree.c:688
tTree * move_tTree_node(tTree *node, tTree *pp)
nodeを現在のツリーから切り離し,ppへ移動する.
Definition: ttree.c:425
tTree * strncasecmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ.大文字小文字を無視する.
Definition: ttree.c:1226
Buffer get_value_tTree(tTree *pp, tTree *pt)
同じパターンの枝を検索し,一致した枝があれば,その枝の最後のノードの値を返す.
Definition: ttree.c:1600
void exchange_tTree(tTree *tl, tTree *tt)
ツリー tlと ツリー ttを交換する.
Definition: ttree.c:968
tTree * add_tTree_node_bydata(tTree *pp, tList_data ldat)
データから Treeノードをつくり出し,それを ppの子ノード(末っ子)として追加.
Definition: ttree.c:135
tTree * _next_strncasecmp_vertical_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.vertical は縦方向探索
Definition: ttree.c:1677
void adjust_tTree_depth(tTree *pp)
指定したノード ppを基準にして,木の深さを測り直す
Definition: ttree.c:1016
tTree * _next_strncmp_vertical_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.vertical は縦方向探索
Definition: ttree.c:1631
tTree * add_tTree_node(tTree *pp, tTree *node)
ツリー ppへノード nodeを末っ子として追加.
Definition: ttree.c:97
tTree * div_tTree(tTree *pp)
ツリー tp から ツリー ttを分離する.
Definition: ttree.c:822
void print_tTree(FILE *fp, tTree *pp)
ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する.
Definition: ttree.c:1102
tTree * del_sisters_children_tTree(tTree **pp)
指定したノードの姉妹ツリー,子ツリーを削除する.
Definition: ttree.c:718
tTree * del_tTree_anchor_node(tTree *node)
ANCHORノードを削除して,TOP(長女)へのポインターを返す.
Definition: ttree.c:53
tList * find_match_tTree_endlist(tTree *pp, tTree *pt)
pp内で ptと同じパターンの枝を全て探して,その枝の最後のノードへの情報を返す.
Definition: ttree.c:1446
tList tTree
Definition: ttree.h:47
tTree * del_tTree(tTree **pp)
指定したノード以下のツリーを削除する.
Definition: ttree.c:628
void del_all_tTree(tTree **pp)
ツリーの全ノードの削除.ポインタ ppのノードを含むツリー全体を削除する.
Definition: ttree.c:752
void del_non_keep_node_tTree(tTree **pp)
ctrl==TREE_KEEP_NODE 以外を削除する.
Definition: ttree.c:580
int replace_tTree_node(tTree *pp, tTree *pt)
同じパターンの枝を検索し,ptのノードの属性で置き換える.
Definition: ttree.c:1515
int count_tTree(tTree *pp)
ツリーの ppノード以降のノードの数を数える.
Definition: ttree.c:1151
tTree * _next_strncmp_horizon_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索
Definition: ttree.c:1654
tTree * _next_strncasecmp_horizon_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索
Definition: ttree.c:1700
int check_match_tTree(tTree *tp, tTree *tr)
tpが trと同じパターン(キー値)を持っているかどうかを検査する.
Definition: ttree.c:1325
void _del_delete_node_tTree(tTree **pp)
Definition: ttree.c:551
tTree * insert_tTree_node_bydata(tTree *pp, tList_data ldat)
ノードをつくり出し,それを ppの子ノード(長子)として追加.
Definition: ttree.c:259
tTree * new_tTree_anchor_node(void)
ツリー用の ANCHORノードを動的に生成.
Definition: ttree.c:37
void _clear_tTree_ctrl(tTree *pp)
ppツリーの ctrlをクリアする.
Definition: ttree.c:1420
tTree * free_tTree_node(tTree *node)
ツリーノードの解放.解放されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
Definition: ttree.c:344
void merge_tTree(tTree *tp, tTree *tt)
ツリー tp にツリー tt を結合する.結合後,tt の内容は壊れる(tpとノードを交換した形になる).
Definition: ttree.c:917
tTree * insert_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを長子としてリストに追加.
Definition: ttree.c:325
void _del_non_keep_node_tTree(tTree **pp)
Definition: ttree.c:597
tTree * del_tTree_node(tTree **node)
ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
Definition: ttree.c:400
void print_tTree_tree(FILE *fp, tTree *pp, const char *space)
ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する.
Definition: ttree.c:1063
tTree make_tTree_node(tList_data data)
ツリー用ノードを静的に作成.
Definition: ttree.c:74
tTree * add_tTree_node_byBuffer(tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
Definition: ttree.c:175
tTree * cmp_sisters_tTree(tTree *tp, tTree *tr)
tpの姉妹ノードが trの姉妹ノードと同じキー値を持っているかどうかを検査する.
Definition: ttree.c:1274
tTree * dup_merge_tTree(tTree *pp, tTree *tp)
ツリー ppの直下にツリー tpを複製する.
Definition: ttree.c:858
void _copy_tTree_byctrl(tTree *pt)
同じパターンの枝を検索し,ptのノードの属性をコピーする.
Definition: ttree.c:1541
tTree * add_tTree(tTree *pp, tTree *pt)
ツリー tpへ ツリー ttを追加.
Definition: ttree.c:778
int replace_all_tTree_node(tTree *pp, char *key, char *src, char *dst, int len)
対象の全てのノードのノード値を dst に書き換える.
Definition: ttree.c:499
tTree * del_children_tTree(tTree **pp)
指定したノードの子ツリーを削除する.指定したノードは削除しない.
Definition: ttree.c:666
int find_match_tTree(tTree *pp, tTree *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.
Definition: ttree.c:1390
tTree * add_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
Definition: ttree.c:202
tTree * insert_tTree_node(tTree *pp, tTree *pt)
ツリー ppへノード nodeを長子として追加.
Definition: ttree.c:225