|
static void | delete_fixup (rbtree_t *tree, rbnode_t *x, rbnode_t *parent) |
| Maintain RED-BLACK tree balance after deleting node x. More...
|
|
static void | free_walker (rbtree_t *tree, rbnode_t *x) |
| Walks the tree to delete all nodes Does NOT re-balance it! More...
|
|
static void | insert_fixup (rbtree_t *tree, rbnode_t *x) |
| Maintain red-black tree balance after inserting node x. More...
|
|
rbtree_t * | rbtree_create (TALLOC_CTX *ctx, rb_comparator_t compare, rb_free_t node_free, int flags) |
| Create a new RED-BLACK tree. More...
|
|
void | rbtree_delete (rbtree_t *tree, rbnode_t *z) |
|
static void | rbtree_delete_internal (rbtree_t *tree, rbnode_t *z, bool skiplock) |
| Delete an element (z) from the tree. More...
|
|
bool | rbtree_deletebydata (rbtree_t *tree, void const *data) |
| Delete a node from the tree, based on given data, which MUST have come from rbtree_finddata(). More...
|
|
rbnode_t * | rbtree_find (rbtree_t *tree, void const *data) |
| Find an element in the tree, returning the data, not the node. More...
|
|
void * | rbtree_finddata (rbtree_t *tree, void const *data) |
| Find the user data. More...
|
|
void | rbtree_free (rbtree_t *tree) |
|
bool | rbtree_insert (rbtree_t *tree, void *data) |
|
rbnode_t * | rbtree_insert_node (rbtree_t *tree, void *data) |
| Insert an element into the tree. More...
|
|
void * | rbtree_node2data (UNUSED rbtree_t *tree, rbnode_t *node) |
|
uint32_t | rbtree_num_elements (rbtree_t *tree) |
|
int | rbtree_walk (rbtree_t *tree, rb_order_t order, rb_walker_t compare, void *context) |
|
static void | rotate_left (rbtree_t *tree, rbnode_t *x) |
| Rotate Node x to left. More...
|
|
static void | rotate_right (rbtree_t *tree, rbnode_t *x) |
| Rotate Node x to right. More...
|
|
static int | walk_delete_order (rbtree_t *tree, rb_walker_t compare, void *context) |
| rbtree_delete_order More...
|
|
static int | walk_node_in_order (rbnode_t *x, rb_walker_t compare, void *context) |
| rbtree_in_order More...
|
|
static int | walk_node_post_order (rbnode_t *x, rb_walker_t compare, void *context) |
| rbtree_post_order More...
|
|
static int | walk_node_pre_order (rbnode_t *x, rb_walker_t compare, void *context) |
| Walk the tree, Pre-order. More...
|
|
rbtree_delete_order
This executes an rbtree_in_order-like walk that adapts to changes in the tree above it, which may occur because we allow the compare to tell us to delete the current node.
The compare should return:
< 0 - on error
0 - continue walking, don't delete the node
1 - delete the node and stop walking
2 - delete the node and continue walking
Definition at line 640 of file rbtree.c.
Walk the tree, Pre-order.
We call ourselves recursively for each function, but that's OK, as the stack is only log(N) deep, which is ~12 entries deep.
Definition at line 552 of file rbtree.c.