Rizin
unix-like reverse engineering framework and cli tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Friends Macros Modules Pages
tree.h File Reference

Go to the source code of this file.

Macros

#define UV__UNUSED
 
#define SPLAY_HEAD(name, type)
 
#define SPLAY_INITIALIZER(root)    { NULL }
 
#define SPLAY_INIT(root)
 
#define SPLAY_ENTRY(type)
 
#define SPLAY_LEFT(elm, field)   (elm)->field.spe_left
 
#define SPLAY_RIGHT(elm, field)   (elm)->field.spe_right
 
#define SPLAY_ROOT(head)   (head)->sph_root
 
#define SPLAY_EMPTY(head)   (SPLAY_ROOT(head) == NULL)
 
#define SPLAY_ROTATE_RIGHT(head, tmp, field)
 
#define SPLAY_ROTATE_LEFT(head, tmp, field)
 
#define SPLAY_LINKLEFT(head, tmp, field)
 
#define SPLAY_LINKRIGHT(head, tmp, field)
 
#define SPLAY_ASSEMBLE(head, node, left, right, field)
 
#define SPLAY_PROTOTYPE(name, type, field, cmp)
 
#define SPLAY_GENERATE(name, type, field, cmp)
 
#define SPLAY_NEGINF   -1
 
#define SPLAY_INF   1
 
#define SPLAY_INSERT(name, x, y)   name##_SPLAY_INSERT(x, y)
 
#define SPLAY_REMOVE(name, x, y)   name##_SPLAY_REMOVE(x, y)
 
#define SPLAY_FIND(name, x, y)   name##_SPLAY_FIND(x, y)
 
#define SPLAY_NEXT(name, x, y)   name##_SPLAY_NEXT(x, y)
 
#define SPLAY_MIN(name, x)
 
#define SPLAY_MAX(name, x)
 
#define SPLAY_FOREACH(x, name, head)
 
#define RB_HEAD(name, type)
 
#define RB_INITIALIZER(root)    { NULL }
 
#define RB_INIT(root)
 
#define RB_BLACK   0
 
#define RB_RED   1
 
#define RB_ENTRY(type)
 
#define RB_LEFT(elm, field)   (elm)->field.rbe_left
 
#define RB_RIGHT(elm, field)   (elm)->field.rbe_right
 
#define RB_PARENT(elm, field)   (elm)->field.rbe_parent
 
#define RB_COLOR(elm, field)   (elm)->field.rbe_color
 
#define RB_ROOT(head)   (head)->rbh_root
 
#define RB_EMPTY(head)   (RB_ROOT(head) == NULL)
 
#define RB_SET(elm, parent, field)
 
#define RB_SET_BLACKRED(black, red, field)
 
#define RB_AUGMENT(x)   do {} while (0)
 
#define RB_ROTATE_LEFT(head, elm, tmp, field)
 
#define RB_ROTATE_RIGHT(head, elm, tmp, field)
 
#define RB_PROTOTYPE(name, type, field, cmp)    RB_PROTOTYPE_INTERNAL(name, type, field, cmp,)
 
#define RB_PROTOTYPE_STATIC(name, type, field, cmp)    RB_PROTOTYPE_INTERNAL(name, type, field, cmp, UV__UNUSED static)
 
#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr)
 
#define RB_GENERATE(name, type, field, cmp)    RB_GENERATE_INTERNAL(name, type, field, cmp,)
 
#define RB_GENERATE_STATIC(name, type, field, cmp)    RB_GENERATE_INTERNAL(name, type, field, cmp, UV__UNUSED static)
 
#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr)
 
#define RB_NEGINF   -1
 
#define RB_INF   1
 
#define RB_INSERT(name, x, y)   name##_RB_INSERT(x, y)
 
#define RB_REMOVE(name, x, y)   name##_RB_REMOVE(x, y)
 
#define RB_FIND(name, x, y)   name##_RB_FIND(x, y)
 
#define RB_NFIND(name, x, y)   name##_RB_NFIND(x, y)
 
#define RB_NEXT(name, x, y)   name##_RB_NEXT(y)
 
