Red-black tree. More...
Go to the source code of this file.
Defines | |
#define | RBTREE_H |
Defined when <sofia-sip/rbtree.h> has been included. | |
#define | RBTREE_PROTOS(SCOPE, prefix, Type) |
Define prototypes for red-black tree functions. | |
#define | RBTREE_BODIES(SCOPE, prefix, Type,left, right, parent,IS_RED, SET_RED, IS_BLACK, SET_BLACK, COPY_COLOR, CMP, INSERT, REMOVE) |
Define bodies for red-black tree functions. | |
Typedefs | |
typedef struct node | Type |
Type used for rbtree nodes. | |
Functions | |
int | rbtree_insert (Type **tree, Type *node, Type **return_old) |
Insert a node into the tree. | |
int | rbtree_append (Type **tree, Type *node) |
Append a node into the tree. | |
void | rbtree_remove (Type **tree, Type *node) |
Remove a node from the tree. | |
Type * | rbtree_succ (Type const *node) |
Return inorder successor of node node. | |
Type * | rbtree_prec (Type const *node) |
Return inorder precedessor of node node. | |
Type * | rbtree_first (Type const *node) |
Return first node in the tree to which node belongs to. | |
Type * | rbtree_last (Type const *node) |
Return last node in the tree to which node belongs to. | |
int | rbtree_height (Type const *node) |
Return height of the tree below node. |
Red-black tree.
This file contain a red-black-tree template for C. The red-black-tree is a balanced binary tree containing structures as nodes.
The prototypes for red-black-tree functions are declared with macro RBTREE_PROTOS(). The implementation is instantiated with macro RBTREE_BODIES().
When a entry with new identical key is added to the tree, it can be either inserted (replacing other node with same key value) or appended.
Example code can be found from <rbtree_test.c>.
#define RBTREE_BODIES | ( | SCOPE, | ||
prefix, | ||||
Type, | ||||
left, | ||||
right, | ||||
parent, | ||||
IS_RED, | ||||
SET_RED, | ||||
IS_BLACK, | ||||
SET_BLACK, | ||||
COPY_COLOR, | ||||
CMP, | ||||
INSERT, | ||||
REMOVE | ||||
) |
Define bodies for red-black tree functions.
SCOPE | function scope (e.g., su_inline) | |
prefix | function prefix (e.g., rbtree) | |
Type | node type | |
left | accessor of left node | |
right | accessor of right node | |
parent | accessor of parent node | |
IS_RED | predicate testing if node is red | |
SET_RED | setter marking node as red | |
IS_BLACK | predicate testing if node is black | |
SET_BLACK | setter marking node as black | |
COPY_COLOR | method copying color from node to another | |
CMP | method comparing two nodes | |
INSERT | setter marking node as inserted to the tree | |
REMOVE | method marking node as removed and possibly deleting node |
#define LEFT(node) ((node)->left) #define RIGHT(node) ((node)->right) #define PARENT(node) ((node)->parent) #define SET_RED(node) ((node)->black = 0) #define SET_BLACK(node) ((node)->black = 1) #define CMP(a, b) ((a)->value - (b)->value) #define IS_RED(node) ((node) && (node)->black == 0) #define IS_BLACK(node) (!(node) || (node)->black == 1) #define COPY_COLOR(dst, src) ((dst)->black = (src)->black) #define INSERT(node) ((node)->inserted = 1) #define REMOVE(node) ((node)->left = (node)->right = (node)->parent = NULL, \ (node)->inserted = 0) RBTREE_BODIES(su_inline, rbtree, struct node, LEFT, RIGHT, PARENT, IS_RED, SET_RED, IS_BLACK, SET_BLACK, COPY_COLOR, CMP, INSERT, REMOVE);
#define RBTREE_H |
Defined when <sofia-sip/rbtree.h> has been included.
#define RBTREE_PROTOS | ( | SCOPE, | ||
prefix, | ||||
Type | ||||
) |
Define prototypes for red-black tree functions.
SCOPE | function scope (e.g., su_inline) | |
prefix | function prefix (e.g., rbtree) | |
Type | node type |
RBTREE_PROTOS(su_inline, rbtree, struct node);
typedef struct node Type |
Type used for rbtree nodes.
Append a node into the tree.
tree | pointer to the root of the tree | |
node | pointer to node to be appended |
0 | when successful (always) |
Return first node in the tree to which node belongs to.
node | pointer to node |
int rbtree_height | ( | Type const * | node | ) |
Return height of the tree below node.
node | pointer to node |
Insert a node into the tree.
tree | pointer to the root of the tree | |
node | pointer to node to be inserted | |
return_old | return value parameter for matching node already in the tree |
0 | if node was inserted | |
-1 | if there already was an matching node and return_old is NULL. |
Return last node in the tree to which node belongs to.
node | pointer to node |
Return inorder precedessor of node node.
node | pointer to node |
Remove a node from the tree.
tree | pointer to the root of the tree | |
node | pointer to node to be appended |