Annotation of cf/rbtree.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * IPFlow Collector
                      3:  * Copyright (c) 2004 Christophe Fillot.
                      4:  * E-mail: [email protected]
                      5:  *
                      6:  * rbtree.c: Red/Black Trees.
                      7:  */
                      8: 
                      9: #ifndef __RBTREE_H__
                     10: #define __RBTREE_H__   1
                     11: 
                     12: static const char rcsid_rbtree[] = "$Id$";
                     13: 
                     14: #include <sys/types.h>
                     15: 
                     16: /* Comparison function for 2 keys */
                     17: typedef int (*tree_fcompare)(void *key1,void *key2,void *opt);
                     18: 
                     19: /* User function to call when using rbtree_foreach */
                     20: typedef void (*tree_fforeach)(void *key,void *value,void *opt);
                     21: 
                     22: /* Node colors */
                     23: enum {
                     24:    RBTREE_RED = 0,
                     25:    RBTREE_BLACK,
                     26: };
                     27: 
                     28: /*
                     29:  * Description of a node in a Red/Black tree. To be more efficient, keys are
                     30:  * stored with a void * pointer, allowing to use different type keys.
                     31:  */
                     32: typedef struct rbtree_node rbtree_node;
                     33: struct rbtree_node {
                     34:    /* Key and Value */
                     35:    void *key,*value;
                     36: 
                     37:    /* Left and right nodes */
                     38:    rbtree_node *left,*right;
                     39: 
                     40:    /* Parent node */
                     41:    rbtree_node *parent;
                     42: 
                     43:    /* Node color */
                     44:    short color;
                     45: };
                     46: 
                     47: /*
                     48:  * Description of a Red/Black tree. For commodity, a name can be given to the
                     49:  * tree. "rbtree_comp" is a pointer to a function, defined by user, which
                     50:  * compares keys during node operations.
                     51:  */
                     52: typedef struct rbtree_tree rbtree_tree;
                     53: struct rbtree_tree {
                     54:    int node_count;              /* Number of Nodes */
                     55:    rbtree_node nil;             /* Sentinel */
                     56:    rbtree_node *root;           /* Root node */
                     57:    tree_fcompare key_cmp;       /* Key comparison function */
                     58:    void *opt_data;              /* Optional data for comparison */
                     59: };
                     60: 
                     61: /* Insert a node in an Red/Black tree */
                     62: int rbtree_insert(rbtree_tree *tree,void *key,void *value);
                     63: 
                     64: /* Removes a node out of a tree */
                     65: void *rbtree_remove(rbtree_tree *tree,void *key);
                     66: 
                     67: /* 
                     68:  * Lookup for a node corresponding to "key". If node does not exist, 
                     69:  * function returns null pointer.
                     70:  */
                     71: void *rbtree_lookup(rbtree_tree *tree,void *key);
                     72: 
                     73: /* Call the specified function for each node */
                     74: int rbtree_foreach(rbtree_tree *tree,tree_fforeach user_fn,void *opt);
                     75: 
                     76: /* Compute the height of a Red/Black tree */
                     77: int rbtree_height(rbtree_tree *tree);
                     78: 
                     79: /* Returns the number of nodes */
                     80: int rbtree_node_count(rbtree_tree *tree);
                     81: 
                     82: /* Purge all nodes */
                     83: void rbtree_purge(rbtree_tree *tree);
                     84: 
                     85: /* Check tree consistency */
                     86: int rbtree_check(rbtree_tree *tree);
                     87: 
                     88: /* Create a new Red/Black tree */
                     89: rbtree_tree *rbtree_create(tree_fcompare key_cmp,void *opt_data);
                     90: 
                     91: /* Delete an Red/Black tree */
                     92: void rbtree_delete(rbtree_tree *tree);
                     93: 
                     94: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.