#define RB_PREV(name, x, y)   name##_RB_PREV(y)
 
#define RB_MIN(name, x)   name##_RB_MINMAX(x, RB_NEGINF)
 
#define RB_MAX(name, x)   name##_RB_MINMAX(x, RB_INF)
 
#define RB_FOREACH(x, name, head)
 
#define RB_FOREACH_FROM(x, name, y)
 
#define RB_FOREACH_SAFE(x, name, head, y)
 
#define RB_FOREACH_REVERSE(x, name, head)
 
#define RB_FOREACH_REVERSE_FROM(x, name, y)
 
#define RB_FOREACH_REVERSE_SAFE(x, name, head, y)
 

Macro Definition Documentation

◆ RB_AUGMENT

#define RB_AUGMENT (   x)    do {} while (0)

Definition at line 337 of file tree.h.

◆ RB_BLACK

#define RB_BLACK   0

Definition at line 308 of file tree.h.

◆ RB_COLOR

#define RB_COLOR (   elm,
  field 
)    (elm)->field.rbe_color

Definition at line 321 of file tree.h.

◆ RB_EMPTY

#define RB_EMPTY (   head)    (RB_ROOT(head) == NULL)

Definition at line 323 of file tree.h.

◆ RB_ENTRY

#define RB_ENTRY (   type)
Value:
struct { \
struct type *rbe_left; /* left element */ \
struct type *rbe_right; /* right element */ \
struct type *rbe_parent; /* parent element */ \
int rbe_color; /* node color */ \
}
int type
Definition: mipsasm.c:17

Definition at line 310 of file tree.h.

◆ RB_FIND

#define RB_FIND (   name,
  x,
 
)    name##_RB_FIND(x, y)

Definition at line 729 of file tree.h.

◆ RB_FOREACH

#define RB_FOREACH (   x,
  name,
  head 
)
Value:
for ((x) = RB_MIN(name, head); \
(x) != NULL; \
(x) = name##_RB_NEXT(x))
#define NULL
Definition: cris-opc.c:27
#define RB_MIN(name, x)
Definition: tree.h:733
int x
Definition: mipsasm.c:20
Definition: z80asm.h:102

Definition at line 736 of file tree.h.

◆ RB_FOREACH_FROM

#define RB_FOREACH_FROM (   x,
  name,
 
)
Value:
for ((x) = (y); \
((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \
(x) = (y))

Definition at line 741 of file tree.h.

◆ RB_FOREACH_REVERSE

#define RB_FOREACH_REVERSE (   x,
  name,
  head 
)
Value:
for ((x) = RB_MAX(name, head); \
(x) != NULL; \
(x) = name##_RB_PREV(x))
#define RB_MAX(name, x)
Definition: tree.h:734

Definition at line 751 of file tree.h.

◆ RB_FOREACH_REVERSE_FROM

#define RB_FOREACH_REVERSE_FROM (   x,
  name,
 
)
Value:
for ((x) = (y); \
((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \
(x) = (y))

Definition at line 756 of file tree.h.

◆ RB_FOREACH_REVERSE_SAFE

#define RB_FOREACH_REVERSE_SAFE (   x,
  name,
  head,
 
)
Value:
for ((x) = RB_MAX(name, head); \
((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \
(x) = (y))

Definition at line 761 of file tree.h.

◆ RB_FOREACH_SAFE

#define RB_FOREACH_SAFE (   x,
  name,
  head,
 
)
Value:
for ((x) = RB_MIN(name, head); \
((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \
(x) = (y))

Definition at line 746 of file tree.h.

◆ RB_GENERATE

#define RB_GENERATE (   name,
  type,
  field,
  cmp 
)     RB_GENERATE_INTERNAL(name, type, field, cmp,)

Definition at line 400 of file tree.h.

◆ RB_GENERATE_INTERNAL

#define RB_GENERATE_INTERNAL (   name,
  type,
  field,
  cmp,
  attr 
)

Definition at line 404 of file tree.h.

◆ RB_GENERATE_STATIC

#define RB_GENERATE_STATIC (   name,
  type,
  field,
  cmp 
)     RB_GENERATE_INTERNAL(name, type, field, cmp, UV__UNUSED static)

Definition at line 402 of file tree.h.

◆ RB_HEAD

#define RB_HEAD (   name,
  type 
)
Value:
struct name { \
struct type *rbh_root; /* root of the tree */ \
}

Definition at line 296 of file tree.h.

◆ RB_INF

#define RB_INF   1

Definition at line 725 of file tree.h.

◆ RB_INIT

#define RB_INIT (   root)
Value:
do { \
(root)->rbh_root = NULL; \
} while (/*CONSTCOND*/ 0)
int root
Definition: enough.c:226

Definition at line 304 of file tree.h.

◆ RB_INITIALIZER

#define RB_INITIALIZER (   root)     { NULL }

Definition at line 301 of file tree.h.

◆ RB_INSERT

#define RB_INSERT (   name,
  x,
 
)    name##_RB_INSERT(x, y)

