Archived
1
0
Fork 0
This repository has been archived on 2026-05-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
archived/docs/technical/rbtree.txt
2011-01-26 19:19:04 +01:00

74 lines
2.1 KiB
Text

Red-Black Tree
--------------
Macros
~~~~~~
`RBTREE_INIT`::
Initialize a `rbtree` structure. +
should only be used with the declaration like:
+
----
rbtree tree = RBTREE_INIT(...);
----
+
the arguments are pointers to callback functions, in order: `delete_fn`, `update_fn`, `cmp_fn`
Data structures
~~~~~~~~~~~~~~~
* `rbtree`
+
--
Structure that holds a tree of nodes
`root`::
Pointer to the node that is the root of the tree.
`delete_fn`::
Pointer to the function that should handle the delete routines for the `key` pointer.
`update_fn`::
Pointer to the function that is called when the implementation performs an update of an `key` pointer. +
The function gets the following information passed in order: old pointer, new pointer.
NOTE: You may only need this if you store the data in another structure and has to keep it synchronized with the RB-tree.
`cmp_fn`::
Pointer to the function that is used to compare two `key` pointers. +
Shall return a value greater than zero if 'ptr1' > 'ptr2', a value less than zero if 'ptr1' < 'ptr2' and zero if 'ptr1' == 'ptr2'.
--
Functions
~~~~~~~~~
`rbtree_insert()`::
Creates and inserts a new node in the tree. +
If provided, calls `rbtree->update_fn` and `rbtree->delete_fn` if a node should be updated. +
Returns nonzero if a new node was inserted or updated, zero otherwise.
NOTE: The memory pointed to by the 'key' pointer is *not* copied so you must ensure that it has a infinite lifetime.
`rbtree_delete()`::
Deletes a node from the tree. if provided, calls `rbtree->delete_fn` for the node. +
Returns nonzero if a node was removed, zero otherwise.
`rbtree_free()`::
Deletes the whole tree. if provided, calls `rbtree->delete_fn` for every node.
`rbtree_walk()`::
Walks the tree in-order and passes a pointer to `key`
for the given node to the 'action' callback function.
`rbtree_search()`::
Searches the tree for 'key'. +
Returns a pointer to the node if found else `NULL`.
`rbtree_is_empty()`::
Checks if a tree is empty, retruns zero if the tree is empty, nonzero otherwise.