imintervaltree
An immutable data structure for storing and querying a collection of intervals
```rust
use std::ops::Bound::*;
use imintervaltree::{IntervalTree, Interval};
// Construct a tree of intervals
let tree : IntervalTree = IntervalTree::new();
let tree = tree.insert(Interval::new(Included(1), Excluded(3)));
let tree = tree.insert(Interval::new(Included(2), Excluded(4)));
let tree = tree.insert(Interval::new(Included(5), Unbounded));
let tree = tree.insert(Interval::new(Excluded(7), Included(8)));
// Query for overlapping intervals
let query = tree.queryinterval(&Interval::new(Included(3), Included(6)));
asserteq!(
query.collect::>>(),
vec![
Interval::new(Included(2), Excluded(4)),
Interval::new(Included(5), Unbounded)
]
);
// Query for a specific point
let query = tree.querypoint(&2);
asserteq!(
query.collect::>>(),
vec![
Interval::new(Included(2), Excluded(4)),
Interval::new(Included(1), Excluded(3))
]
);
```