My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
rbtree_internal.h
Go to the documentation of this file.
1 #pragma once
2 
3 #define LEFT 0
4 #define RIGHT 1
5 
6 typedef enum rbtree_color
7 {
8  RED = 0,
9  BLACK = 1,
11 
12 #define COLOR_MASK (RED|BLACK)
13 
14 static inline void
15 set_black(rbtree_node_t *node)
16 {
17  node->parent_color &= ~COLOR_MASK;
18  node->parent_color |= BLACK;
19 }
20 
21 static inline void
22 set_red(rbtree_node_t *node)
23 {
24  node->parent_color &= ~COLOR_MASK;
25  node->parent_color |= RED;
26 }
27 
28 static inline rbtree_color_t
29 get_color(const rbtree_node_t *node)
30 {
31  if(node == NULL)
32  return BLACK;
33  return (rbtree_color_t)(node->parent_color & COLOR_MASK);
34 }
35 
36 static inline int
37 is_black(const rbtree_node_t *node)
38 {
39  return get_color(node) == BLACK;
40 }
41 
42 static inline int
43 is_red(const rbtree_node_t *node)
44 {
45  return get_color(node) == RED;
46 }
47 
48 static inline rbtree_node_t*
49 get_parent(const rbtree_node_t *node)
50 {
51  return (rbtree_node_t*)(node->parent_color & ~COLOR_MASK);
52 }
53 
54 static inline void
55 set_parent(rbtree_node_t *node,
56  const rbtree_node_t *parent)
57 {
58  node->parent_color = (get_color(node)) | ((uintptr_t)parent);
59 }
60 
61 void
63  rbtree_node_t *node,
64  int left);
rbtree_node_t * node
Definition: rbtree.h:45
rbtree_color
void rbtree_rotate(rbtree_t *tree, rbtree_node_t *node, int left)
Definition: rbtree_rotate.c:5
uintptr_t parent_color
Definition: rbtree.h:17
Definition: rbtree.h:21
enum rbtree_color rbtree_color_t
#define COLOR_MASK