|
JunkBox_Lib 1.10.1
|
Tiny Tree Graph 構造ライブラリヘッダ More...


Go to the source code of this file.
Macros | |
| #define | TREE_ANCHOR_NODE JBXL_STATE_ANCHOR |
| ldat.ctrl リスト制御用 | |
| #define | TREE_NOCTRL_NODE 0 |
| 何の制御(制限)も受けていないノード.デフォルト. | |
| #define | TREE_NOCMP_NODE 100 |
| 比較対照から外すノード.通常は無条件で一致させる. | |
| #define | TREE_NOCMP_COPY_NODE 101 |
| 比較対照から外し,最後にコピー処理を行うノード.通常は無条件で一致させる. | |
| #define | TREE_COPY_NODE 102 |
| 後でコピー処理を行うノード.copy_tTree_byctrl()など. | |
| #define | TREE_NOSIS_NODE 103 |
| このノードの姉妹ノードは処理しない.一部の関数のみ有効. | |
| #define | TREE_DELETE_NODE 104 |
| 後で削除処理を行うノード. | |
| #define | TREE_KEEP_NODE 105 |
| 削除などの処理対象から外すノードに設定. | |
| #define | TREE_ALREADY_FOUND_NODE 110 |
| 検索などにおいて既に見つけたノード.見つけたことを確定したノード. | |
| #define | TREE_ALREADY_FOUND_NODE_TEMP 111 |
| 一時的に比較対照から外す場合にノード.作業中に設定. | |
| #define | del_tTree_anchor(t) del_tTree_anchor_node((t)) |
| ANCHORノードを削除して,TOP(長女)へのポインターを返す. | |
| #define | new_tTree() new_tTree_node() |
| new_tTree_node() | |
| #define | new_tTree_anchor() new_tTree_anchor_node() |
| new_tTree_anchor_node() | |
| #define | add_tTree_node_int(p, k, v) add_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0) |
| add_tTree_node_bystr() | |
| #define | add_tTree_node_str(p, k, v) add_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0) |
| add_tTree_node_bystr() | |
| #define | add_tTree_node_Buffer(p, k, v) add_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0) |
| add_tTree_node_byBuffer() | |
| #define | insert_tTree_node_int(p, k, v) insert_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0) |
| insert_tTree_node_bystr() | |
| #define | insert_tTree_node_str(p, k, v) insert_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0) |
| insert_tTree_node_bystr() | |
| #define | insert_tTree_node_Buffer(p, k, v) insert_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0) |
| insert_tTree_node_byBuffer() | |
| #define | set_tTree_node_bydata(p, k) set_tList_node_bydata((p), (k)) |
| set_tList_node_bydata() | |
| #define | set_tTree_node_bystr(p, i, l, k, v, d, s) set_tList_node_bystr((p), (i), (l), (k), (v), (d), (s)) |
| set_tList_node_bystr() | |
| #define | set_tTree_node_byBuffer(p, i, l, k, v, d, s) set_tList_node_byBuffer((p), (i), (l), (k), (v), (d), (s)) |
| set_tList_node_byBuffer() | |
| #define | set_tTree_node_int(p, k, d) set_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0) |
| set_tList_node_bystr() | |
| #define | set_tTree_node_str(p, k, d) set_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0) |
| set_tList_node_bystr() | |
| #define | set_tTree_node_Buffer(p, k, d) set_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0) |
| set_tList_node_byBuffer( | |
| #define | dup_tTree_node(p) dup_tList_node(p) |
| dup_tList_node() | |
| #define | find_tTree_top(p) find_tList_top((p)) |
| find_tList_top() | |
| #define | set_value_tTree(p, t) replace_tTree_node((p), (t)) |
| replace_tTree_node() | |
Typedefs | |
| typedef tList | tTree |
Functions | |
| tTree * | new_tTree_node (void) |
| ツリー用の空ノードを動的に生成. | |
| tTree * | new_tTree_anchor_node (void) |
| ツリー用の ANCHORノードを動的に生成. | |
| tTree | make_tTree_node (tList_data data) |
| ツリー用ノードを静的に作成. | |
| tTree * | del_tTree_anchor_node (tTree *node) |
| ANCHORノードを削除して,TOP(長女)へのポインターを返す. | |
| tTree * | add_tTree_node (tTree *pp, tTree *node) |
| ツリー ppへノード nodeを末っ子として追加. | |
| tTree * | add_tTree_node_bydata (tTree *pp, tList_data ldat) |
| データから Treeノードをつくり出し,それを ppの子ノード(末っ子)として追加. | |
| tTree * | add_tTree_node_bystr (tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz) |
| ノードを末っ子としてリストに追加. | |
| tTree * | add_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 * | insert_tTree_node_bydata (tTree *pp, tList_data ldat) |
| ノードをつくり出し,それを ppの子ノード(長子)として追加. | |
| tTree * | insert_tTree_node_bystr (tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz) |
| ノードを長子としてリストに追加. | |
| tTree * | insert_tTree_node_byBuffer (tTree *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz) |
| ノードを長子としてリストに追加. | |
| tTree * | move_tTree_node (tTree *node, tTree *pp) |
| nodeを現在のツリーから切り離し,ppへ移動する. | |
| int | replace_all_tTree_node (tTree *pp, char *key, char *src, char *dst, int len) |
| 対象の全てのノードのノード値を dst に書き換える. | |
| tTree * | del_tTree_node (tTree **node) |
| ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める) | |
| tTree * | free_tTree_node (tTree *node) |
| ツリーノードの解放.解放されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める) | |
| void | del_delete_node_tTree (tTree **pp) |
| ctrl==TREE_DELETE_NODE を削除する. | |
| void | _del_delete_node_tTree (tTree **pp) |
| void | del_non_keep_node_tTree (tTree **pp) |
| ctrl==TREE_KEEP_NODE 以外を削除する. | |
| void | _del_non_keep_node_tTree (tTree **pp) |
| tTree * | del_tTree (tTree **pp) |
| 指定したノード以下のツリーを削除する. | |
| void | del_all_tTree (tTree **pp) |
| ツリーの全ノードの削除.ポインタ ppのノードを含むツリー全体を削除する. | |
| tTree * | del_children_tTree (tTree **pp) |
| 指定したノードの子ツリーを削除する.指定したノードは削除しない. | |
| tTree * | del_sisters_tTree (tTree **pp) |
| 指定したノード以下のXMLツリー(ppの姉妹を含む)を削除する. | |
| tTree * | del_sisters_children_tTree (tTree **pp) |
| 指定したノードの姉妹ツリー,子ツリーを削除する. | |
| void | adjust_tTree_depth (tTree *pp) |
| 指定したノード ppを基準にして,木の深さを測り直す | |
| void | print_tTree (FILE *fp, tTree *pp) |
| ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する. | |
| void | print_tTree_tree (FILE *fp, tTree *pp, const char *space) |
| ツリーの表示.ポインタ ノードのキー部のバッファをfpに表示する. | |
| tTree * | add_tTree (tTree *pp, tTree *pt) |
| ツリー tpへ ツリー ttを追加. | |
| tTree * | div_tTree (tTree *pp) |
| ツリー tp から ツリー ttを分離する. | |
| tTree * | dup_merge_tTree (tTree *pp, tTree *tp) |
| ツリー ppの直下にツリー tpを複製する. | |
| void | merge_tTree (tTree *tp, tTree *tt) |
| ツリー tp にツリー tt を結合する.結合後,tt の内容は壊れる(tpとノードを交換した形になる). | |
| void | exchange_tTree (tTree *tl, tTree *tt) |
| ツリー tlと ツリー ttを交換する. | |
| int | count_tTree (tTree *pp) |
| ツリーの ppノード以降のノードの数を数える. | |
| tTree * | find_tTree_end (tTree *pp) |
| ツリーの最終ノードを見つける. | |
| tTree * | strncmp_tTree (tTree *pp, const char *key, int len, int no) |
| ツリーノードのキー値のサーチ | |
| tTree * | strncasecmp_tTree (tTree *pp, const char *key, int len, int no) |
| ツリーノードのキー値のサーチ.大文字小文字を無視する. | |
| int | find_match_tTree (tTree *pp, tTree *pt) |
| ツリー pp内で ツリー ptと同じパターンの枝を探す. | |
| tList * | find_match_tTree_endlist (tTree *pp, tTree *pt) |
| pp内で ptと同じパターンの枝を全て探して,その枝の最後のノードへの情報を返す. | |
| tList * | _find_match_tTree_endlist_rcsv (tTree *pp, tTree *pt, tTree *te) |
| find_match_tTree_endlist() の補助関数 | |
| int | check_match_tTree (tTree *tp, tTree *tr) |
| tpが trと同じパターン(キー値)を持っているかどうかを検査する. | |
| tTree * | cmp_sisters_tTree (tTree *tp, tTree *tr) |
| tpの姉妹ノードが trの姉妹ノードと同じキー値を持っているかどうかを検査する. | |
| int | replace_tTree_node (tTree *pp, tTree *pt) |
| 同じパターンの枝を検索し,ptのノードの属性で置き換える. | |
| void | _copy_tTree_byctrl (tTree *pt) |
| 同じパターンの枝を検索し,ptのノードの属性をコピーする. | |
| void | _clear_tTree_ctrl (tTree *pp) |
| ppツリーの ctrlをクリアする. | |
| Buffer | get_value_tTree (tTree *pp, tTree *pt) |
| 同じパターンの枝を検索し,一致した枝があれば,その枝の最後のノードの値を返す. | |
| tTree * | _next_strncmp_vertical_tTree (tTree *pp, const char *key, int len, int no, int *nn) |
| tTree 検索用補助関数.vertical は縦方向探索 | |
| tTree * | _next_strncasecmp_vertical_tTree (tTree *pp, const char *key, int len, int no, int *nn) |
| tTree 検索用補助関数.vertical は縦方向探索 | |
| tTree * | _next_strncmp_horizon_tTree (tTree *pp, const char *key, int len, int no, int *nn) |
| tTree 検索用補助関数.horizon は擬似的な横方向探索 | |
| tTree * | _next_strncasecmp_horizon_tTree (tTree *pp, const char *key, int len, int no, int *nn) |
| tTree 検索用補助関数.horizon は擬似的な横方向探索 | |
| #define add_tTree_node_Buffer | ( | p, | |
| k, | |||
| v ) add_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0) |
| #define add_tTree_node_int | ( | p, | |
| k, | |||
| v ) add_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0) |
| #define add_tTree_node_str | ( | p, | |
| k, | |||
| v ) add_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0) |
| #define del_tTree_anchor | ( | t | ) | del_tTree_anchor_node((t)) |
| #define dup_tTree_node | ( | p | ) | dup_tList_node(p) |
| #define find_tTree_top | ( | p | ) | find_tList_top((p)) |
tList* find_tTree_top(tList* p) ツリーのトップ(ルート)を見つける
| p | 検索するツリーの一部へのポインタ |
| #define insert_tTree_node_Buffer | ( | p, | |
| k, | |||
| v ) insert_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0) |
| #define insert_tTree_node_int | ( | p, | |
| k, | |||
| v ) insert_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0) |
| #define insert_tTree_node_str | ( | p, | |
| k, | |||
| v ) insert_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0) |
| #define new_tTree | ( | ) | new_tTree_node() |
| #define new_tTree_anchor | ( | ) | new_tTree_anchor_node() |
| #define set_tTree_node_Buffer | ( | p, | |
| k, | |||
| d ) set_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0) |
| #define set_tTree_node_byBuffer | ( | p, | |
| i, | |||
| l, | |||
| k, | |||
| v, | |||
| d, | |||
| s ) set_tList_node_byBuffer((p), (i), (l), (k), (v), (d), (s)) |
| #define set_tTree_node_bydata | ( | p, | |
| k ) set_tList_node_bydata((p), (k)) |
| #define set_tTree_node_bystr | ( | p, | |
| i, | |||
| l, | |||
| k, | |||
| v, | |||
| d, | |||
| s ) set_tList_node_bystr((p), (i), (l), (k), (v), (d), (s)) |
| #define set_tTree_node_int | ( | p, | |
| k, | |||
| d ) set_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0) |
| #define set_tTree_node_str | ( | p, | |
| k, | |||
| d ) set_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0) |
| #define set_value_tTree | ( | p, | |
| t ) replace_tTree_node((p), (t)) |
| #define TREE_ALREADY_FOUND_NODE 110 |
Definition at line 59 of file ttree.h.
Referenced by check_match_tTree(), check_match_xml(), cmp_sisters_tTree(), and cmp_sisters_xml().
| #define TREE_ANCHOR_NODE JBXL_STATE_ANCHOR |
アンカーノード
Definition at line 51 of file ttree.h.
Referenced by add_tTree_node(), del_delete_node_tTree(), del_non_keep_node_tTree(), del_tTree_anchor_node(), free_tTree_node(), and new_tTree_anchor_node().
| #define TREE_COPY_NODE 102 |
Definition at line 55 of file ttree.h.
Referenced by _copy_tTree_byctrl().
| #define TREE_DELETE_NODE 104 |
Definition at line 57 of file ttree.h.
Referenced by _del_delete_node_tTree().
| #define TREE_KEEP_NODE 105 |
Definition at line 58 of file ttree.h.
Referenced by _del_non_keep_node_tTree().
| #define TREE_NOCMP_COPY_NODE 101 |
Definition at line 54 of file ttree.h.
Referenced by _copy_tTree_byctrl(), cmp_sisters_tTree(), cmp_sisters_xml(), and set_xml_end_node().
| #define TREE_NOCMP_NODE 100 |
Definition at line 53 of file ttree.h.
Referenced by cmp_sisters_tTree(), cmp_sisters_xml(), get_xml_content(), and get_xml_content_list().
| #define TREE_NOCTRL_NODE 0 |
Definition at line 52 of file ttree.h.
Referenced by _clear_tTree_ctrl().
| #define TREE_NOSIS_NODE 103 |
Definition at line 56 of file ttree.h.
Referenced by _json_to_Buffer(), dup_merge_tTree(), json_inverse_parse(), json_inverse_parse_opt(), print_tTree(), and print_tTree_tree().
| void _clear_tTree_ctrl | ( | tTree * | pp | ) |
void _clear_tTree_ctrl(tTree* pp)
ppツリーの ctrlをクリアする. find_match_tTree(tTree* pp, tTree* pt) の補助関数
Definition at line 1420 of file ttree.c.
References _clear_tTree_ctrl(), and TREE_NOCTRL_NODE.
Referenced by _clear_tTree_ctrl(), _find_match_tTree_endlist_rcsv(), _find_match_xml_endlist_rcsv(), find_match_tTree(), find_match_tTree_endlist(), find_match_xml(), find_match_xml_end_node(), find_match_xml_endlist(), get_xml_content(), get_xml_node(), and set_xml_end_node().


