20 #include <drizzled/base.h>
22 #include <drizzled/qsort_cmp.h>
28 static const int MAX_TREE_HEIGHT= 64;
30 static const int TREE_NO_DUPS= 1;
32 typedef enum { left_root_right, right_root_left } TREE_WALK;
33 typedef int (*tree_walk_action)(
void *,uint32_t,
void *);
35 typedef enum { free_init, free_free, free_end } TREE_FREE;
36 typedef void (*tree_element_free)(
void*, TREE_FREE,
void *);
47 static const int TREE_ELEMENT_EXTRA_SIZE= (
sizeof(
Tree_Element) +
sizeof(
void*));
60 uint32_t offset_to_key, elements_in_tree, size_of_element;
66 tree_element_free free;
70 void* getCustomArg() {
79 uint32_t getElementsInTree() {
80 return elements_in_tree;
83 void init_tree(
size_t default_alloc_size, uint32_t memory_limit,
84 uint32_t size, qsort_cmp2 compare,
bool with_delete,
85 tree_element_free free_element,
void *custom_arg);
88 return this->root != 0;
94 Tree_Element *tree_insert(
void *key, uint32_t key_size,
void *custom_arg);
95 int tree_walk(tree_walk_action action,
void *argument, TREE_WALK visit);
102 int tree_walk_left_root_right(
Tree_Element* element, tree_walk_action action,
void* argument);
103 int tree_walk_right_root_left(
Tree_Element* element, tree_walk_action action,
void* argument);