37 #ifndef _LWPA_RBTREE_H_
38 #define _LWPA_RBTREE_H_
56 #ifndef RB_ITER_MAX_HEIGHT
57 #define RB_ITER_MAX_HEIGHT 64
#define RB_ITER_MAX_HEIGHT
The tallest allowable tree that can be iterated over.
Definition: lwpa_rbtree.h:57
int rb_tree_insert(LwpaRbTree *self, void *value)
Insert a new value into a red-black tree.
Definition: lwpa_rbtree.c:210
int rb_tree_test(LwpaRbTree *self, LwpaRbNode *root)
Test the validity of a red-black tree.
Definition: lwpa_rbtree.c:523
LwpaRbIter * rb_iter_init(LwpaRbIter *self)
Initialize a red-black tree iterator.
Definition: lwpa_rbtree.c:576
int rb_tree_remove_with_cb(LwpaRbTree *self, void *value, rb_tree_node_f node_cb)
Remove a value from a red-black tree, calling back into the application with the node and value being...
Definition: lwpa_rbtree.c:341
int rb_tree_clear(LwpaRbTree *self)
Clear all values from a red-black tree.
Definition: lwpa_rbtree.c:446
void rb_tree_node_dealloc_cb(const LwpaRbTree *self, LwpaRbNode *node)
The default node deallocation callback.
Definition: lwpa_rbtree.c:131
int rb_tree_insert_node(LwpaRbTree *self, LwpaRbNode *node)
Insert a node containing a new value into a red-black tree.
Definition: lwpa_rbtree.c:227
void * rb_iter_next(LwpaRbIter *self)
Advance a red-black tree iterator.
Definition: lwpa_rbtree.c:682
size_t rb_tree_size(LwpaRbTree *self)
Get the current number of values in a red-black tree.
Definition: lwpa_rbtree.c:505
LwpaRbNode *(* rb_node_alloc_f)()
A function type to allocate a new node.
Definition: lwpa_rbtree.h:101
void * rb_iter_prev(LwpaRbIter *self)
Reverse-advance a red-black tree iterator.
Definition: lwpa_rbtree.c:696
int rb_tree_node_cmp_ptr_cb(const LwpaRbTree *self, const LwpaRbNode *a, const LwpaRbNode *b)
The default node comparison callback.
Definition: lwpa_rbtree.c:120
void * rb_iter_first(LwpaRbIter *self, LwpaRbTree *tree)
Point a red-black tree iterator at the first value in the tree.
Definition: lwpa_rbtree.c:654
struct LwpaRbIter LwpaRbIter
A red-black tree iterator.
LwpaRbTree * rb_tree_init(LwpaRbTree *self, rb_tree_node_cmp_f cmp, rb_node_alloc_f alloc_f, rb_node_dealloc_f dealloc_f)
Initialize a red-black tree node.
Definition: lwpa_rbtree.c:149
int(* rb_tree_node_cmp_f)(const LwpaRbTree *self, const LwpaRbNode *node_a, const LwpaRbNode *node_b)
A function type that compares two nodes in a tree.
Definition: lwpa_rbtree.h:79
void(* rb_tree_node_f)(const LwpaRbTree *self, LwpaRbNode *node)
A function type to be called for each node in a tree.
Definition: lwpa_rbtree.h:91
int rb_tree_remove(LwpaRbTree *self, void *value)
Remove a value from a red-black tree.
Definition: lwpa_rbtree.c:318
void * rb_iter_last(LwpaRbIter *self, LwpaRbTree *tree)
Point a red-black tree iterator at the last value in the tree.
Definition: lwpa_rbtree.c:668
LwpaRbNode * rb_node_init(LwpaRbNode *self, void *value)
Initialize a red-black tree node.
Definition: lwpa_rbtree.c:58
int rb_tree_clear_with_cb(LwpaRbTree *self, rb_tree_node_f node_cb)
Clear all values from a red-black tree, calling back into the application for each node and value bei...
Definition: lwpa_rbtree.c:466
void * rb_tree_find(LwpaRbTree *self, void *value)
Find a value in a red-black tree.
Definition: lwpa_rbtree.c:172
void(* rb_node_dealloc_f)(LwpaRbNode *node)
A function type to deallocate a node.
Definition: lwpa_rbtree.h:111
A red-black tree iterator.
Definition: lwpa_rbtree.h:146
LwpaRbNode * path[RB_ITER_MAX_HEIGHT]
The traversal path to the current node.
Definition: lwpa_rbtree.h:150
LwpaRbNode * node
The current node.
Definition: lwpa_rbtree.h:148
size_t top
Top of the traversal stack.
Definition: lwpa_rbtree.h:151
LwpaRbTree * tree
The tree being iterated over.
Definition: lwpa_rbtree.h:147
void * info
User provided, not used by rb_iter.
Definition: lwpa_rbtree.h:152
A red-black tree node.
Definition: lwpa_rbtree.h:117
void * value
The value object represented by this node.
Definition: lwpa_rbtree.h:120
int red
The node color: red (1), black (0)
Definition: lwpa_rbtree.h:118
LwpaRbNode * link[2]
Child node links: left [0], right [1].
Definition: lwpa_rbtree.h:119
A red-black tree.
Definition: lwpa_rbtree.h:129
rb_tree_node_cmp_f cmp
A function to use for comparing two nodes.
Definition: lwpa_rbtree.h:131
LwpaRbNode * root
The root node of the tree.
Definition: lwpa_rbtree.h:130
size_t size
The current count of nodes in the tree.
Definition: lwpa_rbtree.h:132
rb_node_alloc_f alloc_f
A function to use for allocating a new node.
Definition: lwpa_rbtree.h:134
rb_node_dealloc_f dealloc_f
A function to use for deallocating a node.
Definition: lwpa_rbtree.h:136
void * info
User provided, not used by rb_tree.
Definition: lwpa_rbtree.h:137