| void _copy_tTree_byctrl | ( | tTree * | pt | ) |
void _copy_tTree_byctrl(tTree* pt)
replace_tTree_node() の補助関数.
ツリー ptにおいて,pt->ctrl が TREE_COPY_NODE または TREE_NOCMP_COPY_NODE の場合, pt->altp のノードへ ptの属性をコピーする.
pt->ldat.sz には正確に pt->ldat.ptrのサイズが設定されている必要がある.
Definition at line 1541 of file ttree.c.
References _copy_tTree_byctrl(), del_all_tList(), dup_Buffer(), dup_tList(), free_Buffer(), TREE_COPY_NODE, and TREE_NOCMP_COPY_NODE.
Referenced by _copy_tTree_byctrl(), replace_tTree_node(), and set_xml_end_node().


| void _del_delete_node_tTree | ( | tTree ** | pp | ) |
Definition at line 551 of file ttree.c.
References _del_delete_node_tTree(), del_tTree_node(), and TREE_DELETE_NODE.
Referenced by _del_delete_node_tTree(), and del_delete_node_tTree().


| void _del_non_keep_node_tTree | ( | tTree ** | pp | ) |
Definition at line 597 of file ttree.c.
References _del_non_keep_node_tTree(), del_tTree_node(), and TREE_KEEP_NODE.
Referenced by _del_non_keep_node_tTree(), and del_non_keep_node_tTree().


