📄 rbtree.h
字号:
/* * IPFlow Collector * Copyright (c) 2004 Christophe Fillot. * E-mail: cf@utc.fr * * rbtree.c: Red/Black Trees. */#ifndef __RBTREE_H__#define __RBTREE_H__ 1static const char rcsid_rbtree[] = "$Id$";#include <sys/types.h>#include "mempool.h"/* Comparison function for 2 keys */typedef int (*tree_fcompare)(void *key1,void *key2,void *opt);/* User function to call when using rbtree_foreach */typedef void (*tree_fforeach)(void *key,void *value,void *opt);/* Node colors */enum { RBTREE_RED = 0, RBTREE_BLACK,};/* * Description of a node in a Red/Black tree. To be more efficient, keys are * stored with a void * pointer, allowing to use different type keys. */typedef struct rbtree_node rbtree_node;struct rbtree_node { /* Key and Value */ void *key,*value; /* Left and right nodes */ rbtree_node *left,*right; /* Parent node */ rbtree_node *parent; /* Node color */ short color;};/* * Description of a Red/Black tree. For commodity, a name can be given to the * tree. "rbtree_comp" is a pointer to a function, defined by user, which * compares keys during node operations. */typedef struct rbtree_tree rbtree_tree;struct rbtree_tree { int node_count; /* Number of Nodes */ mempool_t mp; /* Memory pool */ rbtree_node nil; /* Sentinel */ rbtree_node *root; /* Root node */ tree_fcompare key_cmp; /* Key comparison function */ void *opt_data; /* Optional data for comparison */};/* Insert a node in an Red/Black tree */int rbtree_insert(rbtree_tree *tree,void *key,void *value);/* Removes a node out of a tree */void *rbtree_remove(rbtree_tree *tree,void *key);/* * Lookup for a node corresponding to "key". If node does not exist, * function returns null pointer. */void *rbtree_lookup(rbtree_tree *tree,void *key);/* Call the specified function for each node */int rbtree_foreach(rbtree_tree *tree,tree_fforeach user_fn,void *opt);/* Compute the height of a Red/Black tree */int rbtree_height(rbtree_tree *tree);/* Returns the number of nodes */int rbtree_node_count(rbtree_tree *tree);/* Purge all nodes */void rbtree_purge(rbtree_tree *tree);/* Check tree consistency */int rbtree_check(rbtree_tree *tree);/* Create a new Red/Black tree */rbtree_tree *rbtree_create(tree_fcompare key_cmp,void *opt_data);/* Delete an Red/Black tree */void rbtree_delete(rbtree_tree *tree);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -