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