Generic red-black tree.
More...
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <assert.h>
#include "rbtree.h"
Go to the source code of this file.
|
| 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_destroy (RBTree *tree) |
| |
| void | rbtree_free (RBTree *tree) |
| |
| void | rbtree_clear (RBTree *tree) |
| |
| size_t | rbtree_count (const RBTree *tree) |
| |
| RBTreeInsertResult | rbtree_set (RBTree *tree, void *key, void *value, bool overwrite_key) |
| |
| 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) |
| |
◆ _GNU_SOURCE
◆ RBTREE_INITIAL_BLOCK_SIZE
| #define RBTREE_INITIAL_BLOCK_SIZE 4 |
Initial stack size.
Definition at line 33 of file rbtree.c.
◆ rbtree_clear()
| void rbtree_clear |
( |
RBTree * |
tree | ) |
|
- Parameters
-
Removes all nodes.
Definition at line 137 of file rbtree.c.
◆ rbtree_count()
| size_t rbtree_count |
( |
const RBTree * |
tree | ) |
|
- Parameters
-
- Returns
- number of stored nodes
Gets the number of stored nodes.
Definition at line 152 of file rbtree.c.
◆ rbtree_destroy()
| void rbtree_destroy |
( |
RBTree * |
tree | ) |
|
- Parameters
-
Frees resources and the tree pointer.
Definition at line 115 of file rbtree.c.
◆ rbtree_free()
| void rbtree_free |
( |
RBTree * |
tree | ) |
|
- Parameters
-
Frees resources without freeing the tree pointer.
Definition at line 124 of file rbtree.c.
◆ rbtree_init()
- Parameters
-
| tree | an uninitialized RBTree |
| compare_keys | function to compare two keys |
| free_key | function to free a key |
| free_value | function to free a value |
| pool | an optional memory pool for creating/destroying RBNodes or NULL |
Initializes a RBTree.
Definition at line 54 of file rbtree.c.
◆ rbtree_iter_free()
- Parameters
-
Frees the iterator.
Definition at line 897 of file rbtree.c.
◆ rbtree_iter_get_key()
| void * rbtree_iter_get_key |
( |
const RBTreeIter * |
iter | ) |
|
- Parameters
-
- Returns
- key of current element
Retrieves the key of the current element.
Definition at line 1002 of file rbtree.c.
◆ rbtree_iter_get_value()
| void * rbtree_iter_get_value |
( |
const RBTreeIter * |
iter | ) |
|
- Parameters
-
- Returns
- value of current element
Retrieves the value of the current element.
Definition at line 1015 of file rbtree.c.
◆ rbtree_iter_init()
- Parameters
-
Initializes a key/value pair iterator and associates it with the tree. Modifying the tree while using the iterator might lead to undefined behaviour.
Definition at line 870 of file rbtree.c.
◆ rbtree_iter_next()
- Parameters
-
- Returns
- false if end of the RBTree has been reached
Goes to next element of the RBTree.
Definition at line 936 of file rbtree.c.
◆ rbtree_iter_reuse()
- Parameters
-
Reuses (reinitializes) an iterator.
Definition at line 905 of file rbtree.c.
◆ rbtree_key_exists()
| bool rbtree_key_exists |
( |
const RBTree * |
tree, |
|
|
const void * |
key |
|
) |
| |
- Parameters
-
- Returns
- true if given key does exist
Checks if a key does exist.
Definition at line 622 of file rbtree.c.
◆ rbtree_lookup()
- Parameters
-
- Returns
- the found key-value pair or NULL
Looks up a key-value pair in the RBTree.
Definition at line 564 of file rbtree.c.
◆ rbtree_new()
- Parameters
-
| compare_keys | function to compare two keys |
| free_key | function to free a key |
| free_value | function to free a value |
| pool | an optional memory pool for creating/destroying RBNodes or NULL |
- Returns
- a new RBTree
Creates a new RBTree.
Definition at line 36 of file rbtree.c.
◆ rbtree_pair_get_key()
| void * rbtree_pair_get_key |
( |
const RBTreePair * |
pair | ) |
|
- Parameters
-
- Returns
- key of the pair
Retrieves the key of a key-value pair.
Definition at line 582 of file rbtree.c.
◆ rbtree_pair_get_value()
| void * rbtree_pair_get_value |
( |
const RBTreePair * |
pair | ) |
|
- Parameters
-
- Returns
- value of the pair
Retrieves the value of a key-value pair.
Definition at line 595 of file rbtree.c.
◆ rbtree_pair_set_value()
| void rbtree_pair_set_value |
( |
RBTreePair * |
pair, |
|
|
void * |
value |
|
) |
| |
- Parameters
-
| pair | a RBTreePair |
| value | new value to set |
Overwrites the value of a key-value pair.
Definition at line 608 of file rbtree.c.
◆ rbtree_remove()
| bool rbtree_remove |
( |
RBTree * |
tree, |
|
|
const void * |
key |
|
) |
| |
- Parameters
-
| tree | a RBTree |
| key | key of the element to remove |
- Returns
- true if node has been removed
Removes an element from the RBTree.
Definition at line 793 of file rbtree.c.
◆ rbtree_set()
- Parameters
-
| tree | a RBTree |
| key | key of the item |
| value | value of the item |
| replace_key | true to overwrite exisiting key |
- Returns
- type of the performed insert operation
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.
Definition at line 506 of file rbtree.c.