Definition at line 727 of file tree.h.

◆ RB_LEFT

#define RB_LEFT (   elm,
  field 
)    (elm)->field.rbe_left

Definition at line 318 of file tree.h.

◆ RB_MAX

#define RB_MAX (   name,
  x 
)    name##_RB_MINMAX(x, RB_INF)

Definition at line 734 of file tree.h.

◆ RB_MIN

#define RB_MIN (   name,
  x 
)    name##_RB_MINMAX(x, RB_NEGINF)

Definition at line 733 of file tree.h.

◆ RB_NEGINF

#define RB_NEGINF   -1

Definition at line 724 of file tree.h.

◆ RB_NEXT

#define RB_NEXT (   name,
  x,
 
)    name##_RB_NEXT(y)

Definition at line 731 of file tree.h.

◆ RB_NFIND

#define RB_NFIND (   name,
  x,
 
)    name##_RB_NFIND(x, y)

Definition at line 730 of file tree.h.

◆ RB_PARENT

#define RB_PARENT (   elm,
  field 
)    (elm)->field.rbe_parent

Definition at line 320 of file tree.h.

◆ RB_PREV

#define RB_PREV (   name,
  x,
 
)    name##_RB_PREV(y)

Definition at line 732 of file tree.h.

◆ RB_PROTOTYPE

#define RB_PROTOTYPE (   name,
  type,
  field,
  cmp 
)     RB_PROTOTYPE_INTERNAL(name, type, field, cmp,)

Definition at line 381 of file tree.h.

◆ RB_PROTOTYPE_INTERNAL

#define RB_PROTOTYPE_INTERNAL (   name,
  type,
  field,
  cmp,
  attr 
)
Value:
attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \
attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\
attr struct type *name##_RB_REMOVE(struct name *, struct type *); \
attr struct type *name##_RB_INSERT(struct name *, struct type *); \
attr struct type *name##_RB_FIND(struct name *, struct type *); \
attr struct type *name##_RB_NFIND(struct name *, struct type *); \
attr struct type *name##_RB_NEXT(struct type *); \
attr struct type *name##_RB_PREV(struct type *); \
attr struct type *name##_RB_MINMAX(struct name *, int); \
\

Definition at line 385 of file tree.h.

◆ RB_PROTOTYPE_STATIC

#define RB_PROTOTYPE_STATIC (   name,
  type,
  field,
  cmp 
)     RB_PROTOTYPE_INTERNAL(name, type, field, cmp, UV__UNUSED static)

Definition at line 383 of file tree.h.

◆ RB_RED

#define RB_RED   1

Definition at line 309 of file tree.h.

◆ RB_REMOVE

#define RB_REMOVE (   name,
  x,
 
)    name##_RB_REMOVE(x, y)

Definition at line 728 of file tree.h.

◆ RB_RIGHT

#define RB_RIGHT (   elm,
  field 
)    (elm)->field.rbe_right

Definition at line 319 of file tree.h.

◆ RB_ROOT

#define RB_ROOT (   head)    (head)->rbh_root

