59#ifdef ONLY_FOR_DOXYGEN
67#ifndef RBT_SET_H_PREFIX_
68#error RBT_SET_H_PREFIX_ is not defined.
72#error RBT_KEY_T is not defined.
75#ifndef RBT_KEY_COUNT_BITS
76#error RBT_KEY_COUNT_BITS is not defined.
80#error RBT_KEY_PTR is not defined.
84#error RBT_KEY_FPRINT is not defined.
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)
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
172#define RBT_VALUE_NULL 0
178#undef RBT_VALUE_IS_EQUAL
179#define RBT_VALUE_IS_EQUAL(a, b) (a == b)
186#define RBT_VALUE_COPY(var,val,fail) var = val
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(
240 RBT_KEY_SIZE_T height,
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_QUERY_ACTION_INSERT
Definition: common.h:417
@ RBT_RETRIEVE_ACTION_NOTHING
Definition: common.h:334
@ RBT_RETRIEVE_ACTION_INSERT_OR_REPLACE
Definition: common.h:346
@ RBT_RETRIEVE_ACTION_INSERT
Definition: common.h:340
#define RBT_VALUE_IS_NULL(value)
Definition: node.h:395
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_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
void RBT_SET_MODIFY_DIFFERENCE(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:360
void RBT_SET_MODIFY_INTERSECTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:482
RBT_NODE_T * RBT_SET_DIFFERENCE(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:423
void RBT_SET_REMOVE(RBT_NODE_T *set, RBT_KEY_T item)
Definition: set.h:694
int RBT_SET_IS_SUBSET(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:653
RBT_NODE_T * RBT_SET_EXCLUSIVE_DISJUNCTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:587
void RBT_SET_MODIFY_UNION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:274
RBT_NODE_T * RBT_SET_INTERSECTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:503
void RBT_SET_MODIFY_EXCLUSIVE_DISJUNCTION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:567
RBT_NODE_T * RBT_SET_UNION(RBT_NODE_T *a, RBT_NODE_T *b)
Definition: set.h:296
int RBT_SET_INCLUDES(RBT_NODE_T *set, RBT_KEY_T item)
Definition: set.h:709
void RBT_SET_ADD(RBT_NODE_T *set, RBT_KEY_T item)
Definition: set.h:679
Rabbit Tree key data type with associated node.
Definition: node.h:478
RBT_KEY_SIZE_T bits
Number of significant bits in the key.
Definition: node.h:492
RBT_PIN_T * key
The key.
Definition: node.h:486
RBT_NODE_T * node
The associated node.
Definition: node.h:508
Rabbit Tree node type.
Definition: node.h:420
RBT_VALUE_T value
Value associated with the node.
Definition: node.h:446
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
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_DELETE(RBT_NODE_T *node, RBT_KEY_T key)
Definition: wrapper.h:312
int RBT_HAS_KEY(RBT_NODE_T *node, RBT_KEY_T key)
Definition: wrapper.h:357
RBT_VALUE_T RBT_INSERT(RBT_NODE_T *node, RBT_KEY_T key, RBT_VALUE_T value)
Definition: wrapper.h:265