Example #1
0
int main(int argc, const char * argv[]) {
    INT_TREE tree = (INT_TREE) malloc(sizeof(struct int_tree));
    srand((unsigned)time(NULL));
    for(int i = 0; i < 10; i++)
    {
        int low = rand() % 30;
        int high = rand() % 30;
        if(low > high)
        {
            int tmp = low;
            low = high;
            high = tmp;
        }
        INT_NODE node = int_new_node(low, high);
        interval_insert(tree, node);
    }
    print_interval_tree(tree, tree -> root);
    INT i = (INT) malloc(sizeof(struct interval));
    i -> high = 18;
    i -> low = 15;
    INT_NODE node = interval_search(tree, i);
    printf("selected interval is: [%d, %d], max: %d, color %s", node -> interval -> low, node -> interval -> high, node -> max , node -> color == RED?"red":"black");
    printf("\n");
    
    return 0;
}
Example #2
0
/*
 * search the interval tree for an nid within a range
 *
 * \param	nid		nid to search for
 */
struct lu_nid_range *range_search(lnet_nid_t nid)
{
	struct lu_nid_range		*ret = NULL;
	struct interval_node_extent	ext = {
		.start	= nid,
		.end	= nid
	};

	interval_search(range_interval_root, &ext, range_cb, &ret);

	return ret;
}
Example #3
0
static int it_test_search(struct interval_node *root)
{
        struct it_node *n;
        struct interval_node_extent ext;
        int times = 10, i, err = 0;

        while (times--) {
                it_test_clear();
                ext.start = (random() % max_count) & ALIGN_MASK;
                ext.end = random() % (max_count - ext.start + 2) + ext.start;
                ext.end &= ALIGN_MASK;
                if (ext.end > max_count)
                        ext.end = max_count;

                dprintf("\n\nSearching the node overlapped "__S" ..\n",
                        __F(&ext));

                interval_search(root, &ext, cb, NULL);

                dprintf("\nverifing ...");

                /* verify */
                for (i = 0; i < it_count; i++) {
                        n = &it_array[i];
                        if (n->valid == 0)
                                continue;

                        if (extent_overlapped(&ext, &n->node.in_extent) &&
                            n->hit == 0)
                                error("node "__S" overlaps" __S","
                                      "but never to be hit.\n",
                                      __F(&n->node.in_extent),
                                      __F(&ext));

                        if (!extent_overlapped(&ext, &n->node.in_extent) &&
                            n->hit)
                                error("node "__S" overlaps" __S", but hit.\n",
                                      __F(&n->node.in_extent),
                                      __F(&ext));
                }
                if (err) error("search error\n");
                dprintf("ok.\n");
        }

        return 0;
}