Definition at line 322 of file tree.h.

◆ RB_ROTATE_LEFT

#define RB_ROTATE_LEFT (   head,
  elm,
  tmp,
  field 
)
Value:
do { \
(tmp) = RB_RIGHT(elm, field); \
if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \
RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \
} \
RB_AUGMENT(elm); \
if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \
if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \
RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \
RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \
} else \
(head)->rbh_root = (tmp); \
RB_LEFT(tmp, field) = (elm); \
RB_PARENT(elm, field) = (tmp); \
RB_AUGMENT(tmp); \
if ((RB_PARENT(tmp, field))) \
RB_AUGMENT(RB_PARENT(tmp, field)); \
} while (/*CONSTCOND*/ 0)
#define RB_PARENT(elm, field)
Definition: tree.h:320
#define RB_LEFT(elm, field)
Definition: tree.h:318
#define RB_RIGHT(elm, field)
Definition: tree.h:319

Definition at line 340 of file tree.h.

◆ RB_ROTATE_RIGHT

#define RB_ROTATE_RIGHT (   head,
  elm,
  tmp,
  field 
)
Value:
do { \
(tmp) = RB_LEFT(elm, field); \
if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \
RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \
} \
RB_AUGMENT(elm); \
if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \
if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \
RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \
RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \
} else \
(head)->rbh_root = (tmp); \
RB_RIGHT(tmp, field) = (elm); \
RB_PARENT(elm, field) = (tmp); \
RB_AUGMENT(tmp); \
if ((RB_PARENT(tmp, field))) \
RB_AUGMENT(RB_PARENT(tmp, field)); \
} while (/*CONSTCOND*/ 0)

Definition at line 360 of file tree.h.

◆ RB_SET

#define RB_SET (   elm,
  parent,
  field 
)
Value:
do { \
RB_PARENT(elm, field) = parent; \
RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \
RB_COLOR(elm, field) = RB_RED; \
} while (/*CONSTCOND*/ 0)
#define RB_RED
Definition: tree.h:309

Definition at line 325 of file tree.h.

◆ RB_SET_BLACKRED

#define RB_SET_BLACKRED (   black,
  red,
  field 
)
Value:
do { \
RB_COLOR(black, field) = RB_BLACK; \
RB_COLOR(red, field) = RB_RED; \
} while (/*CONSTCOND*/ 0)
#define RB_BLACK
Definition: tree.h:308
static bool red(RBNode *x)
Definition: rbtree.c:9

Definition at line 331 of file tree.h.

◆ SPLAY_ASSEMBLE

#define SPLAY_ASSEMBLE (   head,
  node,
  left,
  right,
  field 
)
Value:
do { \
SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \
SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field); \
SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \
SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \
} while (/*CONSTCOND*/ 0)
#define SPLAY_LEFT(elm, field)
Definition: tree.h:82
#define SPLAY_RIGHT(elm, field)
Definition: tree.h:83

Definition at line 112 of file tree.h.

◆ SPLAY_EMPTY

#define SPLAY_EMPTY (   head)    (SPLAY_ROOT(head) == NULL)

Definition at line 85 of file tree.h.

◆ SPLAY_ENTRY

#define SPLAY_ENTRY (   type)
Value:
struct { \
struct type *spe_left; /* left element */ \
struct type *spe_right; /* right element */ \
}

Definition at line 76 of file tree.h.

◆ SPLAY_FIND

#define SPLAY_FIND (   name,
  x,
 
)    name##_SPLAY_FIND(x, y)

Definition at line 283 of file tree.h.

◆ SPLAY_FOREACH

#define SPLAY_FOREACH (   x,
  name,
  head 
)
Value:
for ((x) = SPLAY_MIN(name, head); \
(x) != NULL; \
#define SPLAY_NEXT(name, x, y)
Definition: tree.h:284
#define SPLAY_MIN(name, x)
Definition: tree.h:285

Definition at line 290 of file tree.h.

◆ SPLAY_GENERATE

#define SPLAY_GENERATE (   name,
  type,
  field,
  cmp 
)

