61 #define RBTNIL (&sentinel)
212 y->parent =
x->parent;
215 if (
x ==
x->parent->left)
218 x->parent->right =
y;
245 y->right->parent =
x;
249 y->parent =
x->parent;
252 if (
x ==
x->parent->right)
253 x->parent->right =
y;
306 if (
x->parent ==
x->parent->parent->left)
315 x->parent->parent->color =
RBTRED;
317 x =
x->parent->parent;
322 if (
x ==
x->parent->right)
331 x->parent->parent->color =
RBTRED;
346 x->parent->parent->color =
RBTRED;
348 x =
x->parent->parent;
353 if (
x ==
x->parent->left)
359 x->parent->parent->color =
RBTRED;
475 if (
x ==
x->parent->left)
485 w =
x->parent->right;
502 w =
x->parent->right;
504 w->
color =
x->parent->color;
541 w->
color =
x->parent->color;
591 x->parent =
y->parent;
594 if (
y ==
y->parent->left)
597 y->parent->right =
x;
756 elog(
ERROR,
"unrecognized rbtree iteration order: %d", ctrl);
Assert(fmt[strlen(fmt) - 1] !='\n')
RBTNode * rbt_iterate(RBTreeIterator *iter)
static void rbt_delete_fixup(RBTree *rbt, RBTNode *x)
static void rbt_rotate_right(RBTree *rbt, RBTNode *x)
RBTNode * rbt_insert(RBTree *rbt, const RBTNode *data, bool *isNew)
static void rbt_insert_fixup(RBTree *rbt, RBTNode *x)
static void rbt_rotate_left(RBTree *rbt, RBTNode *x)
void rbt_begin_iterate(RBTree *rbt, RBTOrderControl ctrl, RBTreeIterator *iter)
static void rbt_delete_node(RBTree *rbt, RBTNode *z)
RBTree * rbt_create(Size node_size, rbt_comparator comparator, rbt_combiner combiner, rbt_allocfunc allocfunc, rbt_freefunc freefunc, void *arg)
static void rbt_copy_data(RBTree *rbt, RBTNode *dest, const RBTNode *src)
RBTNode * rbt_leftmost(RBTree *rbt)
static RBTNode * rbt_right_left_iterator(RBTreeIterator *iter)
static RBTNode * rbt_left_right_iterator(RBTreeIterator *iter)
void rbt_delete(RBTree *rbt, RBTNode *node)
RBTNode * rbt_find(RBTree *rbt, const RBTNode *data)
RBTNode *(* rbt_allocfunc)(void *arg)
void(* rbt_freefunc)(RBTNode *x, void *arg)
void(* rbt_combiner)(RBTNode *existing, const RBTNode *newdata, void *arg)
int(* rbt_comparator)(const RBTNode *a, const RBTNode *b, void *arg)
static int cmp(const chr *x, const chr *y, size_t len)
RBTNode *(* iterate)(RBTreeIterator *iter)
rbt_comparator comparator