Lumiera
0.pre.03
»edit your freedom«
|
Go to the source code of this file.
Probabilistic splay tree implementation.
Definition in file psplay.c.
#include "include/logging.h"
#include "lib/psplay.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <nobug.h>
Classes | |
struct | psplaytrail |
Functions | |
void | psplay_delete (PSplay self) |
Delete a splay tree Frees all elements and associated resources of a splay tree and then itseld. More... | |
void | psplay_delete_key (PSplay self, void *key) |
Delete a node by key from a splay tree. More... | |
void | psplay_delete_node (PSplay self, PSplaynode node) |
Delete a node from a splay tree. More... | |
PSplay | psplay_destroy (PSplay self) |
Destroy a splay tree Frees all elements and associated resources of a splay tree. More... | |
void | psplay_dump (PSplay self, FILE *dest) |
static uint32_t | psplay_fast_prng () |
PSplaynode | psplay_find (PSplay self, const void *key, int splayfactor) |
Find a element in a splay tree. More... | |
static int | psplay_handle (PSplay self, PSplaynode node, psplay_delete_fn res) |
PSplay | psplay_init (PSplay self, psplay_cmp_fn cmp, psplay_key_fn key, psplay_delete_fn del) |
Initialize a splay tree. More... | |
PSplaynode | psplay_insert (PSplay self, PSplaynode node, int splayfactor) |
Insert a element into a splay tree. More... | |
PSplay | psplay_new (psplay_cmp_fn cmp, psplay_key_fn key, psplay_delete_fn del) |
Allocate a splay tree. More... | |
static psplay_delete_fn | psplay_print_node (PSplaynode node, const enum psplay_order_enum which, int level, void *data) |
PSplaynode | psplay_remove (PSplay self, PSplaynode node) |
Remove a node from a splay tree. More... | |
PSplaynode | psplay_remove_key (PSplay self, void *key) |
Remove a node by key from a splay tree. More... | |
static void | psplay_splay (PSplay self, struct psplaytrail *trail, unsigned splayfactor) |
int | psplay_walk (PSplay self, PSplaynode node, psplay_action_fn action, int level, void *data) |
Start a tree traversal. More... | |
PSplaynode | psplaynode_init (PSplaynode self) |
Initialise a splay tree node The user has to place this nodes within his datastructure and must Initialise them before using them. More... | |
static unsigned | trailidx (unsigned n) |
Variables | |
const psplay_delete_fn | PSPLAY_CONT = (psplay_delete_fn)0x0 |
const psplay_delete_fn | PSPLAY_REMOVE = (psplay_delete_fn)0x2 |
const psplay_delete_fn | PSPLAY_STOP = (psplay_delete_fn)0x1 |
struct psplaytrail |
PSplay psplay_init | ( | PSplay | self, |
psplay_cmp_fn | cmp, | ||
psplay_key_fn | key, | ||
psplay_delete_fn | del | ||
) |
Initialize a splay tree.
self | pointer to the psplay structure |
cmp | user supplied compare function |
key | user supplied function to retrieve a key |
delete | user supplied destructor function or NULL if no destructor is necessary |
Definition at line 66 of file psplay.c.
Referenced by lumiera_config_lookup_init(), and psplay_nelements().
PSplay psplay_new | ( | psplay_cmp_fn | cmp, |
psplay_key_fn | key, | ||
psplay_delete_fn | del | ||
) |
PSplay psplay_destroy | ( | PSplay | self | ) |
Destroy a splay tree Frees all elements and associated resources of a splay tree.
self | pointer to the psplay structure |
Definition at line 101 of file psplay.c.
References psplay_remove().
Referenced by lumiera_config_lookup_destroy(), and psplay_delete().
void psplay_delete | ( | PSplay | self | ) |
Delete a splay tree Frees all elements and associated resources of a splay tree and then itseld.
self | pointer to the psplay structure |
Definition at line 115 of file psplay.c.
References psplay_destroy().
PSplaynode psplaynode_init | ( | PSplaynode | self | ) |
Initialise a splay tree node The user has to place this nodes within his datastructure and must Initialise them before using them.
self | pointer to the node to be initialised |
Definition at line 122 of file psplay.c.
Referenced by lumiera_plugin_new().
PSplaynode psplay_insert | ( | PSplay | self, |
PSplaynode | node, | ||
int | splayfactor | ||
) |
Insert a element into a splay tree.
self | pointer to the splay tree |
node | pointer to the node to be inserted |
splayfactor | weight for the probabilistic splaying, 0 disables the splaying, 100 is the expected normal value use 100 when in doubt |
PSplaynode psplay_find | ( | PSplay | self, |
const void * | key, | ||
int | splayfactor | ||
) |
Find a element in a splay tree.
self | pointer to the splay tree |
key | pointer to the key to be searched |
splayfactor | weight for the probabilistic splaying, 0 disables the splaying, 100 is the expected normal value |
Definition at line 300 of file psplay.c.
Referenced by lumiera_config_lookup_find(), and psplay_remove_key().
PSplaynode psplay_remove | ( | PSplay | self, |
PSplaynode | node | ||
) |
Remove a node from a splay tree.
self | pointer to the splay tree |
node | node to be removed |
Definition at line 340 of file psplay.c.
Referenced by psplay_destroy(), and psplay_remove_key().
PSplaynode psplay_remove_key | ( | PSplay | self, |
void * | key | ||
) |
Remove a node by key from a splay tree.
self | pointer to the splay tree |
key | key of the node to be removed |
Definition at line 391 of file psplay.c.
References psplay_find(), and psplay_remove().
void psplay_delete_node | ( | PSplay | self, |
PSplaynode | node | ||
) |
Delete a node from a splay tree.
self | pointer to the splay tree |
node | node to be removed Calls the registered delete handler, frees all resources. |
Definition at line 398 of file psplay.c.
Referenced by lumiera_config_lookup_remove().
void psplay_delete_key | ( | PSplay | self, |
void * | key | ||
) |
int psplay_walk | ( | PSplay | self, |
PSplaynode | node, | ||
psplay_action_fn | action, | ||
int | level, | ||
void * | data | ||
) |
Start a tree traversal.
self | the tree to be traversed |
node | pointer to root node where traversal shall start, use NULL for the whole tree |
action | handler function as defined above |
level | initial value for the level |
data | user supplied data which is transparently passed to the action |