59 #ifdef ONLY_FOR_DOXYGEN
61 #endif //ONLY_FOR_DOXYGEN
67 #ifndef RBT_SET_H_PREFIX_
68 #error RBT_SET_H_PREFIX_ is not defined.
69 #endif // RBT_SET_H_PREFIX_
72 #error RBT_KEY_T is not defined.
75 #ifndef RBT_KEY_COUNT_BITS
76 #error RBT_KEY_COUNT_BITS is not defined.
77 #endif // RBT_KEY_COUNT_BITS
80 #error RBT_KEY_PTR is not defined.
83 #ifndef RBT_KEY_FPRINT
84 #error RBT_KEY_FPRINT is not defined.
85 #endif // RBT_KEY_FPRINT
89 #define RBT_SET_ADD RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_add)
91 #undef RBT_SET_DIFFERENCE
92 #define RBT_SET_DIFFERENCE RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_difference)
94 #undef RBT_SET_EXCLUSIVE_DISJUNCTION
95 #define RBT_SET_EXCLUSIVE_DISJUNCTION RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_exclusive_disjunction)
97 #undef RBT_SET_INCLUDES
98 #define RBT_SET_INCLUDES RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_includes)
100 #undef RBT_SET_INTERSECTION
101 #define RBT_SET_INTERSECTION RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_intersection)
103 #undef RBT_SET_IS_SUBSET
104 #define RBT_SET_IS_SUBSET RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_is_subset)
106 #undef RBT_SET_REMOVE
107 #define RBT_SET_REMOVE RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_remove)
110 #define RBT_SET_UNION RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_union)
112 #undef RBT_SET_MODIFY_DIFFERENCE
113 #define RBT_SET_MODIFY_DIFFERENCE RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_difference)
115 #undef RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION
116 #define RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_exclusive_disjunction)
118 #undef RBT_SET_MODIFY_INTERSECTION
119 #define RBT_SET_MODIFY_INTERSECTION RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_intersection)
121 #undef RBT_SET_MODIFY_UNION
122 #define RBT_SET_MODIFY_UNION RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_union)
129 #undef _RBT_SET_DIFFERENCE_TRAVERSE
130 #define _RBT_SET_DIFFERENCE_TRAVERSE _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_difference_traverse)
132 #undef _RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION_TRAVERSE
133 #define _RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION_TRAVERSE _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_exclusive_disjunction_traverse)
135 #undef _RBT_SET_MODIFY_INTERSECTION_FILTER
136 #define _RBT_SET_MODIFY_INTERSECTION_FILTER _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_intersection_filter)
138 #undef _RBT_SET_MODIFY_INTERSECTION_TRAVERSE
139 #define _RBT_SET_MODIFY_INTERSECTION_TRAVERSE _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_intersection_traverse)
141 #undef _RBT_SET_MODIFY_IS_SUBSET_TRAVERSE
142 #define _RBT_SET_MODIFY_IS_SUBSET_TRAVERSE _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_subset_traverse)
144 #undef _RBT_SET_MODIFY_UNION_TRAVERSE
145 #define _RBT_SET_MODIFY_UNION_TRAVERSE _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_union_traverse)
147 #undef _RBT_SET_MODIFY_DIFFERENCE_TRAVERSE
148 #define _RBT_SET_MODIFY_DIFFERENCE_TRAVERSE _RBT_TOKEN_2_W(RBT_SET_H_PREFIX_, set_modify_difference_traverse)
157 #undef RBT_NODE_H_PREFIX_
158 #define RBT_NODE_H_PREFIX_ RBT_SET_H_PREFIX_
165 #define RBT_VALUE_T int
171 #undef RBT_VALUE_NULL
172 #define RBT_VALUE_NULL 0
178 #undef RBT_VALUE_IS_EQUAL
179 #define RBT_VALUE_IS_EQUAL(a, b) (a == b)
185 #undef RBT_VALUE_COPY
186 #define RBT_VALUE_COPY(var,val,fail) var = val
192 #undef RBT_VALUE_FREE
193 #define RBT_VALUE_FREE(val)
199 #undef RBT_VALUE_FPRINT
200 #define RBT_VALUE_FPRINT(fd, val) \
203 if (val != RBT_VALUE_NULL) \
205 fprintf(fd, "%d", val); \
216 #undef RBT_WRAPPER_H_PREFIX_
217 #define RBT_WRAPPER_H_PREFIX_ RBT_SET_H_PREFIX_
238 _RBT_SET_MODIFY_UNION_TRAVERSE(
320 _RBT_SET_MODIFY_DIFFERENCE_TRAVERSE(
322 RBT_KEY_SIZE_T height,
374 _RBT_SET_DIFFERENCE_TRAVERSE(
376 RBT_KEY_SIZE_T height,
445 _RBT_SET_MODIFY_INTERSECTION_FILTER(
459 return (target == NULL);
523 _RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION_TRAVERSE(
525 RBT_KEY_SIZE_T height,
607 _RBT_SET_IS_SUBSET_TRAVERSE(
609 RBT_KEY_SIZE_T height,
619 is_subset = va_arg(args,
int *);
RBT_VALUE_T RBT_DELETE(RBT_NODE_T *node, RBT_KEY_T key)
Definition: wrapper.h:312
void RBT_SET_MODIFY_UNION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:274
RBT_KEY_SIZE_T bits
Number of significant bits in the key.
Definition: node.h:492
int RBT_HAS_KEY(RBT_NODE_T *node, RBT_KEY_T key)
Definition: wrapper.h:357
RBT_NODE_T * node
The associated node.
Definition: node.h:508
int RBT_SET_IS_SUBSET(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:653
void RBT_SET_MODIFY_DIFFERENCE(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:360
RBT_PIN_T * key
The key.
Definition: node.h:486
RBT_VALUE_T value
Value associated with the node.
Definition: node.h:446
int RBT_SET_INCLUDES(RBT_NODE_T *set, RBT_KEY_T item)
Definition: set.h:709
void RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:567
RBT_KEY_SIZE_T height
The height of the node above the root node (or the depth, depending on how you look at it)...
Definition: node.h:3273
void RBT_SET_MODIFY_INTERSECTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:482
void RBT_SET_REMOVE(RBT_NODE_T *set, RBT_KEY_T item)
Definition: set.h:694
RBT_NODE_T * RBT_NODE_REMOVE(RBT_NODE_T *node, RBT_NODE_T *parent_node)
Remove a node from a tree.
Definition: node.h:1379
RBT_NODE_T * RBT_NODE_NEW()
Create a new tree.
Definition: node.h:1759
RBT_NODE_T * RBT_SET_INTERSECTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:503
void RBT_NODE_FILTER_WITH_KEY(RBT_NODE_T *node, RBT_NODE_FILTER_WITH_KEY_FUNCTION_T func_v, int include_empty,...)
Filter tree nodes.
Definition: traverse_with_key.h:325
RBT_VALUE_T RBT_INSERT(RBT_NODE_T *node, RBT_KEY_T key, RBT_VALUE_T value)
Definition: wrapper.h:265
RBT_NODE_T * RBT_SET_DIFFERENCE(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:423
RBT_NODE_T * RBT_NODE_COPY(RBT_NODE_T *node)
Copy a tree.
Definition: node.h:1836
RBT_NODE_T * RBT_NODE_RETRIEVE(RBT_NODE_T *node, RBT_PIN_T *key, RBT_KEY_SIZE_T bits, rbt_retrieve_action_t action, RBT_VALUE_T value, RBT_NODE_T **parent_node_ptr)
Retrieve a node matching the given key.
Definition: node.h:2441
#define RBT_VALUE_IS_NULL(value)
Definition: node.h:395
Rabbit Tree node type.
Definition: node.h:418
Rabbit Tree key data type with associated node.
Definition: node.h:476
void RBT_SET_ADD(RBT_NODE_T *set, RBT_KEY_T item)
Definition: set.h:679
void RBT_NODE_TRAVERSE_WITH_KEY(RBT_NODE_T *node, RBT_NODE_TRAVERSE_WITH_KEY_FUNCTION_T func_v,...)
Definition: traverse_with_key.h:138
RBT_NODE_T * RBT_SET_UNION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:296
RBT_NODE_T * RBT_SET_EXCLUSIVE_DISJUNCTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:587