Unbounded Interval Tree

A Rust implementation of an interval tree, based on the one described by Cormen et al., (2009), Introduction to Algorithms (3rd ed., Section 14.3: Interval trees, pp. 348–354). An interval tree is useful to query efficiently a database of intervals. This implementation is generic in that it works with intervals of values implementing Ord+Clone traits. The bounds can be inclusive, exclusive, or unbounded. Here are some examples of valid intervals:

How To Use

I would suggest to look at the examples part of the documentation (as they are tested by the Rust ecosystem), but here's a current example.

```rust use unboundedintervaltree::IntervalTree; use std::ops::Bound::{Included, Excluded, Unbounded};

// Default interval tree. let mut tree = IntervalTree::default();

// Ranges are defined as a 2-ple of Bounds. let interval1 = (Included(5), Excluded(9)); let interval2 = (Unbounded, Included(-2)); let interval3 = (Included(30), Included(30));

// Add intervals to the tree. tree.insert(interval1); tree.insert(interval2); tree.insert(interval3);

// Iterate through the intervals inorder. for (start, end) in tree.iter() { println!("Start: {:?}\tEnd: {:?}", start, end); }

// Get overlapping intervals. let overlaps = tree.getintervaloverlaps(&(0..30));

// Get the difference between the database // of intervals and the query interval. let diff = tree.getintervaldifference(&(0..=30)); ```

Roadmap

What's next...