tree.h
上传用户:jmzj888
上传日期:2007-01-02
资源大小:220k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
  2.    This file is public domain and comes with NO WARRANTY of any kind */
  3. #ifndef _tree_h
  4. #define _tree_h
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #define MAX_TREE_HIGHT 40 /* = max 1048576 leafs in tree */
  9. #define ELEMENT_KEY(tree,element)
  10. (tree->offset_to_key ? (void*)((byte*) element+tree->offset_to_key) :
  11. *((void**) (element+1)))
  12. #define tree_set_pointer(element,ptr) *((byte **) (element+1))=((byte*) (ptr))
  13. typedef enum { left_root_right, right_root_left } TREE_WALK;
  14. typedef uint32 element_count;
  15. typedef int (*tree_walk_action)(void *,element_count,void *);
  16. #ifdef MSDOS
  17. typedef struct st_tree_element {
  18.   struct st_tree_element *left,*right;
  19.   unsigned long count;
  20.   uchar    colour; /* black is marked as 1 */
  21. } TREE_ELEMENT;
  22. #else
  23. typedef struct st_tree_element {
  24.   struct st_tree_element *left,*right;
  25.   uint32 count:31,
  26.  colour:1; /* black is marked as 1 */
  27. } TREE_ELEMENT;
  28. #endif /* MSDOS */
  29. typedef struct st_tree {
  30.   TREE_ELEMENT *root,null_element;
  31.   TREE_ELEMENT **parents[MAX_TREE_HIGHT];
  32.   uint offset_to_key,elements_in_tree,size_of_element;
  33.   qsort_cmp compare;
  34.   void (*free)(void *);
  35. } TREE;
  36. /* Functions on hole tree */
  37. void init_tree(TREE *tree,int size,qsort_cmp compare,
  38.        void (*free_element)(void*));
  39. void delete_tree(TREE*);
  40. /* Functions on leafs */
  41. TREE_ELEMENT *tree_insert(TREE *tree,void *key,uint key_size);
  42. void *tree_search(TREE *tree,void *key);
  43. int tree_walk(TREE *tree,tree_walk_action action,
  44.       void *argument, TREE_WALK visit);
  45. int tree_delete(TREE *tree,void *key);
  46. #ifdef __cplusplus
  47. }
  48. #endif
  49. #endif