![]() |
ldns
1.7.0
|
Implementation of a redblack tree. More...
Go to the source code of this file.
Macros | |
| #define | BLACK 0 |
| Node colour black. More... | |
| #define | RED 1 |
| Node colour red. More... | |
Functions | |
| ldns_rbtree_t * | ldns_rbtree_create (int(*cmpf)(const void *, const void *)) |
| Create new tree (malloced) with given key compare function. More... | |
| void | ldns_rbtree_init (ldns_rbtree_t *rbtree, int(*cmpf)(const void *, const void *)) |
| Init a new tree (malloced by caller) with given key compare function. More... | |
| void | ldns_rbtree_free (ldns_rbtree_t *rbtree) |
| Free the complete tree (but not its keys) More... | |
| void | ldns_rbtree_insert_vref (ldns_rbnode_t *data, void *rbtree) |
| Insert data into the tree (reversed arguments, for use as callback) More... | |
| ldns_rbnode_t * | ldns_rbtree_insert (ldns_rbtree_t *rbtree, ldns_rbnode_t *data) |
| Insert data into the tree. More... | |
| ldns_rbnode_t * | ldns_rbtree_search (ldns_rbtree_t *rbtree, const void *key) |
| Find key in tree. More... | |
| ldns_rbnode_t * | ldns_rbtree_delete (ldns_rbtree_t *rbtree, const void *key) |
| Delete element from tree. More... | |
| int | ldns_rbtree_find_less_equal (ldns_rbtree_t *rbtree, const void *key, ldns_rbnode_t **result) |
| Find, but match does not have to be exact. More... | |
| ldns_rbnode_t * | ldns_rbtree_first (const ldns_rbtree_t *rbtree) |
| Returns first (smallest) node in the tree. More... | |
| ldns_rbnode_t * | ldns_rbtree_last (const ldns_rbtree_t *rbtree) |
| Returns last (largest) node in the tree. More... | |
| ldns_rbnode_t * | ldns_rbtree_next (ldns_rbnode_t *node) |
| Returns next larger node in the tree. More... | |
| ldns_rbnode_t * | ldns_rbtree_previous (ldns_rbnode_t *node) |
| Returns previous smaller node in the tree. More... | |
| ldns_rbtree_t * | ldns_rbtree_split (ldns_rbtree_t *tree, size_t elements) |
| split off elements number of elements from the start of the name tree and return a new tree More... | |
| void | ldns_rbtree_join (ldns_rbtree_t *tree1, ldns_rbtree_t *tree2) |
| add all node from the second tree to the first (removing them from the second), and fix up nsec(3)s if present More... | |
| void | ldns_traverse_postorder (ldns_rbtree_t *tree, void(*func)(ldns_rbnode_t *, void *), void *arg) |
| Call function for all elements in the redblack tree, such that leaf elements are called before parent elements. More... | |
Variables | |
| ldns_rbnode_t | ldns_rbtree_null_node |
| the NULL node, global alloc More... | |
Implementation of a redblack tree.
Definition in file rbtree.c.
| ldns_rbtree_t* ldns_rbtree_create | ( | int(*)(const void *, const void *) | cmpf | ) |
Create new tree (malloced) with given key compare function.
| cmpf | compare function (like strcmp) takes pointers to two keys. |
Definition at line 80 of file rbtree.c.
References LDNS_MALLOC, and ldns_rbtree_init().
| void ldns_rbtree_init | ( | ldns_rbtree_t * | rbtree, |
| int(*)(const void *, const void *) | cmpf | ||
| ) |
Init a new tree (malloced by caller) with given key compare function.
| rbtree | uninitialised memory for new tree, returned empty. |
| cmpf | compare function (like strcmp) takes pointers to two keys. |
Definition at line 97 of file rbtree.c.
References ldns_rbtree_t::cmp, ldns_rbtree_t::count, LDNS_RBTREE_NULL, and ldns_rbtree_t::root.
| void ldns_rbtree_free | ( | ldns_rbtree_t * | rbtree | ) |
| void ldns_rbtree_insert_vref | ( | ldns_rbnode_t * | data, |
| void * | rbtree | ||
| ) |
Insert data into the tree (reversed arguments, for use as callback)
| [in] | data | element to insert |
| [out] | rbtree | tree to insert in to |
Definition at line 229 of file rbtree.c.
References ldns_rbtree_insert().
| ldns_rbnode_t* ldns_rbtree_insert | ( | ldns_rbtree_t * | rbtree, |
| ldns_rbnode_t * | data | ||
| ) |
Insert data into the tree.
| rbtree | tree to insert to. |
| data | element to insert. |
Definition at line 242 of file rbtree.c.
References ldns_rbtree_t::cmp, ldns_rbnode_t::color, ldns_rbtree_t::count, ldns_rbnode_t::key, LDNS_RBTREE_NULL, ldns_rbnode_t::left, ldns_rbnode_t::parent, RED, ldns_rbnode_t::right, and ldns_rbtree_t::root.
| ldns_rbnode_t* ldns_rbtree_search | ( | ldns_rbtree_t * | rbtree, |
| const void * | key | ||
| ) |
Find key in tree.
Returns NULL if not found.
| rbtree | tree to find in. |
| key | key that must match. |
Definition at line 294 of file rbtree.c.
References ldns_rbtree_find_less_equal().
| ldns_rbnode_t* ldns_rbtree_delete | ( | ldns_rbtree_t * | rbtree, |
| const void * | key | ||
| ) |
Delete element from tree.
| rbtree | tree to delete from. |
| key | key of item to delete. |
Definition at line 336 of file rbtree.c.
References ldns_rbtree_t::count, LDNS_RBTREE_NULL, ldns_rbtree_search(), ldns_rbnode_t::left, and ldns_rbnode_t::right.
| int ldns_rbtree_find_less_equal | ( | ldns_rbtree_t * | rbtree, |
| const void * | key, | ||
| ldns_rbnode_t ** | result | ||
| ) |
Find, but match does not have to be exact.
| rbtree | tree to find in. |
| key | key to find position of. |
| result | set to the exact node if present, otherwise to element that precedes the position of key in the tree. NULL if no smaller element. |
Definition at line 514 of file rbtree.c.
References ldns_rbtree_t::cmp, ldns_rbnode_t::key, LDNS_RBTREE_NULL, ldns_rbnode_t::left, ldns_rbnode_t::right, and ldns_rbtree_t::root.
| ldns_rbnode_t* ldns_rbtree_first | ( | const ldns_rbtree_t * | rbtree | ) |
Returns first (smallest) node in the tree.
| rbtree | tree |
Definition at line 548 of file rbtree.c.
References LDNS_RBTREE_NULL, ldns_rbnode_t::left, and ldns_rbtree_t::root.
| ldns_rbnode_t* ldns_rbtree_last | ( | const ldns_rbtree_t * | rbtree | ) |
Returns last (largest) node in the tree.
| rbtree | tree |
Definition at line 559 of file rbtree.c.
References LDNS_RBTREE_NULL, ldns_rbnode_t::right, and ldns_rbtree_t::root.
| ldns_rbnode_t* ldns_rbtree_next | ( | ldns_rbnode_t * | rbtree | ) |
Returns next larger node in the tree.
| rbtree | tree |
Definition at line 574 of file rbtree.c.
References LDNS_RBTREE_NULL, ldns_rbnode_t::left, ldns_rbnode_t::parent, and ldns_rbnode_t::right.
| ldns_rbnode_t* ldns_rbtree_previous | ( | ldns_rbnode_t * | rbtree | ) |
Returns previous smaller node in the tree.
| rbtree | tree |
Definition at line 595 of file rbtree.c.
References LDNS_RBTREE_NULL,