libdatatypes 0.3.2
Abstract datatypes for C.
Loading...
Searching...
No Matches
rbtree.c File Reference

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.

Macros

#define _GNU_SOURCE
 
#define RBTREE_INITIAL_BLOCK_SIZE   4
 

Functions

RBTreerbtree_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)
 
RBTreePairrbtree_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)
 

Detailed Description

Generic red-black tree.

Author
Sebastian Fedrau sebas.nosp@m.tian.nosp@m..fedr.nosp@m.au@g.nosp@m.mail..nosp@m.com

Definition in file rbtree.c.

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 22 of file rbtree.c.

◆ RBTREE_INITIAL_BLOCK_SIZE

#define RBTREE_INITIAL_BLOCK_SIZE   4

Initial stack size.

Definition at line 33 of file rbtree.c.

Function Documentation

◆ rbtree_clear()

void rbtree_clear ( RBTree tree)
Parameters
treea RBTree

Removes all nodes.

Definition at line 137 of file rbtree.c.

◆ rbtree_count()

size_t rbtree_count ( const RBTree tree)
Parameters
treea RBTree
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
treea RBTree

Frees resources and the tree pointer.

Definition at line 115 of file rbtree.c.

◆ rbtree_free()

void rbtree_free ( RBTree tree)
Parameters
treea RBTree

Frees resources without freeing the tree pointer.

Definition at line 124 of file rbtree.c.

◆ rbtree_init()

void rbtree_init ( RBTree tree,
CompareFunc  compare_keys,
FreeFunc  free_key,
FreeFunc  free_value,
Pool pool 
)
Parameters
treean uninitialized RBTree
compare_keysfunction to compare two keys
free_keyfunction to free a key
free_valuefunction to free a value
poolan optional memory pool for creating/destroying RBNodes or NULL

Initializes a RBTree.

Definition at line 54 of file rbtree.c.

◆ rbtree_iter_free()

void rbtree_iter_free ( RBTreeIter iter)
Parameters
itera RBTreeIter

Frees the iterator.

Definition at line 897 of file rbtree.c.

◆ rbtree_iter_get_key()

void * rbtree_iter_get_key ( const RBTreeIter iter)
Parameters
itera RBTreeIter
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
itera RBTreeIter
Returns
value of current element

Retrieves the value of the current element.

Definition at line 1015 of file rbtree.c.

◆ rbtree_iter_init()

void rbtree_iter_init ( const RBTree tree,
RBTreeIter iter 
)
Parameters
treea RBTree
iteran 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.

Definition at line 870 of file rbtree.c.

◆ rbtree_iter_next()

bool rbtree_iter_next ( RBTreeIter iter)
Parameters
itera RBTreeIter
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()

void rbtree_iter_reuse ( const RBTree tree,
RBTreeIter iter 
)
Parameters
treea RBTree
iteran already initialized RBTreeIter

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
treea RBTree
keya key
Returns
true if given key does exist

Checks if a key does exist.

Definition at line 622 of file rbtree.c.

◆ rbtree_lookup()

RBTreePair * rbtree_lookup ( RBTree tree,
const void *  key 
)
Parameters
treea RBTree
keykey to find
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()

RBTree * rbtree_new ( CompareFunc  compare_keys,
FreeFunc  free_key,
FreeFunc  free_value,
Pool pool 
)
Parameters
compare_keysfunction to compare two keys
free_keyfunction to free a key
free_valuefunction to free a value
poolan 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
paira key-value pair
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
paira key-value pair
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
paira RBTreePair
valuenew 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
treea RBTree
keykey 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()

RBTreeInsertResult rbtree_set ( RBTree tree,
void *  key,
void *  value,
bool  replace_key 
)
Parameters
treea RBTree
keykey of the item
valuevalue of the item
replace_keytrue 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.