43 lines
699 B
C
43 lines
699 B
C
#ifndef RBTREE_H_
|
|
#define RBTREE_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef enum RBColor RBColor;
|
|
enum RBColor {
|
|
Red,
|
|
Black
|
|
};
|
|
|
|
typedef struct RBNode RBNode;
|
|
struct RBNode {
|
|
unsigned char color; //Red/Black
|
|
RBNode *parent;
|
|
RBNode *right;
|
|
RBNode *left;
|
|
void *data;
|
|
};
|
|
|
|
typedef struct RBTree RBTree;
|
|
struct RBTree {
|
|
RBNode *node;
|
|
int (*compare)(const void *a, const void *b);
|
|
};
|
|
|
|
void uc_rb_remove(RBTree *root, RBNode *node);
|
|
RBNode *uc_rb_find(RBTree *root, const void *val);
|
|
RBNode *uc_rb_insert(RBTree *root, RBNode *child);
|
|
RBNode *uc_rb_first(const RBTree *root);
|
|
RBNode *uc_rb_next(RBNode *node);
|
|
RBNode *uc_rb_last(const RBTree *root);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif
|
|
|