39#define NUM unsigned long
55 unsigned short int quadrant_1 : 2;
56 unsigned short int quadrant_2 : 2;
57 unsigned short int quadrant_3 : 2;
58 unsigned short int quadrant_4 : 2;
59 unsigned short int num_subnodes : 8;
63 R_TOTALLY_IN_INTERVAL = 3,
64 R_PARCIALLY_IN_INTERVAL = 2,
65 R_NOT_IN_INTERVAL = 0,
69#define BRANCH_FACTOR 4
72#define NODE_SIZE sizeof(RL_Node)
74#define NODE(tree, idx) (RL_Node *)&tree->root[idx]
77#define IS_ROOT(tree, interval) (tree->range_max <= interval)
78#define ROOT_INTERVAL(tree) (tree->root_i * BRANCH_FACTOR)
80#define MIN(a, b) ((a < b) ? a : b)
82#define ON_BITS(n) (active_bits[n - 1])
83#define SET_LEAF_IN(max, node, quad_i) \
85 ON_BITS(max - quad_i + 1))
87#define LEAF_ALL_IN(leaf) \
89#define LEAF_ALL_OUT(leaf) \
92#define ALL_OUT(n) memset(n, 0, NODE_SIZE)
93#define ALL_IN(n) memset(n, 32767, NODE_SIZE)
94#define INODE_CAPACITY \
95 (LEAF_SIZE * BRANCH_FACTOR)
98#define QUADRANT_MAX_VALUE(node_num, quadrant, quadrant_interval, max) \
99 (MIN(node_num + quadrant_interval * quadrant - 1, max))
102#define NEXT_INTERVAL(interval) \
103 ((interval <= LEAF_SIZE * BRANCH_FACTOR) \
105 : interval / BRANCH_FACTOR + interval % BRANCH_FACTOR)
107#define IS_LEAF(interval) \
108 ((interval <= LEAF_SIZE) ? 1 : 0)
109#define LAST_LEVEL_INODE(interval) \
110 ((interval <= LEAF_SIZE * BRANCH_FACTOR && interval > LEAF_SIZE) ? 1 : 0)
112#define REALLOC_MEM(tree) (tree->mem_alloc < (tree->size + 1) * NODE_SIZE)
113#define MEM_SIZE(tree) (tree->size + 2) * NODE_SIZE
115#define TREE_SIZE(tree) tree->mem_alloc + sizeof(RL_Tree)
119 unsigned short int leaf;
145#define BITMAP_empty(b) ((b) == 0)
146#define BITMAP_member(b, n) (((b) & (1 << (n))) != 0)
147#define BITMAP_alone(b, n) ((b) == (1 << (n)))
148#define BITMAP_subset(b1, b2) (((b1) & (b2)) == b2)
149#define BITMAP_same(b1, b2) ((b1) == (b2))
151#define BITMAP_on_all(b) ((b) = 255)
153#define BITMAP_clear(b) ((b) = 0)
154#define BITMAP_and(b1, b2) ((b1) &= (b2))
155#define BITMAP_minus(b1, b2) ((b1) &= ~(b2))
156#define BITMAP_insert(b, n) ((b) |= (1 << (n)))
157#define BITMAP_delete(b, n) ((b) &= (~(1 << (n))))
158#define BITMAP_copy(b1, b2) ((b1) = (b2))
159#define BITMAP_intersection(b1, b2, b3) ((b1) = ((b2) & (b3)))
160#define BITMAP_difference(b1, b2, b3) ((b1) = ((b2) & (~(b3))))
164typedef enum { TRUE = 1, FALSE = 0 } BOOLEAN;
165typedef enum { IN = 1, OUT = 0 } STATUS;
168#define BUFFER_SIZE 1000
172extern RL_Tree *new_rl(NUM max_size);
174extern void free_rl(
RL_Tree *range);
176extern void rl_all(
RL_Tree *tree, STATUS status);
177extern void display_tree(
RL_Tree *tree);
178extern RL_Tree *set_in_rl(
RL_Tree *tree, NUM number, STATUS status);
179extern BOOLEAN in_rl(
RL_Tree *range, NUM number);
185rl_next_in_bigger(
RL_Tree *tree,
188#define IS_FREEZED(tree) (tree->mem_alloc != 0)