about summary refs log tree commit diff
path: root/shared/c-rbtree/src/c-rbtree-private.h
blob: 25b9ba01c01e305bab5e1cb92683f94fae1c3f2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#pragma once

/*
 * Private definitions
 * This file contains private definitions for the RB-Tree implementation, but
 * which are used by our test-suite.
 */

#include <stddef.h>
#include "c-rbtree.h"

/*
 * Macros
 */

#define _public_ __attribute__((__visibility__("default")))

/*
 * Nodes
 */

static inline void *c_rbnode_raw(CRBNode *n) {
        return (void *)(n->__parent_and_flags & ~C_RBNODE_FLAG_MASK);
}

static inline unsigned long c_rbnode_flags(CRBNode *n) {
        return n->__parent_and_flags & C_RBNODE_FLAG_MASK;
}

static inline _Bool c_rbnode_is_red(CRBNode *n) {
        return c_rbnode_flags(n) & C_RBNODE_RED;
}

static inline _Bool c_rbnode_is_black(CRBNode *n) {
        return !(c_rbnode_flags(n) & C_RBNODE_RED);
}

static inline _Bool c_rbnode_is_root(CRBNode *n) {
        return c_rbnode_flags(n) & C_RBNODE_ROOT;
}