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() の補助関数