00001
00002 #ifndef __JBXL_TINY_TREE_H_
00003 #define __JBXL_TINY_TREE_H_
00004
00005
00016 #include "buffer.h"
00017 #include "tlist.h"
00018
00019
00049 typedef tList tTree;
00050
00051
00053 #define TREE_ANCHOR_NODE JBXL_STATE_ANCHOR
00054 #define TREE_NOCTRL_NODE 0
00055 #define TREE_NOCMP_NODE 100
00056 #define TREE_NOCMP_COPY_NODE 101
00057 #define TREE_COPY_NODE 102
00058 #define TREE_NOSIS_NODE 103
00059 #define TREE_ALREADY_FOUND_NODE 110
00060 #define TREE_ALREADY_FOUND_NODE_TEMP 111
00061
00062
00063
00065
00066
00067 tTree* new_tTree_node(void);
00068 tTree* new_tTree_anchor_node(void);
00069 tTree make_tTree_node(tList_data data);
00070 tTree* del_tTree_anchor_node(tTree* node);
00071 #define del_tTree_anchor(t) del_tTree_anchor_node((t))
00072 #define new_tTree() new_tTree_node()
00073 #define new_tTree_anchor() new_tTree_anchor_node()
00074
00075 tTree* add_tTree_node (tTree* pp, tTree* pt);
00076 tTree* add_tTree_node_bydata (tTree* pp, tList_data ldat);
00077 tTree* add_tTree_node_bystr (tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
00078 tTree* add_tTree_node_byBuffer(tTree* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
00079
00080 #define add_tTree_node_int(p, k, v) add_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
00081 #define add_tTree_node_str(p, k, v) add_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
00082 #define add_tTree_node_Buffer(p, k, v) add_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
00083
00084 tTree* insert_tTree_node (tTree* pp, tTree* pt);
00085 tTree* insert_tTree_node_bydata (tTree* pp, tList_data ldat);
00086 tTree* insert_tTree_node_bystr (tTree* pp, int id, int lv, const char* key, const char* val, void* ptr, int sz);
00087 tTree* insert_tTree_node_byBuffer(tTree* pp, int id, int lv, Buffer key, Buffer val, void* ptr, int sz);
00088
00089 #define insert_tTree_node_int(p, k, v) insert_tTree_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
00090 #define insert_tTree_node_str(p, k, v) insert_tTree_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
00091 #define insert_tTree_node_Buffer(p, k, v) insert_tTree_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
00092
00093 tTree* move_tTree_node(tTree* node, tTree* pp);
00094 int replace_all_tTree_node(tTree* pp, char* key, char* src, char* dst, int len);
00095 tTree* del_tTree_node(tTree** node);
00096 tTree* free_tTree_node(tTree* node);
00097
00098 #define set_tTree_node_bydata(p, k) set_tList_node_bydata((p), (k))
00099 #define set_tTree_node_bystr(p, i, l, k, v, d, s) set_tList_node_bystr((p), (i), (l), (k), (v), (d), (s))
00100 #define set_tTree_node_byBuffer(p, i, l, k, v, d, s) set_tList_node_byBuffer((p), (i), (l), (k), (v), (d), (s))
00101
00102 #define set_tTree_node_int(p, k, d) set_tList_node_bystr((p), (k), (v), NULL, NULL, NULL, 0)
00103 #define set_tTree_node_str(p, k, d) set_tList_node_bystr((p), 0, 0, (char*)(k), (char*)(v), NULL, 0)
00104 #define set_tTree_node_Buffer(p, k, d) set_tList_node_byBuffer((p), 0, 0, (k), (v), NULL, 0)
00105
00106 #define dup_tTree_node(p) dup_tList_node(p)
00107
00108
00109
00111
00112
00113 tTree* del_tTree(tTree** pp);
00114 void del_all_tTree(tTree** pp);
00115 tTree* del_children_tTree(tTree** pp);
00116 tTree* del_sisters_tTree(tTree** pp);
00117 tTree* del_sisters_children_tTree(tTree** pp);
00118
00119 void adjust_tTree_depth(tTree* pp);
00120 void print_tTree(FILE* fp, tTree* pp);
00121 void print_tTree_tree(FILE* fp, tTree* pp, const char* sp);
00122
00123 tTree* add_tTree(tTree* pp, tTree* pt);
00124 tTree* div_tTree(tTree* pp);
00125 tTree* dup_merge_tTree(tTree* pp, tTree* tp);
00126 void merge_tTree(tTree* tp, tTree* tt);
00127 void exchange_tTree(tTree* tl, tTree* tt);
00128 int count_tTree(tTree* pp);
00129
00135 #define find_tTree_top(p) find_tList_top((p))
00136 tTree* find_tTree_end(tTree* pp);
00137
00138
00139
00140 tTree* strncmp_tTree (tTree* pp, const char* key, int len, int no);
00141 tTree* strncasecmp_tTree(tTree* pp, const char* key, int len, int no);
00142
00143 int find_match_tTree (tTree* pp, tTree* pt);
00144 tList* find_match_tTree_endlist(tTree* pp, tTree* pt);
00145 tList* find_match_tTree_endlist_rcsv(tTree* pp, tTree* pt, tTree* te);
00146
00147 int check_match_tTree (tTree* tp, tTree* tr);
00148 tTree* cmp_sisters_tTree (tTree* tp, tTree* tr);
00149
00150 int replace_tTree_node(tTree* pp, tTree* pt);
00151 void copy_tTree_byctrl (tTree* pt);
00152 void clear_tTree_ctrl (tTree* pp);
00153
00154 Buffer get_value_tTree (tTree* pp, tTree* pt);
00155 #define set_value_tTree(p, t) replace_tTree_node((p), (t))
00156
00157
00158 tTree* next_strncmp_vertical_tTree (tTree* pp, const char* key, int len, int no, int* nn);
00159 tTree* next_strncasecmp_vertical_tTree(tTree* pp, const char* key, int len, int no, int* nn);
00160
00161 tTree* next_strncmp_horizon_tTree (tTree* pp, const char* key, int len, int no, int* nn);
00162 tTree* next_strncasecmp_horizon_tTree(tTree* pp, const char* key, int len, int no, int* nn);
00163
00164
00165 #endif // __JBXL_TINY_TREE_H_
00166