35#define RED ((uintptr_t)0x1u)
36#define BLACK ((uintptr_t)0x0u)
37#define COLOR(node) ((node)->parent & RED)
38#define IS_RED(node) ( (node) != NULL && COLOR(node) )
39#define IS_BLACK(node) ( (node) == NULL || !COLOR(node) )
40#define MAKE_RED(node) do { (node)->parent |= RED; } while(0)
41#define MAKE_BLACK(node) do { (node)->parent &= ~RED; } while(0)
44#define OPPOSITE(dir) ( 1 - (dir) )
45#define PARENT(node) ( (SCIP_RBTREENODE*)((node)->parent & ~RED) )
46#define SET_PARENT(n, p) do { (n)->parent = (uintptr_t)(p) | COLOR(n); } while(0)
47#define SET_COLOR(n, c) do { if( c == RED ) { MAKE_RED(n); } else { MAKE_BLACK(n); } } while(0)
72 else if(
x ==
p->child[
dir] )
110 if( z ==
p->child[
dir] )
203 else if(
u ==
up->child[
LEFT] )
assert(minobj< SCIPgetCutoffbound(scip))
void SCIPrbtreeDelete_call(SCIP_RBTREENODE **root, SCIP_RBTREENODE *node)
void SCIPrbtreeInsert_call(SCIP_RBTREENODE **root, SCIP_RBTREENODE *parent, int pos, SCIP_RBTREENODE *node)
SCIP_RBTREENODE * SCIPrbtreeFirst_call(SCIP_RBTREENODE *root)
static void rbRotate(SCIP_RBTREENODE **root, SCIP_RBTREENODE *x, int dir)
static void rbInsertFixup(SCIP_RBTREENODE **root, SCIP_RBTREENODE *z)
static void rbTransplant(SCIP_RBTREENODE **root, SCIP_RBTREENODE *u, SCIP_RBTREENODE *v, SCIP_RBTREENODE *nil)
SCIP_RBTREENODE * SCIPrbtreePredecessor_call(SCIP_RBTREENODE *x)
SCIP_RBTREENODE * SCIPrbtreeLast_call(SCIP_RBTREENODE *root)
SCIP_RBTREENODE * SCIPrbtreeSuccessor_call(SCIP_RBTREENODE *x)
static void rbDeleteFixup(SCIP_RBTREENODE **root, SCIP_RBTREENODE *x, SCIP_RBTREENODE *nil)
intrusive red black tree datastructure
#define SCIPrbtreeFirst(root)
SCIP_RBTREENODE * child[2]