110#ifndef CTAGS_MAIN_RBTREE_H
111#define CTAGS_MAIN_RBTREE_H
118#if defined(container_of)
120#if defined(HAVE_TYPEOF) && defined(HAVE_STATEMENT_EXPRESSION_EXT)
121 #define container_of(ptr, type, member) ({ \
122 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
123 (type *)( (char *)__mptr - offsetof(type,member) );})
125 #define container_of(ptr, type, member) \
126 ((type *)( (char *)ptr - offsetof(type,member)))
129#if defined(HAVE_TYPEOF) && defined(HAVE_STATEMENT_EXPRESSION_EXT)
130 #define container_of(ptr, type, member) ({ \
131 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
132 (type *)( (char *)__mptr - offsetof(type,member) );})
134 #define container_of(ptr, type, member) \
135 ((type *)( (char *)ptr - offsetof(type,member)))
141 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
143 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
147#if defined(__cplusplus)
150 #define NULL ((void *)0)
169#define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
170#define rb_color(r) ((r)->rb_parent_color & 1)
171#define rb_is_red(r) (!rb_color(r))
172#define rb_is_black(r) rb_color(r)
173#define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
174#define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
185#define RB_ROOT (struct rb_root) { NULL, }
186#define rb_entry(ptr, type, member) container_of(ptr, type, member)
188#define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
189#define RB_EMPTY_NODE(node) (rb_parent(node) == node)
190#define RB_CLEAR_NODE(node) (rb_set_parent(node, node))
#define CTAGA_ATTR_ALIGNED(X)
struct rb_node * rb_augment_erase_begin(struct rb_node *node)
static void rb_set_parent(struct rb_node *rb, struct rb_node *p)
void rb_augment_insert(struct rb_node *node, rb_augment_f func, void *data)
void(* rb_augment_f)(struct rb_node *node, void *data)
static void rb_link_node(struct rb_node *node, struct rb_node *parent, struct rb_node **rb_link)
static void rb_set_color(struct rb_node *rb, int color)
struct rb_node * rb_next(const struct rb_node *)
void rb_insert_color(struct rb_node *, struct rb_root *)
void rb_erase(struct rb_node *, struct rb_root *)
static void rb_init_node(struct rb_node *rb)
struct rb_node * rb_first(const struct rb_root *)
struct rb_node * rb_prev(const struct rb_node *)
struct rb_node * rb_last(const struct rb_root *)
void rb_augment_erase_end(struct rb_node *node, rb_augment_f func, void *data)
void rb_replace_node(struct rb_node *victim, struct rb_node *new, struct rb_root *root)
#define RB_CLEAR_NODE(node)
uintptr_t rb_parent_color
struct rb_node * rb_right