qLibc
|
Tree Table container that implements "Left-Leaning Red-Black" BST algorithm. More...
Go to the source code of this file.
Functions | |
qtreetbl_t * | qtreetbl (int options) |
Initialize a tree table. More... | |
void | qtreetbl_set_compare (qtreetbl_t *tbl, int(*cmp)(const void *name1, size_t namesize1, const void *name2, size_t namesize2)) |
qtreetbl->set_compare(): Set user comparator. More... | |
bool | qtreetbl_put (qtreetbl_t *tbl, const char *name, const void *data, size_t datasize) |
qtreetbl->put(): Put an object into this table with string type key. More... | |
bool | qtreetbl_putstr (qtreetbl_t *tbl, const char *name, const char *str) |
qtreetbl->putstr(): Put a string into this table. More... | |
bool | qtreetbl_putstrf (qtreetbl_t *tbl, const char *name, const char *format,...) |
qtreetbl->putstrf(): Put a formatted string into this table. More... | |
bool | qtreetbl_put_by_obj (qtreetbl_t *tbl, const void *name, size_t namesize, const void *data, size_t datasize) |
qtreetbl->put_by_obj(): Put an object data into this table with an object name. More... | |
void * | qtreetbl_get (qtreetbl_t *tbl, const char *name, size_t *datasize, bool newmem) |
qtreetbl->get(): Get an object from this table. More... | |
char * | qtreetbl_getstr (qtreetbl_t *tbl, const char *name, const bool newmem) |
qtreetbl->getstr(): Finds an object and returns as string type. More... | |
void * | qtreetbl_get_by_obj (qtreetbl_t *tbl, const char *name, size_t namesize, size_t *datasize, bool newmem) |
qtreetbl->get_by_obj(): Get an object from this table with an object name. More... | |
bool | qtreetbl_remove (qtreetbl_t *tbl, const char *name) |
qtreetbl->remove(): Remove an object from this table. More... | |
bool | qtreetbl_remove_by_obj (qtreetbl_t *tbl, const void *name, size_t namesize) |
qtreetbl->remove(): Remove an object from this table with an object name. More... | |
bool | qtreetbl_getnext (qtreetbl_t *tbl, qtreetbl_obj_t *obj, const bool newmem) |
qhashtbl->getnext(): Get next element. More... | |
void * | qtreetbl_find_min (qtreetbl_t *tbl, size_t *namesize) |
qtreetbl->find_min(): Find the name of very left object. More... | |
void * | qtreetbl_find_max (qtreetbl_t *tbl, size_t *namesize) |
qtreetbl->find_max(): Find the name of very right object. More... | |
qtreetbl_obj_t | qtreetbl_find_nearest (qtreetbl_t *tbl, const void *name, size_t namesize, bool newmem) |
qtreetbl->find_nearest(): Find equal or nearest object. More... | |
size_t | qtreetbl_size (qtreetbl_t *tbl) |
qtreetbl->size(): Returns the number of keys in the table. More... | |
void | qtreetbl_clear (qtreetbl_t *tbl) |
qtreetbl->clear(): Clears the table so that it contains no keys. More... | |
void | qtreetbl_lock (qtreetbl_t *tbl) |
qtreetbl->lock(): Enter critical section. More... | |
void | qtreetbl_unlock (qtreetbl_t *tbl) |
qtreetbl->unlock(): Leave critical section. More... | |
void | qtreetbl_free (qtreetbl_t *tbl) |
qtreetbl->free(): De-allocate the table More... | |
int | qtreetbl_byte_cmp (const void *name1, size_t namesize1, const void *name2, size_t namesize2) |
bool | qtreetbl_debug (qtreetbl_t *tbl, FILE *out) |
qtreetbl->debug(): Print hash table for debugging purpose More... | |
Tree Table container that implements "Left-Leaning Red-Black" BST algorithm.
qtreetbl implements a binary search tree that allows efficient in-order traversal with O(log n) search time.
The algorithm qtreetbl specifically implements is left-leaning red-black tree algorithm invented in 2008 by Robert Sedgewick. A left-leaning red–black tree is a type of self-balancing binary search tree and it is a variant of the red–black tree which was invented in 1972 by Rudolf Bayer.
References:
Following example code will construct the data structure shown in below diagram. This example is quoted from the inventor's presentation slide p24-p25, http://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf and used in unit tests for verification purpose.
(E) ______________|______________ / \ (C) (R) / \ / \ (A,B) (D) (I,N) (S,X) <2-3-4 Tree Data Structure> E ______________|______________ / \ C R _______|_______ _______|_______ / \ / \ B D N X // // // A* I* S* Tree Info : tot=10, red=3, black=-7, root=E Nodes A, I and S are nodes with RED upper link. Others are BLACK <Left-Leaning Red-Black Tree Data Structure>
Red-Black BST algorithm has been one of the famous BST algorithm especially for in-memory operation. It's been using in all around the computing area. I was very impressed about this variant, Left-Leaning version of Red-Black about how it improves the performance and reduces the overall complexity. Since it's relatively new algorithm, there's not many of practically functional working codes yet other than proof of concept kinds. Here's one of fully functional codes and I, Seungyoung Kim, would like to dedicate this code to the genius inventor Robert Sedgewick and to all the great qLibc users. Cheers!
Unique features:
Definition in file qtreetbl.c.
qtreetbl_t* qtreetbl | ( | int | options | ) |
Initialize a tree table.
options | combination of initialization options. |
errno | will be set in error condition.
|
Definition at line 171 of file qtreetbl.c.
void qtreetbl_set_compare | ( | qtreetbl_t * | tbl, |
int(*)(const void *name1, size_t namesize1, const void *name2, size_t namesize2) | cmp | ||
) |
qtreetbl->set_compare(): Set user comparator.
tbl | qtreetbl_t container pointer. |
cmp | a pointer to the user comparator function. |
Definition at line 240 of file qtreetbl.c.
bool qtreetbl_put | ( | qtreetbl_t * | tbl, |
const char * | name, | ||
const void * | data, | ||
size_t | datasize | ||
) |
qtreetbl->put(): Put an object into this table with string type key.
tbl | qtreetbl_t container pointer. |
name | key name |
data | data object |
datasize | size of data object |
errno | will be set in error condition.
|
Definition at line 260 of file qtreetbl.c.
bool qtreetbl_putstr | ( | qtreetbl_t * | tbl, |
const char * | name, | ||
const char * | str | ||
) |
qtreetbl->putstr(): Put a string into this table.
tbl | qtreetbl container pointer. |
name | key name. |
str | string data. |
errno | will be set in error condition.
|
Definition at line 279 of file qtreetbl.c.
bool qtreetbl_putstrf | ( | qtreetbl_t * | tbl, |
const char * | name, | ||
const char * | format, | ||
... | |||
) |
qtreetbl->putstrf(): Put a formatted string into this table.
tbl | qtreetbl_t container pointer. |
name | key name. |
format | formatted string data. |
errno | will be set in error condition.
|
Definition at line 297 of file qtreetbl.c.
bool qtreetbl_put_by_obj | ( | qtreetbl_t * | tbl, |
const void * | name, | ||
size_t | namesize, | ||
const void * | data, | ||
size_t | datasize | ||
) |
qtreetbl->put_by_obj(): Put an object data into this table with an object name.
tbl | qtreetbl_t container pointer. |
name | key name |
namesize | key size |
data | data object |
datasize | size of data object |
errno | will be set in error condition.
|
Definition at line 328 of file qtreetbl.c.
void* qtreetbl_get | ( | qtreetbl_t * | tbl, |
const char * | name, | ||
size_t * | datasize, | ||
bool | newmem | ||
) |
qtreetbl->get(): Get an object from this table.
tbl | qtreetbl_t container pointer. |
name | key name. |
datasize | if not NULL, oject size will be stored. |
newmem | whether or not to allocate memory for the data. |
errno | will be set in error condition.
|
Definition at line 384 of file qtreetbl.c.
char* qtreetbl_getstr | ( | qtreetbl_t * | tbl, |
const char * | name, | ||
const bool | newmem | ||
) |
qtreetbl->getstr(): Finds an object and returns as string type.
tbl | qtreetbl_t container pointer. |
name | key name |
newmem | whether or not to allocate memory for the data. |
errno | will be set in error condition.
|
Definition at line 410 of file qtreetbl.c.
void* qtreetbl_get_by_obj | ( | qtreetbl_t * | tbl, |
const char * | name, | ||
size_t | namesize, | ||
size_t * | datasize, | ||
bool | newmem | ||
) |
qtreetbl->get_by_obj(): Get an object from this table with an object name.
tbl | qtreetbl_t container pointer. |
name | key name |
namesize | key size |
datasize | if not NULL, oject size will be stored. |
newmem | whether or not to allocate memory for the data. |
errno | will be set in error condition.
|
Definition at line 437 of file qtreetbl.c.
bool qtreetbl_remove | ( | qtreetbl_t * | tbl, |
const char * | name | ||
) |
qtreetbl->remove(): Remove an object from this table.
tbl | qtreetbl_t container pointer. |
name | key name |
errno | will be set in error condition.
|
Definition at line 468 of file qtreetbl.c.
bool qtreetbl_remove_by_obj | ( | qtreetbl_t * | tbl, |
const void * | name, | ||
size_t | namesize | ||
) |
qtreetbl->remove(): Remove an object from this table with an object name.
tbl | qtreetbl_t container pointer. |
name | key name |
name | key size |
errno | will be set in error condition.
|
Definition at line 485 of file qtreetbl.c.
bool qtreetbl_getnext | ( | qtreetbl_t * | tbl, |
qtreetbl_obj_t * | obj, | ||
const bool | newmem | ||
) |
qhashtbl->getnext(): Get next element.
tbl | qhashtbl_t container pointer. |
obj | found data will be stored in this object |
newmem | whether or not to allocate memory for the data. |
errno | will be set in error condition.
|
Definition at line 578 of file qtreetbl.c.
void* qtreetbl_find_min | ( | qtreetbl_t * | tbl, |
size_t * | namesize | ||
) |
qtreetbl->find_min(): Find the name of very left object.
tbl | qtreetbl_t container pointer. |
namesize | if not NULL, the size of key name will be stored. |
Definition at line 632 of file qtreetbl.c.
void* qtreetbl_find_max | ( | qtreetbl_t * | tbl, |
size_t * | namesize | ||
) |
qtreetbl->find_max(): Find the name of very right object.
tbl | qtreetbl_t container pointer. |
namesize | if not NULL, the size of key name will be stored. |
Definition at line 660 of file qtreetbl.c.
qtreetbl_obj_t qtreetbl_find_nearest | ( | qtreetbl_t * | tbl, |
const void * | name, | ||
size_t | namesize, | ||
bool | newmem | ||
) |
qtreetbl->find_nearest(): Find equal or nearest object.
find_nearest() returns matching key or nearest key. If there's no keys in the table. It'll return empty qtreetbl_obj_t object with errno ENOENT.
tbl | qtreetbl_t container pointer. |
name | key name |
namesize | key size |
newmem | whether or not to allocate memory for the data. |
errno | will be set in error condition.
|
Definition at line 712 of file qtreetbl.c.
size_t qtreetbl_size | ( | qtreetbl_t * | tbl | ) |
qtreetbl->size(): Returns the number of keys in the table.
tbl | qtreetbl_t container pointer. |
Definition at line 777 of file qtreetbl.c.
void qtreetbl_clear | ( | qtreetbl_t * | tbl | ) |
qtreetbl->clear(): Clears the table so that it contains no keys.
tbl | qtreetbl_t container pointer. |
Definition at line 786 of file qtreetbl.c.
void qtreetbl_lock | ( | qtreetbl_t * | tbl | ) |
qtreetbl->lock(): Enter critical section.
tbl | qtreetbl_t container pointer. |
Definition at line 807 of file qtreetbl.c.
void qtreetbl_unlock | ( | qtreetbl_t * | tbl | ) |
qtreetbl->unlock(): Leave critical section.
tbl | qtreetbl_t container pointer. |
Definition at line 820 of file qtreetbl.c.
void qtreetbl_free | ( | qtreetbl_t * | tbl | ) |
qtreetbl->free(): De-allocate the table
tbl | qtreetbl_t container pointer. |
Definition at line 829 of file qtreetbl.c.
bool qtreetbl_debug | ( | qtreetbl_t * | tbl, |
FILE * | out | ||
) |
qtreetbl->debug(): Print hash table for debugging purpose
tbl | qtreetbl_t container pointer. |
out | output stream |
errno | will be set in error condition.
|
Definition at line 854 of file qtreetbl.c.