180 #define c_rbtree_destroy(T, DESTRUCTOR) \ 183 c_rbnode_t *_c_rbtree_temp; \ 184 while ((_c_rbtree_temp = c_rbtree_head(T))) { \ 185 (DESTRUCTOR)(_c_rbtree_temp->data); \ 186 if (_c_rbtree_temp == c_rbtree_head(T)) { \ 187 c_rbtree_node_delete(_c_rbtree_temp); \ 246 #define c_rbtree_size(T) (T) == NULL ? 0 : ((T)->size) 295 #define c_rbtree_node_data(N) ((N) ? ((N)->data) : NULL) c_rbnode_t * c_rbtree_node_next(c_rbnode_t *node)
Get the next node.
c_rbtree_compare_func * data_compare
c_rbtree_compare_func * key_compare
int c_rbtree_node_delete(c_rbnode_t *node)
Delete a node in a red-black tree.
c_rbnode_t * c_rbtree_head(c_rbtree_t *tree)
Get the head of the red-black tree.
int c_rbtree_create(c_rbtree_t **rbtree, c_rbtree_compare_func *key_compare, c_rbtree_compare_func *data_compare)
Create the red-black tree.
Structure that represents a red-black tree.
int c_rbtree_insert(c_rbtree_t *tree, void *data)
Inserts a node into a red black tree.
c_rbtree_t * c_rbtree_dup(const c_rbtree_t *tree)
Duplicate a red-black tree.
int c_rbtree_check_sanity(c_rbtree_t *tree)
Perform a sanity check for a red-black tree.
int c_rbtree_walk(c_rbtree_t *tree, void *data, c_rbtree_visit_func *visitor)
Walk over a red-black tree.
int c_rbtree_compare_func(const void *key, const void *data)
Callback function to compare a key with the data from a red-black tree node.
Structure that represents a node of a red-black tree.
xrbcolor_e
Define the two colors for the red-black tree.
enum xrbcolor_e xrbcolor_t
int c_rbtree_free(c_rbtree_t *tree)
Free the structure of a red-black tree.
int c_rbtree_visit_func(void *, void *)
Visit function for the c_rbtree_walk() function.
c_rbnode_t * c_rbtree_tail(c_rbtree_t *tree)
Get the tail of the red-black tree.
c_rbnode_t * c_rbtree_find(c_rbtree_t *tree, const void *key)
Find a node in a red-black tree.
c_rbnode_t * c_rbtree_node_prev(c_rbnode_t *node)
Get the previous node.