1#ifndef __JBXL_TINY_TREE_H_
2#define __JBXL_TINY_TREE_H_
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
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()
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)
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)
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))
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)
105#define dup_tTree_node(p) dup_tList_node(p)
138#define find_tTree_top(p) find_tList_top((p))
157#define set_value_tTree(p, t) replace_tTree_node((p), (t))
void del_delete_node_tTree(tTree **pp)
ctrl==TREE_DELETE_NODE を削除する.
tTree * _next_strncasecmp_horizon_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索
tTree * free_tTree_node(tTree *node)
ツリーノードの解放.解放されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
tTree * new_tTree_anchor_node(void)
ツリー用の ANCHORノードを動的に生成.
tTree * del_tTree_node(tTree **node)
ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
tTree * _next_strncmp_vertical_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.vertical は縦方向探索
Buffer get_value_tTree(tTree *pp, tTree *pt)
同じパターンの枝を検索し,一致した枝があれば,その枝の最後のノードの値を返す.
tTree * add_tTree_node(tTree *pp, tTree *node)
ツリー ppへノード nodeを末っ子として追加.
void exchange_tTree(tTree *tl, tTree *tt)
ツリー tlと ツリー ttを交換する.
tTree * cmp_sisters_tTree(tTree *tp, tTree *tr)
tpの姉妹ノードが trの姉妹ノードと同じキー値を持っているかどうかを検査する.
void adjust_tTree_depth(tTree *pp)
指定したノード ppを基準にして,木の深さを測り直す
tTree * add_tTree_node_byBuffer(tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
void print_tTree(FILE *fp, tTree *pp)
ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する.
tTree * strncmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ
tTree * strncasecmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ.大文字小文字を無視する.
void del_all_tTree(tTree **pp)
ツリーの全ノードの削除.ポインタ ppのノードを含むツリー全体を削除する.
void del_non_keep_node_tTree(tTree **pp)
ctrl==TREE_KEEP_NODE 以外を削除する.
tTree * insert_tTree_node_bydata(tTree *pp, tList_data ldat)
ノードをつくり出し,それを ppの子ノード(長子)として追加.
tTree * del_tTree_anchor_node(tTree *node)
ANCHORノードを削除して,TOP(長女)へのポインターを返す.
tTree * del_tTree(tTree **pp)
指定したノード以下のツリーを削除する.
int replace_tTree_node(tTree *pp, tTree *pt)
同じパターンの枝を検索し,ptのノードの属性で置き換える.
int count_tTree(tTree *pp)
ツリーの ppノード以降のノードの数を数える.
tTree * del_sisters_children_tTree(tTree **pp)
指定したノードの姉妹ツリー,子ツリーを削除する.
tTree * dup_merge_tTree(tTree *pp, tTree *tp)
ツリー ppの直下にツリー tpを複製する.
tTree * del_sisters_tTree(tTree **pp)
指定したノード以下のXMLツリー(ppの姉妹を含む)を削除する.
tTree * insert_tTree_node_byBuffer(tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
ノードを長子としてリストに追加.
tTree * insert_tTree_node(tTree *pp, tTree *pt)
ツリー ppへノード nodeを長子として追加.
tTree * _next_strncmp_horizon_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索
tTree * del_children_tTree(tTree **pp)
指定したノードの子ツリーを削除する.指定したノードは削除しない.
tTree * add_tTree(tTree *pp, tTree *pt)
ツリー tpへ ツリー ttを追加.
int check_match_tTree(tTree *tp, tTree *tr)
tpが trと同じパターン(キー値)を持っているかどうかを検査する.
void _del_delete_node_tTree(tTree **pp)
tTree * insert_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを長子としてリストに追加.
void _clear_tTree_ctrl(tTree *pp)
ppツリーの ctrlをクリアする.
tList * find_match_tTree_endlist(tTree *pp, tTree *pt)
pp内で ptと同じパターンの枝を全て探して,その枝の最後のノードへの情報を返す.
void merge_tTree(tTree *tp, tTree *tt)
ツリー tp にツリー tt を結合する.結合後,tt の内容は壊れる(tpとノードを交換した形になる).
void _del_non_keep_node_tTree(tTree **pp)
tTree * div_tTree(tTree *pp)
ツリー tp から ツリー ttを分離する.
void print_tTree_tree(FILE *fp, tTree *pp, const char *space)
ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する.
tTree make_tTree_node(tList_data data)
ツリー用ノードを静的に作成.
tTree * add_tTree_node_bydata(tTree *pp, tList_data ldat)
データから Treeノードをつくり出し,それを ppの子ノード(末っ子)として追加.
tTree * _next_strncasecmp_vertical_tTree(tTree *pp, const char *key, int len, int no, int *nn)
tTree 検索用補助関数.vertical は縦方向探索
tTree * move_tTree_node(tTree *node, tTree *pp)
nodeを現在のツリーから切り離し,ppへ移動する.
tTree * find_tTree_end(tTree *pp)
ツリーの最終ノードを見つける.
tTree * add_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
tTree * new_tTree_node(void)
ツリー用の空ノードを動的に生成.
void _copy_tTree_byctrl(tTree *pt)
同じパターンの枝を検索し,ptのノードの属性をコピーする.
int replace_all_tTree_node(tTree *pp, char *key, char *src, char *dst, int len)
対象の全てのノードのノード値を dst に書き換える.
int find_match_tTree(tTree *pp, tTree *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.
tList * _find_match_tTree_endlist_rcsv(tTree *pp, tTree *pt, tTree *te)
find_match_tTree_endlist() の補助関数