JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
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
47typedef 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
66tTree* 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
74tTree* add_tTree_node (tTree* pp, tTree* node);
76tTree* add_tTree_node_bystr (tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
77tTree* 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
85tTree* insert_tTree_node_bystr (tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
86tTree* 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
92tTree* move_tTree_node(tTree* node, tTree* pp);
93int replace_all_tTree_node(tTree* pp, char* key, char* src, char* dst, int len);
94tTree* del_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
111void del_delete_node_tTree(tTree** pp);
112void _del_delete_node_tTree(tTree** pp);
115
116tTree* del_tTree(tTree** pp);
117void del_all_tTree(tTree** pp);
121
122void adjust_tTree_depth(tTree* pp);
123void print_tTree(FILE* fp, tTree* pp);
124void print_tTree_tree(FILE* fp, tTree* pp, const char* space);
125
126tTree* add_tTree(tTree* pp, tTree* pt);
127tTree* div_tTree(tTree* pp);
128tTree* dup_merge_tTree(tTree* pp, tTree* tp);
129void merge_tTree(tTree* tp, tTree* tt);
130void exchange_tTree(tTree* tl, tTree* tt);
131int count_tTree(tTree* pp);
132
138#define find_tTree_top(p) find_tList_top((p))
140
141// 検索/置換
142tTree* strncmp_tTree (tTree* pp, const char* key, int len, int no);
143tTree* strncasecmp_tTree(tTree* pp, const char* key, int len, int no);
144
145int find_match_tTree (tTree* pp, tTree* pt);
148
149int check_match_tTree (tTree* tp, tTree* tr);
151
152int replace_tTree_node(tTree* pp, tTree* pt);
153void _copy_tTree_byctrl (tTree* pt);
154void _clear_tTree_ctrl (tTree* pp);
155
157#define set_value_tTree(p, t) replace_tTree_node((p), (t))
158
159// 補助的関数
160tTree* _next_strncmp_vertical_tTree (tTree* pp, const char* key, int len, int no, int* nn);
161tTree* _next_strncasecmp_vertical_tTree(tTree* pp, const char* key, int len, int no, int* nn);
162
163tTree* _next_strncmp_horizon_tTree (tTree* pp, const char* key, int len, int no, int* nn);
164tTree* _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型サポートヘッダ
Tiny List 構造ライブラリヘッダ
void del_delete_node_tTree(tTree **pp)
ctrl==TREE_DELETE_NODE を削除する.
Definition ttree.cpp:534
tTree * _next_strncasecmp_horizon_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索
Definition ttree.cpp:1700
tTree * free_tTree_node(tTree *node)
ツリーノードの解放.解放されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
Definition ttree.cpp:344
tTree * new_tTree_anchor_node(void)
ツリー用の ANCHORノードを動的に生成.
Definition ttree.cpp:37
tTree * del_tTree_node(tTree **node)
ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
Definition ttree.cpp:400
tTree * _next_strncmp_vertical_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.vertical は縦方向探索
Definition ttree.cpp:1631
Buffer get_value_tTree(tTree *pp, tTree *pt)
同じパターンの枝を検索し,一致した枝があれば,その枝の最後のノードの値を返す.
Definition ttree.cpp:1600
tTree * add_tTree_node(tTree *pp, tTree *node)
ツリー ppへノード nodeを末っ子として追加.
Definition ttree.cpp:97
void exchange_tTree(tTree *tl, tTree *tt)
ツリー tlと ツリー ttを交換する.
Definition ttree.cpp:968
tTree * cmp_sisters_tTree(tTree *tp, tTree *tr)
tpの姉妹ノードが trの姉妹ノードと同じキー値を持っているかどうかを検査する.
Definition ttree.cpp:1274
void adjust_tTree_depth(tTree *pp)
指定したノード ppを基準にして,木の深さを測り直す
Definition ttree.cpp:1016
tTree * add_tTree_node_byBuffer(tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
Definition ttree.cpp:175
void print_tTree(FILE *fp, tTree *pp)
ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する.
Definition ttree.cpp:1102
tTree * strncmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ
Definition ttree.cpp:1190
tTree * strncasecmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ.大文字小文字を無視する.
Definition ttree.cpp:1226
tList tTree
Definition ttree.h:47
void del_all_tTree(tTree **pp)
ツリーの全ノードの削除.ポインタ ppのノードを含むツリー全体を削除する.
Definition ttree.cpp:752
void del_non_keep_node_tTree(tTree **pp)
ctrl==TREE_KEEP_NODE 以外を削除する.
Definition ttree.cpp:580
tTree * insert_tTree_node_bydata(tTree *pp, tList_data ldat)
ノードをつくり出し,それを ppの子ノード(長子)として追加.
Definition ttree.cpp:259
tTree * del_tTree_anchor_node(tTree *node)
ANCHORノードを削除して,TOP(長女)へのポインターを返す.
Definition ttree.cpp:53
tTree * del_tTree(tTree **pp)
指定したノード以下のツリーを削除する.
Definition ttree.cpp:628
int replace_tTree_node(tTree *pp, tTree *pt)
同じパターンの枝を検索し,ptのノードの属性で置き換える.
Definition ttree.cpp:1515
int count_tTree(tTree *pp)
ツリーの ppノード以降のノードの数を数える.
Definition ttree.cpp:1151
tTree * del_sisters_children_tTree(tTree **pp)
指定したノードの姉妹ツリー,子ツリーを削除する.
Definition ttree.cpp:718
tTree * dup_merge_tTree(tTree *pp, tTree *tp)
ツリー ppの直下にツリー tpを複製する.
Definition ttree.cpp:858
tTree * del_sisters_tTree(tTree **pp)
指定したノード以下のXMLツリー(ppの姉妹を含む)を削除する.
Definition ttree.cpp:688
tTree * insert_tTree_node_byBuffer(tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
ノードを長子としてリストに追加.
Definition ttree.cpp:298
tTree * insert_tTree_node(tTree *pp, tTree *pt)
ツリー ppへノード nodeを長子として追加.
Definition ttree.cpp:225
tTree * _next_strncmp_horizon_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索
Definition ttree.cpp:1654
tTree * del_children_tTree(tTree **pp)
指定したノードの子ツリーを削除する.指定したノードは削除しない.
Definition ttree.cpp:666
tTree * add_tTree(tTree *pp, tTree *pt)
ツリー tpへ ツリー ttを追加.
Definition ttree.cpp:778
int check_match_tTree(tTree *tp, tTree *tr)
tpが trと同じパターン(キー値)を持っているかどうかを検査する.
Definition ttree.cpp:1325
void _del_delete_node_tTree(tTree **pp)
Definition ttree.cpp:551
tTree * insert_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを長子としてリストに追加.
Definition ttree.cpp:325
void _clear_tTree_ctrl(tTree *pp)
ppツリーの ctrlをクリアする.
Definition ttree.cpp:1420
tList * find_match_tTree_endlist(tTree *pp, tTree *pt)
pp内で ptと同じパターンの枝を全て探して,その枝の最後のノードへの情報を返す.
Definition ttree.cpp:1446
void merge_tTree(tTree *tp, tTree *tt)
ツリー tp にツリー tt を結合する.結合後,tt の内容は壊れる(tpとノードを交換した形になる).
Definition ttree.cpp:917
void _del_non_keep_node_tTree(tTree **pp)
Definition ttree.cpp:597
tTree * div_tTree(tTree *pp)
ツリー tp から ツリー ttを分離する.
Definition ttree.cpp:822
void print_tTree_tree(FILE *fp, tTree *pp, const char *space)
ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する.
Definition ttree.cpp:1063
tTree make_tTree_node(tList_data data)
ツリー用ノードを静的に作成.
Definition ttree.cpp:74
tTree * add_tTree_node_bydata(tTree *pp, tList_data ldat)
データから Treeノードをつくり出し,それを ppの子ノード(末っ子)として追加.
Definition ttree.cpp:135
tTree * _next_strncasecmp_vertical_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.vertical は縦方向探索
Definition ttree.cpp:1677
tTree * move_tTree_node(tTree *node, tTree *pp)
nodeを現在のツリーから切り離し,ppへ移動する.
Definition ttree.cpp:425
tTree * find_tTree_end(tTree *pp)
ツリーの最終ノードを見つける.
Definition ttree.cpp:1132
tTree * add_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
Definition ttree.cpp:202
tTree * new_tTree_node(void)
ツリー用の空ノードを動的に生成.
Definition ttree.cpp:23
void _copy_tTree_byctrl(tTree *pt)
同じパターンの枝を検索し,ptのノードの属性をコピーする.
Definition ttree.cpp:1541
int replace_all_tTree_node(tTree *pp, char *key, char *src, char *dst, int len)
対象の全てのノードのノード値を dst に書き換える.
Definition ttree.cpp:499
int find_match_tTree(tTree *pp, tTree *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.
Definition ttree.cpp:1390
tList * _find_match_tTree_endlist_rcsv(tTree *pp, tTree *pt, tTree *te)
find_match_tTree_endlist() の補助関数
Definition ttree.cpp:1466