tList* _find_match_tTree_endlist_rcsv(tTree* pp, tTree* pt, tTree* te)
find_match_tTree_endlist() の補助関数
Definition at line 1466 of file ttree.c.
References _clear_tTree_ctrl(), _find_match_tTree_endlist_rcsv(), check_match_tTree(), insert_tList(), and new_tList_node().
Referenced by _find_match_tTree_endlist_rcsv(), and find_match_tTree_endlist().


tTree* _next_strncasecmp_horizon_tTree (tTree* pp, const char* key, int len, int no, int* nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索(完全な横方向探索ではない)
Definition at line 1700 of file ttree.c.
References _next_strncasecmp_horizon_tTree(), ex_strncasecmp(), and len.
Referenced by _next_strncasecmp_horizon_tTree().


| tTree * _next_strncasecmp_vertical_tTree | ( | tTree * | pp, |
| const char * | key, | ||
| int | len, | ||
| int | no, | ||
| int * | nn ) |
tTree* _next_strncasecmp_vertical_tTree(tTree* pp, const char* key, int len, int no, int* nn)
tTree 検索用補助関数.vertical は縦方向探索
Definition at line 1677 of file ttree.c.
References _next_strncasecmp_vertical_tTree(), ex_strncasecmp(), and len.
Referenced by _next_strncasecmp_vertical_tTree(), and strncasecmp_tTree().


tTree* _next_strncmp_horizon_tTree (tTree* pp, const char* key, int len, int no, int* nn)
tTree 検索用補助関数.horizon は擬似的な横方向探索(完全な横方向探索ではない)
Definition at line 1654 of file ttree.c.
References _next_strncmp_horizon_tTree(), ex_strncmp(), and len.
Referenced by _next_strncmp_horizon_tTree().


tTree* _next_strncmp_vertical_tTree(tTree* pp, const char* key, int len, int no, int* nn)
tTree 検索用補助関数.vertical は縦方向探索
Definition at line 1631 of file ttree.c.
References _next_strncmp_vertical_tTree(), ex_strncmp(), and len.
Referenced by _next_strncmp_vertical_tTree(), and strncmp_tTree().


tTree* add_tTree(tTree* tp, tTree* tt)
ツリー tpへ ツリー ttを追加.
add_tTree_node() との相違は,add_tTree()が先頭(tt)の姉妹ノードもツリー tpに追加する点にある.
| tp | 追加するツリーの親となるノードへのポインタ. |
| tt | 追加するツリーへのポインタ. |
Definition at line 778 of file ttree.c.
References adjust_tTree_depth().
Referenced by dup_merge_tTree(), join_json(), json_insert_child(), and merge_tTree().


tTree* add_tTree_node(tTree* pp, tTree* node)
ツリー ppへノード nodeを追加.ポインタ ppが指すノードの子(末っ子)ノードとして node(そのもの)を追加する.
node が子ノードを持つ場合は,それも追加される.
node が姉妹ノードを持っていてもそれらは無視する(処理しない).
| pp | 追加するノードの親となるノードへのポインタ. |
| node | 追加するノードへのポインタ.node->next 以下がツリーでも良い. |
Definition at line 97 of file ttree.c.
References adjust_tTree_depth(), and TREE_ANCHOR_NODE.
Referenced by json_array_parse(), and json_parse_prop().


| tTree * add_tTree_node_byBuffer | ( | tTree * | pp, |
| int | id, | ||
| int | lv, | ||
| Buffer | key, | ||
| Buffer | val, | ||
| void * | ptr, | ||
| int | sz ) |
tTree* add_tTree_node_byBuffer(tTree* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz)
データからノードをつくり出し,それを末っ子としてリストに追加.
リストポインタ ppが指すノードの後につくり出した ノードを挿入する.
| pp | 追加する場所の手前のノードへのポインタ. |
| id | 追加するデータ. |
| lv | 追加するデータ. |
| key | 追加するデータ. 複製 |
| val | 追加するデータ. 複製 |
| ptr | 汎用データへのポインタ 複製 |
| sz | *ptr のサイズ |
Definition at line 175 of file ttree.c.
References add_tTree_node_bydata(), and make_tList_data().

| tTree * add_tTree_node_bydata | ( | tTree * | pp, |
| tList_data | ldat ) |
tTree* add_tTree_node_bydata(tTree* pp, tList_data ldat)
データから Treeノードをつくり出し,それを ppの子ノード(末っ子)として追加.
ldat は指定されたものがそのまま使用される.
| pp | 追加するノードの親となるノードへのポインタ. |
| ldat | 追加するノードデータ.このデータがそのまま使用される. |
Definition at line 135 of file ttree.c.
References new_tTree_node().
Referenced by add_tTree_node_byBuffer(), and add_tTree_node_bystr().


| tTree * add_tTree_node_bystr | ( | tTree * | pp, |
| int | id, | ||
| int | lv, | ||
| const char * | key, | ||
| const char * | val, | ||
| void * | ptr, | ||
| int | sz ) |
tTree* add_tTree_node_bystr(tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz)
データからノードをつくり出し,それを末っ子としてリストに追加.
リストポインタ ppが指すノードの後につくり出した ノードを挿入する.
| pp | 追加する場所の手前のノードへのポインタ. |
| id | 追加するデータ. |
| lv | 追加するデータ. |
| key | 追加するデータ. 複製 |
| val | 追加するデータ. 複製 |
| ptr | 汎用データへのポインタ 複製 |
| sz | *ptr のサイズ |
Definition at line 202 of file ttree.c.
References add_tTree_node_bydata(), and make_tList_data_bystr().
Referenced by add_xml_content_node(), add_xml_node(), bvh_parse_hierarchy(), json_append_array_int_val(), json_append_array_real_val(), json_append_array_str_val(), json_append_obj_int_val(), json_append_obj_real_val(), json_append_obj_str_val(), llsd_bin_main_parse(), and xml_main_parse().


| void adjust_tTree_depth | ( | tTree * | pp | ) |
void adjust_tTree_depth(tTree* pp)
指定したノード ppを基準にして,木の深さを測り直す
| pp | 基準となるノードへのポインタ |
Definition at line 1016 of file ttree.c.
References adjust_tTree_depth().
Referenced by add_tTree(), add_tTree_node(), adjust_tTree_depth(), close_xml(), div_tTree(), exchange_tTree(), free_tTree_node(), insert_tTree_node(), merge_tTree(), move_tTree_node(), replace_tTree_node(), and set_xml_end_node().


int check_match_tTree(tTree* tp, tTree* tr)
ツリー tpが ツリー trと同じパターン(キー値)を持っているかどうかを検査する.
tp のトップと tr のトップはキー値が一致している必要がある.一致していなければ,同じパターンは無しとする.
ただし,tr->ctrl が TREE_NOCMP_NODE または TREE_NOCMP_COPY_NODE のノードは比べない(常に一致とする).
一度見つけた tpの枝の最後のノードに対しては ctrlを TREE_ALREADY_FOUND_NODE を設定するので,続けてチェックする 場合などは ctrl をクリアする必要がある.
もし同じツリーパターンがある場合,trの各ノードの altpには,一番最初に見つかった対応する tpの各ノードへのポインタが格納される.
| tp | 検索対象のツリー |
| tr | 検索パターンのツリー |
| TRUE | tp中に trと同じいツリーパターンが存在する.trの各ノードの altpには,一番最初に見つかった対応する tpの各ノードへのポインタが格納される. |
| FALSE | tpに同じツリーパターンは無い.この場合,trのaltpの値は不定となる. |
Definition at line 1325 of file ttree.c.
References check_match_tTree(), cmp_sisters_tTree(), FALSE, find_tList_end(), TREE_ALREADY_FOUND_NODE, and TRUE.
Referenced by _find_match_tTree_endlist_rcsv(), check_match_tTree(), and find_match_tTree().


tTree* cmp_sisters_tTree(tTree* tp, tTree* tr)
ノードtpの姉妹ノードが ノードtrの姉妹ノードと同じパターン(キー値を比較)を持っているかどうかを検査する.
ただし,tr->ctrl が TREE_NOCMP_NODE または TREE_NOCMP_COPY_NODE のノードは比べない(常に一致とする).
また tp->ctrl が TREE_ALREADY_FOUND_NODE の場合は,常に一致しない.
もし同じノードパターンがある場合,trの各ノードの altpには,対応する tpの各ノードへのポインタが格納される.
| tp | 比べる姉妹ノードの長女ノード |
| tr | 探す姉妹ノードパターンの長女ノード |
| NULL | tpに同じ姉妹パターンは無い.この場合,trのaltpの値は不定となる. |
Definition at line 1274 of file ttree.c.
References TREE_ALREADY_FOUND_NODE, TREE_NOCMP_COPY_NODE, and TREE_NOCMP_NODE.
Referenced by check_match_tTree().

| int count_tTree | ( | tTree * | pp | ) |
ツリーの ppノード以降のノードの数を数える.
| pp | 数え始めるノードへのポインタ.姉妹ノードも数える. |
Definition at line 1151 of file ttree.c.
References count_tTree().
Referenced by count_tTree(), json_inverse_parse(), json_inverse_parse_opt(), and xml_inverse_parse().


| void del_all_tTree | ( | tTree ** | pp | ) |
void del_all_tTree(tTree** pp)
ツリーの全ノードの削除.ポインタ ppのノードを含むツリー全体を削除する.
pp はツリー中であれば,どこを指していても良い.
| *pp | 削除を開始するノードへのポインタ.ツリー中であれば,どこを指していても良い. |
Definition at line 752 of file ttree.c.
References del_tTree().

tTree* del_children_tTree(tTree** pp)
指定したノードの子ツリーを削除する.指定したノードは削除しない.
| *pp | 削除する子ツリーの親ノード |
Definition at line 666 of file ttree.c.
References del_sisters_children_tTree().

| void del_delete_node_tTree | ( | tTree ** | pp | ) |
void del_delete_node_tTree(tTree** pp)
ctrl または ctrl_alt が TREE_DELETE_NODE の ノードを削除する
pp は アンカーノードである必要がある. アンカーノードでない場合,*ppが削除されるとリストを見失う.
Definition at line 534 of file ttree.c.
References _del_delete_node_tTree(), PRINT_MESG, and TREE_ANCHOR_NODE.

| void del_non_keep_node_tTree | ( | tTree ** | pp | ) |
void del_non_keep_node_tTree(tTree** pp)
ctrl または ctrl_alt が TREE_KEEP_NODE 以外のノードを削除する
pp は アンカーノードである必要がある. アンカーノードでない場合,*ppが削除されるとリストを見失う.
Definition at line 580 of file ttree.c.
References _del_non_keep_node_tTree(), PRINT_MESG, and TREE_ANCHOR_NODE.

tTree* del_sisters_children_tTree(tTree** pp)
指定したノードの姉妹ツリー,子ツリーを削除する.
指定したノードも削除する.
| *pp | 削除するツリーの起点ノード |
Definition at line 718 of file ttree.c.
References clear_tList_data(), and del_sisters_children_tTree().
Referenced by del_children_tTree(), del_sisters_children_tTree(), del_sisters_tTree(), and del_tTree().


tTree* del_sisters_tTree(tTree** pp)
指定したノード以下のXMLツリー(ppの姉妹を含む)を削除する.
| [in,out] | *pp | 削除するツリーの先頭ノード.削除後は NULLになる. |
Definition at line 688 of file ttree.c.
References del_sisters_children_tTree().

tTree* del_tTree(tTree** pp)
指定したノード以下のツリーを削除する. 姉妹ノードは削除しない.
| [in] | *pp | 削除するツリーの先頭ノード |
| [out] | *pp | NULL |
Definition at line 628 of file ttree.c.
References clear_tList_data(), and del_sisters_children_tTree().
Referenced by clear_BVHData(), and del_all_tTree().


Definition at line 53 of file ttree.c.
References free_tTree_node(), and TREE_ANCHOR_NODE.
Referenced by dup_merge_tTree().


tTree* del_tTree_node(tTree** node)
ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
node は動的に確保された変数でなければならない.
| *node | 削除するノードへのポインタ. |
Definition at line 400 of file ttree.c.
References free_tTree_node().
Referenced by _del_delete_node_tTree(), and _del_non_keep_node_tTree().


tTree* div_tTree(tTree* tp, tTree* tt)
ツリー tp から ツリー ttを分離する.
| tt | ツリーへの分離ポイント. |
Definition at line 822 of file ttree.c.
References adjust_tTree_depth().
Referenced by merge_tTree().


tTree* dup_merge_tTree(tTree* pp, tTree* tp)
ツリー ppの直下に(Yunger Sisterとして)ツリー tpを複製する.
pp がNULLの場合は,ツリーの深さは調整されない
| pp | 複製されたツリーのトップとなるノード |
| tp | 複製するツリー |
Definition at line 858 of file ttree.c.
References add_tTree(), del_tTree_anchor_node(), dup_merge_tTree(), dup_tList_node(), new_tTree_anchor_node(), and TREE_NOSIS_NODE.
Referenced by dup_merge_tTree(), and dup_merge_xml().


void exchange_tTree(tTree* tl, tTree* tt)
ツリー tlと ツリー ttを交換する.
| tl | 交換対象のツリー |
| tt | 交換対象のツリー |
Definition at line 968 of file ttree.c.
References adjust_tTree_depth().
Referenced by merge_tTree().


int find_match_tTree(tTree* pp, tTree* pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.
同じパターンの探索では キー値のみを比較し,ノード値は比較しない.
ただし,pt->ctrl が TREE_NOCMP_NODE または TREE_NOCMP_COPY_NODE のノードは比べない(常に一致とする).
もし同じツリーパターンがある場合,trの各ノードの altpには,一番最初に見つかった対応する ppの各ノードへ のポインタが格納される.
check_match_tTree() との違い.
| pp | 検索対象のツリー |
| pt | 検索パターンのツリー |
| TRUE | pp中に pt同じいツリーパターンが存在する.ptの各ノードの altpには,一番最初に見つかった対応する ppの各ノードへのポインタが格納される. |
| FALSE | ppに同じツリーパターンは無い.この場合,ptのaltpの値は不定となる. |
Definition at line 1390 of file ttree.c.
References _clear_tTree_ctrl(), check_match_tTree(), FALSE, find_match_tTree(), and TRUE.
Referenced by find_match_tTree(), find_match_xml_end_node(), get_value_tTree(), and replace_tTree_node().


tList* find_match_tTree_endlist(tTree* pp, tTree* pt)
ツリー pp内で ツリー ptと同じパターンの枝を全て探して,その枝の最後のノードへの情報をリストにして返す.
該当ノードへのポインタは 返された各リストのaltp が保持している.
比較では キー値のみを比較し,ノード値は比較しない. また,pt->ctrl が TREE_NOCMP_NODE または TREE_NOCMP_COPY_NODE のノードは比べない(常に一致とする).
| pp | 検索対象のツリー |
| pt | 検索パターンのツリー |
Definition at line 1446 of file ttree.c.
References _clear_tTree_ctrl(), _find_match_tTree_endlist_rcsv(), and find_tTree_end().

tTree* find_tTree_end(tTree* pp)
ツリーの最終ノードを見つける.最終ノード:最後に追加されたノード.
Definition at line 1132 of file ttree.c.
Referenced by find_match_tTree_endlist(), and get_value_tTree().

tTree* free_tTree_node(tTree* node)
ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
Definition at line 344 of file ttree.c.
References adjust_tTree_depth(), clear_tList_data(), and TREE_ANCHOR_NODE.
Referenced by del_tTree_anchor_node(), and del_tTree_node().


Buffer get_value_tTree(tTree* pp, tTree* pt)
ツリー pp内で ツリー ptと同じパターンの枝を検索し,ppに一致したパターンの 枝があれば,その枝の最後のノードの値を返す.
| pp | 検索対象のツリー |
| pt | 検索するパターン |
Definition at line 1600 of file ttree.c.
References dup_Buffer(), find_match_tTree(), find_tTree_end(), and init_Buffer().

tTree* insert_tTree_node(tTree* pp, tTree* node)
ツリー ppへノード nodeを追加.ポインタ ppが指すノードの子(長子)ノードとして node(そのもの)を追加する.
node が子ノードを持つ場合は,それも追加される.
node が姉妹ノードを持っていてもそれらは無視する(処理しない).
| pp | 追加するノードの親となるノードへのポインタ. |
| node | 追加するノードへのポインタ.node->next 以下がツリーでも良い. |
Definition at line 225 of file ttree.c.
References adjust_tTree_depth().

| tTree * insert_tTree_node_byBuffer | ( | tTree * | pp, |
| int | id, | ||
| int | lv, | ||
| Buffer | key, | ||
| Buffer | val, | ||
| void * | ptr, | ||
| int | sz ) |
tTree* insert_tTree_node_byBuffer(tTree* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz)
データからノードをつくり出し,それを長子としてリストに追加.
リストポインタ ppが指すノードの後につくり出した ノードを挿入する.
| pp | 追加する場所の手前のノードへのポインタ. |
| id | 追加するデータ. |
| lv | 追加するデータ. |
| key | 追加するデータ. 複製 |
| val | 追加するデータ. 複製 |
| ptr | 汎用データへのポインタ 複製 |
| sz | *ptr のサイズ |
Definition at line 298 of file ttree.c.
References insert_tTree_node_bydata(), and make_tList_data().

| tTree * insert_tTree_node_bydata | ( | tTree * | pp, |
| tList_data | ldat ) |
tTree* insert_tTree_node_bydata(tTree* pp, tList_data ldat)
データから tTreeノードをつくり出し,それを ppの子ノード(長子)として追加.
ldat は指定されたものがそのまま使用される.
| pp | 追加するノードの親となるノードへのポインタ. |
| ldat | 追加するノードデータ.このデータがそのまま使用される. |
Definition at line 259 of file ttree.c.
References new_tTree_node().
Referenced by insert_tTree_node_byBuffer(), and insert_tTree_node_bystr().


| tTree * insert_tTree_node_bystr | ( | tTree * | pp, |
| int | id, | ||
| int | lv, | ||
| const char * | key, | ||
| const char * | val, | ||
| void * | ptr, | ||
| int | sz ) |
データからノードをつくり出し,それを長子としてリストに追加.
リストポインタ ppが指すノードの後につくり出した ノードを挿入する.
| pp | 追加する場所の手前のノードへのポインタ. |
| id | 追加するデータ. |
| lv | 追加するデータ. |
| key | 追加するデータ. 複製 |
| val | 追加するデータ. 複製 |
| ptr | 汎用データへのポインタ 複製 |
| sz | *ptr のサイズ |
Definition at line 325 of file ttree.c.
References insert_tTree_node_bydata(), and make_tList_data_bystr().
Referenced by insert_xml_node().


| tTree make_tTree_node | ( | tList_data | data | ) |
tTree make_tTree_node(tList_data data)
ツリー用ノードを静的に作成.
| data | ノードデータ |
Definition at line 74 of file ttree.c.
References JBXL_NORMAL.
void merge_tTree(tTree* tp, tTree* tt)
ツリー tp にツリー tt を結合する.結合後,tt の内容は壊れる(tpとノードを交換した形になる).
tt が tpの一部と同じ構造(キー値)を持つ場合,末端ノードは ttのノードで置き換える.tp に存在しない枝は追加される.
ツリーの深さは tpを深さを元に再計算される.
| [in,out] | tp | in: tt の結合ポイント.out: 結合後のツリー. |
| [in,out] | tt | in: 結合するツリー.out: 内容は破壊される.要注意 |
Definition at line 917 of file ttree.c.
References add_tTree(), adjust_tTree_depth(), div_tTree(), exchange_tTree(), and merge_tTree().
Referenced by merge_tTree().


tTree* move_tTree_node(tTree* pp, tTree* node)
nodeを現在のツリーから切り離し,ppへ移動する.
元のツリーに於いて,nodeが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
移動に於いては,node が姉妹ノードを持っていてもそれらは無視する.
nodeを削除しないで del_tTree_node(), add_tTree_node() を実行するようなもの.
| pp | 移動先で親となるノードへのポインタ. |
| node | 移動するノードへのポインタ.node->next 以下がツリーでも良い. |
Definition at line 425 of file ttree.c.
References adjust_tTree_depth().

| tTree * new_tTree_anchor_node | ( | void | ) |
Definition at line 37 of file ttree.c.
References init_tList_data(), JBXL_STATE_ANCHOR, and TREE_ANCHOR_NODE.
Referenced by dup_merge_tTree(), and xml_parse_seq().


| tTree * new_tTree_node | ( | void | ) |
tTree* new_tTree_node(void)
ツリー用の空ノードを動的に生成.
Definition at line 23 of file ttree.c.
References init_tList_data(), and JBXL_NORMAL.
Referenced by add_tTree_node_bydata(), and insert_tTree_node_bydata().


| void print_tTree | ( | FILE * | fp, |
| tTree * | pp ) |
void print_tTree(FILE* fp, tTree* pp)
ツリーの表示.ポインタ pp以降の全てのノードのキー部のバッファを fpに表示する. pp->ctrl が TREE_NOSIS_NODE の場合は,ppの姉妹ノードは出力しない.
| fp | 出力するファイルへのポインタ.NULLの場合は stderr |
| pp | 表示を開始するノードへのポインタ. |
Definition at line 1102 of file ttree.c.
References print_tTree(), and TREE_NOSIS_NODE.
Referenced by print_tTree().


| void print_tTree_tree | ( | FILE * | fp, |
| tTree * | pp, | ||
| const char * | space ) |
void print_tTree_tree(FILE* fp, tTree* pp, const char* space)
ツリーの表示.ポインタ pp以降の全てのノードのキー部のバッファを fpに表示する. pp->ctrl が TREE_NOSIS_NODE の場合は,ppの姉妹ノードは出力しない.
| fp | 出力するファイルへのポインタ.NULLの場合は stderr |
| pp | 表示を開始するノードへのポインタ. |
| space | 出力の書式を揃えるための空白. |
Definition at line 1063 of file ttree.c.
References print_tTree_tree(), and TREE_NOSIS_NODE.
Referenced by print_tTree_tree().


| int replace_all_tTree_node | ( | tTree * | tp, |
| char * | key, | ||
| char * | src, | ||
| char * | dst, | ||
| int | len ) |
void replace_all_tTree_node(tTree* pp, char* key, char* src, char* dst, int len)
ツリー pp内で keyをキー,srcをノード値として持つ全てのノードのノード値を dst に書き換える.
| tp | 置換対象のツリー |
| key | サーチキー |
| src | 置換対象のノード値 |
| dst | 置換後のノード値 |
| len | 1以上: 一致させる長さ. |
| len | TLIST_MATCH_COMPLETE (0): 完全一致. |
| len | TLIST_MATCH_TLISTKEY (-1): pl->key.buf の長さに合わせる. |
| len | TLIST_MATCH_STRINGKEY (-2): key の長さに合わせる. |
Definition at line 499 of file ttree.c.
References ex_strncmp(), free_Buffer(), len, make_Buffer_bystr, and replace_all_tTree_node().
Referenced by replace_all_tTree_node().


void replace_tTree_node(tTree* pp, tTree* pt)
ツリー pp内で ツリー ptと同じパターン(キー値を比較)の枝を検索し,ppに一致したパターンの枝があれば,
その枝の各ノードに対して,対応するそれぞれの(pt->ctrl が TREE_COPY_NODE または TREE_NOCMP_COPY_NODE である)
ptのノードの属性で置き換える.
パターンの一致(検索)では ldat.key(キー値)が比較される.
置き換える属性は ldat.id, ldat.lv, ldat.sz, ldat.key, ldat.val, ldat.ptr, ldat.lst
置き換えを行うのは pt->ctrl が TREE_COPY_NODE または TREE_NOCMP_COPY_NODE の場合のみである.(重要)
ldat.val, ldat.ptr, ldat.lst については,ptで値が設定されていなければ,置き換えを行わない.
| pp | 置き換え対象のツリー |
| pt | 置き換えるツリー |
| TRUE | 置換する枝を見つけた.正常に置換されたかどうかは不明. |
| FALSE | 置換する枝を見つけられなかった. |
Definition at line 1515 of file ttree.c.
References _copy_tTree_byctrl(), adjust_tTree_depth(), FALSE, and find_match_tTree().

tTree* strncasecmp_tTree(tTree* pp, const char* key, int len, int no)
ツリーノードのキー値のサーチ.大文字小文字を無視する.
ポインタ pp以降のノードで,キー部の文字列が keyと前方一致(部分的も可)するノードの内 no番目にあるのを捜し出す.
| pp | サーチを開始するノードへのポインタ. |
| key | サーチキー(文字列).大文字,小文字を区別しない. |
| len | 1以上: 一致させる長さ. |
| len | TLIST_MATCH_COMPLETE (0): 完全一致. |
| len | TLIST_MATCH_TLISTKEY (-1): pl->key.buf の長さに合わせる. |
| len | TLIST_MATCH_STRINGKEY (-2): key の長さに合わせる. |
| no | 一致した物の中で何番目の物を返すか指定する.1から数える. |
| NULL | 一致したものが無い |
Definition at line 1226 of file ttree.c.
References _next_strncasecmp_vertical_tTree(), ex_strncasecmp(), and len.

tTree* strncmp_tTree(tTree* pp, const char* key, int len, int no)
ツリーノードのキー値のサーチ.
ポインタ pp以降のノードで,キー部の文字列が keyと前方一致(部分的も可)するノードの内 no番目にあるのを捜し出す.
| pp | サーチを開始するノードへのポインタ. |
| key | サーチキー(文字列). |
| len | 1以上: 一致させる長さ. |
| len | TLIST_MATCH_COMPLETE (0): 完全一致. |
| len | TLIST_MATCH_TLISTKEY (-1): pl->key.buf の長さに合わせる. |
| len | TLIST_MATCH_STRINGKEY (-2): key の長さに合わせる. |
| no | 一致した物の中で何番目の物を返すか指定する.1から数える. |
| NULL | 一致したものが無い |
Definition at line 1190 of file ttree.c.
References _next_strncmp_vertical_tTree(), ex_strncmp(), and len.
Referenced by get_node_content().

