20 size_t med = num_nodes / 2;
25 if ((right =
tree_part(intervals, med)) > max)
28 if (med + 1 < num_nodes)
31 if ((right =
tree_part(intervals + med + 1, num_nodes - med - 1)) > max)
34 intervals[med].
max = max;
41 qsort(intervals, num_nodes,
sizeof(intervals[0]),
42 (
int(*)(
const void *,
const void*))
iv_compar);
63 size_t x = num_nodes/2;
66 if (x && tree[x/2].max >= query.
left)
69 && tree[x].range.left <= query.
right
70 && tree[x + 1 + (num_nodes - x - 1)/2].
max >= query.
left)
#define ENSURE_ARRAY_SIZE(arrayp, curr_array_size, req_size)
static void overlap_push(struct overlaps *overlaps, size_t idx)
static void search_interval_tree_(struct interval_node tree[], size_t num_nodes, struct interval query, struct overlaps *overlaps, size_t ofs)
static double tree_part(struct interval_node intervals[], size_t num_nodes)
void yac_search_interval_tree(struct interval_node tree[], size_t num_nodes, struct interval query, struct overlaps *overlaps)
static int iv_compar(struct interval_node *a, struct interval_node *b)
void yac_generate_interval_tree(struct interval_node intervals[], size_t num_nodes)
static int overlap_test(struct interval a, struct interval b)