Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef RBTREE_H
00014 #define RBTREE_H
00015
00016
00017
00018
00019
00020
00021
00022
00023 typedef struct RBNode
00024 {
00025 char iteratorState;
00026 char color;
00027 struct RBNode *left;
00028 struct RBNode *right;
00029 struct RBNode *parent;
00030 } RBNode;
00031
00032
00033 typedef struct RBTree RBTree;
00034
00035
00036 typedef enum RBOrderControl
00037 {
00038 LeftRightWalk,
00039 RightLeftWalk,
00040 DirectWalk,
00041 InvertedWalk
00042 } RBOrderControl;
00043
00044
00045 typedef int (*rb_comparator) (const RBNode *a, const RBNode *b, void *arg);
00046 typedef void (*rb_combiner) (RBNode *existing, const RBNode *newdata, void *arg);
00047 typedef RBNode *(*rb_allocfunc) (void *arg);
00048 typedef void (*rb_freefunc) (RBNode *x, void *arg);
00049
00050 extern RBTree *rb_create(Size node_size,
00051 rb_comparator comparator,
00052 rb_combiner combiner,
00053 rb_allocfunc allocfunc,
00054 rb_freefunc freefunc,
00055 void *arg);
00056
00057 extern RBNode *rb_find(RBTree *rb, const RBNode *data);
00058 extern RBNode *rb_leftmost(RBTree *rb);
00059
00060 extern RBNode *rb_insert(RBTree *rb, const RBNode *data, bool *isNew);
00061 extern void rb_delete(RBTree *rb, RBNode *node);
00062
00063 extern void rb_begin_iterate(RBTree *rb, RBOrderControl ctrl);
00064 extern RBNode *rb_iterate(RBTree *rb);
00065
00066 #endif