JunkBox_Lib++ (for Windows) 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(), and ColladaXML::deleteNousedJoints().
#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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
References _next_strncasecmp_horizon_tTree(), and ex_strncasecmp().
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.cpp.
References _next_strncasecmp_vertical_tTree(), and ex_strncasecmp().
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.cpp.
References _next_strncmp_horizon_tTree(), and ex_strncmp().
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.cpp.
References _next_strncmp_vertical_tTree(), and ex_strncmp().
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.cpp.
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.cpp.
References adjust_tTree_depth(), and TREE_ANCHOR_NODE.
Referenced by ColladaXML::addScene(), 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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
References del_tTree().
tTree* del_children_tTree(tTree** pp)
指定したノードの子ツリーを削除する.指定したノードは削除しない.
*pp | 削除する子ツリーの親ノード |
Definition at line 666 of file ttree.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
References del_sisters_children_tTree().
tTree* del_tTree(tTree** pp)
指定したノード以下のツリーを削除する. 姉妹ノードは削除しない.
[in] | *pp | 削除するツリーの先頭ノード |
[out] | *pp | NULL |
Definition at line 628 of file ttree.cpp.
References clear_tList_data(), and del_sisters_children_tTree().
Referenced by clear_BVHData(), del_all_tTree(), and CBVHTool::free_data().
Definition at line 53 of file ttree.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
Referenced by find_match_tTree_endlist(), and get_value_tTree().
tTree* free_tTree_node(tTree* node)
ツリーノードの削除.削除されたノードが子ノードを持つ場合は,その子ノードを格上げする(木構造を詰める)
Definition at line 344 of file ttree.cpp.
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.cpp.
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.cpp.
References adjust_tTree_depth().
Referenced by ColladaXML::addScene().
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
References adjust_tTree_depth().
tTree * new_tTree_anchor_node | ( | void | ) |
Definition at line 37 of file ttree.cpp.
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.cpp.
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.cpp.
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.cpp.
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.cpp.
References ex_strncmp(), free_Buffer(), 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.cpp.
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.cpp.
References _next_strncasecmp_vertical_tTree(), and ex_strncasecmp().
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.cpp.
References _next_strncmp_vertical_tTree(), and ex_strncmp().
Referenced by get_node_content().