Definition at line 163 of file tree.h.

◆ SPLAY_HEAD

#define SPLAY_HEAD (   name,
  type 
)
Value:
struct name { \
struct type *sph_root; /* root of the tree */ \
}

Definition at line 64 of file tree.h.

◆ SPLAY_INF

#define SPLAY_INF   1

Definition at line 279 of file tree.h.

◆ SPLAY_INIT

#define SPLAY_INIT (   root)
Value:
do { \
(root)->sph_root = NULL; \
} while (/*CONSTCOND*/ 0)

Definition at line 72 of file tree.h.

◆ SPLAY_INITIALIZER

#define SPLAY_INITIALIZER (   root)     { NULL }

Definition at line 69 of file tree.h.

◆ SPLAY_INSERT

#define SPLAY_INSERT (   name,
  x,
 
)    name##_SPLAY_INSERT(x, y)

Definition at line 281 of file tree.h.

◆ SPLAY_LEFT

#define SPLAY_LEFT (   elm,
  field 
)    (elm)->field.spe_left

Definition at line 82 of file tree.h.

◆ SPLAY_LINKLEFT

#define SPLAY_LINKLEFT (   head,
  tmp,
  field 
)
Value:
do { \
SPLAY_LEFT(tmp, field) = (head)->sph_root; \
tmp = (head)->sph_root; \
(head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \
} while (/*CONSTCOND*/ 0)

Definition at line 100 of file tree.h.

◆ SPLAY_LINKRIGHT

#define SPLAY_LINKRIGHT (   head,
  tmp,
  field 
)
Value:
do { \
SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
tmp = (head)->sph_root; \
(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \
} while (/*CONSTCOND*/ 0)

Definition at line 106 of file tree.h.

◆ SPLAY_MAX

#define SPLAY_MAX (   name,
  x 
)
Value:
: name##_SPLAY_MIN_MAX(x, SPLAY_INF))
#define SPLAY_INF
Definition: tree.h:279
#define SPLAY_EMPTY(head)
Definition: tree.h:85

Definition at line 287 of file tree.h.

◆ SPLAY_MIN

#define SPLAY_MIN (   name,
  x 
)
Value:
: name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
#define SPLAY_NEGINF
Definition: tree.h:278

Definition at line 285 of file tree.h.

◆ SPLAY_NEGINF

#define SPLAY_NEGINF   -1

Definition at line 278 of file tree.h.

◆ SPLAY_NEXT

#define SPLAY_NEXT (   name,
  x,
 
)    name##_SPLAY_NEXT(x, y)

Definition at line 284 of file tree.h.

◆ SPLAY_PROTOTYPE

#define SPLAY_PROTOTYPE (   name,
  type,
  field,
  cmp 
)

Definition at line 121 of file tree.h.

◆ SPLAY_REMOVE

#define SPLAY_REMOVE (   name,
  x,
 
)    name##_SPLAY_REMOVE(x, y)

Definition at line 282 of file tree.h.

◆ SPLAY_RIGHT

#define SPLAY_RIGHT (   elm,
  field 
)    (elm)->field.spe_right

Definition at line 83 of file tree.h.

◆ SPLAY_ROOT

#define SPLAY_ROOT (   head)    (head)->sph_root

Definition at line 84 of file tree.h.

◆ SPLAY_ROTATE_LEFT

#define SPLAY_ROTATE_LEFT (   head,
  tmp,
  field 
)
Value:
do { \
SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \
SPLAY_LEFT(tmp, field) = (head)->sph_root; \
(head)->sph_root = tmp; \
} while (/*CONSTCOND*/ 0)

Definition at line 94 of file tree.h.

◆ SPLAY_ROTATE_RIGHT

#define SPLAY_ROTATE_RIGHT (   head,
  tmp,
  field 
)
Value:
do { \
SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \
SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
(head)->sph_root = tmp; \
} while (/*CONSTCOND*/ 0)

Definition at line 88 of file tree.h.

◆ UV__UNUSED

#define UV__UNUSED

Definition at line 33 of file tree.h.