|
libdatatypes 0.3.2
Abstract datatypes for C.
|
Generic red-black tree. More...
Go to the source code of this file.
Data Structures | |
| struct | RBNode |
| Structure holding node data. More... | |
| struct | RBTree |
| Red-black tree. More... | |
| struct | RBTree::_RBTreePair |
| Found key-value pair. More... | |
| struct | RBTreeIterStackItem |
| Structure holding a node and the iteration state. More... | |
| struct | RBTreeIter |
| Structure to iterate over the elements of a RBTree. More... | |
Macros | |
| #define | rbtree_pair_key(p) p->node->key |
| #define | rbtree_pair_value(p) p->node->value |
| #define | rbtree_iter_key(iter) iter.sp->node->key |
| #define | rbtree_iter_value(iter) iter.sp->node->value |
Typedefs | |
| typedef struct _RBTreePair | RBTreePair |
Enumerations | |
| enum | RBTreeInsertResult { RBTREE_INSERT_RESULT_NEW , RBTREE_INSERT_RESULT_REPLACED , RBTREE_INSERT_RESULT_FAILED } |
| result of rbtree_set() method. More... | |
Functions | |
| RBTree * | rbtree_new (CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value, Pool *pool) |
| void | rbtree_init (RBTree *tree, CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value, Pool *pool) |
| void | rbtree_free (RBTree *tree) |
| void | rbtree_destroy (RBTree *tree) |
| void | rbtree_clear (RBTree *tree) |
| RBTreeInsertResult | rbtree_set (RBTree *tree, void *key, void *value, bool replace_key) |
| size_t | rbtree_count (const RBTree *tree) |
| RBTreePair * | rbtree_lookup (RBTree *tree, const void *key) |
| void * | rbtree_pair_get_key (const RBTreePair *pair) |
| void * | rbtree_pair_get_value (const RBTreePair *pair) |
| void | rbtree_pair_set_value (RBTreePair *pair, void *value) |
| bool | rbtree_key_exists (const RBTree *tree, const void *key) |
| bool | rbtree_remove (RBTree *tree, const void *key) |
| void | rbtree_iter_init (const RBTree *tree, RBTreeIter *iter) |
| void | rbtree_iter_free (RBTreeIter *iter) |
| void | rbtree_iter_reuse (const RBTree *tree, RBTreeIter *iter) |
| bool | rbtree_iter_next (RBTreeIter *iter) |
| void * | rbtree_iter_get_key (const RBTreeIter *iter) |
| void * | rbtree_iter_get_value (const RBTreeIter *iter) |
Generic red-black tree.
Definition in file rbtree.h.
| struct RBNode |
| struct RBTree |
| Data Fields | ||
|---|---|---|
| CompareFunc | compare_keys |
Function to compare two keys. |
| size_t | count |
Number of stored items. |
| FreeFunc | free_key |
Function to free a key. |
| FreeFunc | free_value |
Function to free a value. |
| struct _RBTreePair | pair | Last found key-value pair. |
| Pool * | pool |
An optional pool to create nodes. |
| RBNode * | root |
The root node. |
| RBNode ** | sp |
The stack pointer. |
| RBNode ** | stack |
Stack used when traversing tree. |
| size_t | stack_size |
Size of the stack. |
| struct RBTree::_RBTreePair |
| struct RBTreeIterStackItem |
| struct RBTreeIter |
| Data Fields | ||
|---|---|---|
| bool | finished |
true if iteration is finished. |
| RBTreeIterStackItem * | sp |
The stack pointer. |
| RBTreeIterStackItem * | stack |
A stack holding nodes and iteration state. |
| size_t | stack_size |
Size of the stack. |
| const RBTree * | tree |
Pointer to related tree. |
| #define rbtree_iter_key | ( | iter | ) | iter.sp->node->key |
| #define rbtree_iter_value | ( | iter | ) | iter.sp->node->value |
| #define rbtree_pair_key | ( | p | ) | p->node->key |
| #define rbtree_pair_value | ( | p | ) | p->node->value |
| typedef struct _RBTreePair RBTreePair |
| enum RBTreeInsertResult |
result of rbtree_set() method.
| Enumerator | |
|---|---|
| RBTREE_INSERT_RESULT_NEW | Node has been inserted. |
| RBTREE_INSERT_RESULT_REPLACED | Node has been replaced. |
| RBTREE_INSERT_RESULT_FAILED | Node insertion failed. |
| void rbtree_clear | ( | RBTree * | tree | ) |
| size_t rbtree_count | ( | const RBTree * | tree | ) |
| void rbtree_destroy | ( | RBTree * | tree | ) |
| void rbtree_free | ( | RBTree * | tree | ) |
| void rbtree_init | ( | RBTree * | tree, |
| CompareFunc | compare_keys, | ||
| FreeFunc | free_key, | ||
| FreeFunc | free_value, | ||
| Pool * | pool | ||
| ) |
| void rbtree_iter_free | ( | RBTreeIter * | iter | ) |
| void * rbtree_iter_get_key | ( | const RBTreeIter * | iter | ) |
| void * rbtree_iter_get_value | ( | const RBTreeIter * | iter | ) |
| iter | a RBTreeIter |
Retrieves the value of the current element.
| void rbtree_iter_init | ( | const RBTree * | tree, |
| RBTreeIter * | iter | ||
| ) |
| tree | a RBTree |
| iter | an uninitialized RBTreeIter |
Initializes a key/value pair iterator and associates it with the tree. Modifying the tree while using the iterator might lead to undefined behaviour.
| bool rbtree_iter_next | ( | RBTreeIter * | iter | ) |
| iter | a RBTreeIter |
Goes to next element of the RBTree.
| void rbtree_iter_reuse | ( | const RBTree * | tree, |
| RBTreeIter * | iter | ||
| ) |
| tree | a RBTree |
| iter | an already initialized RBTreeIter |
Reuses (reinitializes) an iterator.
| bool rbtree_key_exists | ( | const RBTree * | tree, |
| const void * | key | ||
| ) |
| RBTreePair * rbtree_lookup | ( | RBTree * | tree, |
| const void * | key | ||
| ) |
| RBTree * rbtree_new | ( | CompareFunc | compare_keys, |
| FreeFunc | free_key, | ||
| FreeFunc | free_value, | ||
| Pool * | pool | ||
| ) |
| void * rbtree_pair_get_key | ( | const RBTreePair * | pair | ) |
| void * rbtree_pair_get_value | ( | const RBTreePair * | pair | ) |
| void rbtree_pair_set_value | ( | RBTreePair * | pair, |
| void * | value | ||
| ) |
| bool rbtree_remove | ( | RBTree * | tree, |
| const void * | key | ||
| ) |
| RBTreeInsertResult rbtree_set | ( | RBTree * | tree, |
| void * | key, | ||
| void * | value, | ||
| bool | replace_key | ||
| ) |
| tree | a RBTree |
| key | key of the item |
| value | value of the item |
| replace_key | true to overwrite exisiting key |
Inserts a new key and value in the RBTree. If replace_key is set an existing key is freed using the specified free_key function before it gets replaced.