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; }
/* * insert an nid range into the interval tree * * \param range range to insetr * \retval 0 on success * * This function checks that the given nid range * does not overlap so that each nid can belong * to exactly one range */ int range_insert(struct lu_nid_range *range) { struct interval_node_extent ext = range->rn_node.in_extent; if (interval_is_overlapped(range_interval_root, &ext) != 0) return -EEXIST; interval_insert(&range->rn_node, &range_interval_root); return 0; }