Struct space_partitioning::interval_tree::IntervalTree [−][src]
pub struct IntervalTree<T, D> where
T: IntervalType, { /* fields omitted */ }
Expand description
An Interval Tree.
Implementations
Creates a new IntervalTree
from a root entry.
Parameters
entry
- The first entry.
Example
use space_partitioning::IntervalTree;
let tree = IntervalTree::new_from_entry((15..=20, "data"));
assert_eq!(tree.len(), 1);
Inserts a new entry to the IntervalTree
.
Parameters
entry
- The entry to insert.
Example
use space_partitioning::IntervalTree;
let mut tree = IntervalTree::default();
tree.insert((15..=20, "data"));
assert_eq!(tree.len(), 1);
Returns the number of elements in the IntervalTree
.
Example
use space_partitioning::IntervalTree;
let tree = IntervalTree::new_from_entry((15..=20, "data"));
assert_eq!(tree.len(), 1);
Returns whether the tree is empty, i.e., whether it has no elements.
Example
use space_partitioning::IntervalTree;
let tree = IntervalTree::<i32, ()>::default();
assert!(tree.is_empty());
pub fn overlap_search<I>(&self, interval: I) -> Option<&IntervalTreeEntry<T, D>> where
I: Into<Interval<T>>,
pub fn overlap_search<I>(&self, interval: I) -> Option<&IntervalTreeEntry<T, D>> where
I: Into<Interval<T>>,
Queries the tree for overlaps with the specified interval
.
/// # Parameters
interval
- The interval to query for.
Example
use space_partitioning::IntervalTree;
use space_partitioning::interval_tree::Interval;
let mut tree = IntervalTree::new_from_entry((15..=20, "A"));
tree.insert((100..=101, "B"));
let matched_a = tree.overlap_search(&(18..=25).into()).unwrap();
assert_eq!(matched_a.interval.start, 15);
assert_eq!(matched_a.interval.end, 20);
assert_eq!(matched_a.data, "A");
let matched_b = tree.overlap_search(&(100..=100).into()).unwrap();
assert_eq!(matched_b.interval.start, 100);
assert_eq!(matched_b.interval.end, 101);
assert_eq!(matched_b.data, "B");
let no_match = tree.overlap_search(0..=5);
assert!(no_match.is_none());
pub fn iter_inorder(&self) -> InorderIterator<'_, T, D>ⓘNotable traits for InorderIterator<'a, T, D>impl<'a, T, D> Iterator for InorderIterator<'a, T, D> where
T: IntervalType, type Item = &'a IntervalTreeEntry<T, D>;
pub fn iter_inorder(&self) -> InorderIterator<'_, T, D>ⓘNotable traits for InorderIterator<'a, T, D>impl<'a, T, D> Iterator for InorderIterator<'a, T, D> where
T: IntervalType, type Item = &'a IntervalTreeEntry<T, D>;
Notable traits for InorderIterator<'a, T, D>
impl<'a, T, D> Iterator for InorderIterator<'a, T, D> where
T: IntervalType, type Item = &'a IntervalTreeEntry<T, D>;
Returns an InorderIterator<T, D>
that iterates the tree elements in order
of their interval starts.
Example
use space_partitioning::IntervalTree;
use std::iter::FromIterator;
let tree = IntervalTree::from_iter([(18..=25, "abc"), (0..=20, "xyz")]);
let mut iter = tree.iter_inorder();
let first = iter.next().unwrap();
assert_eq!(first.interval.start, 0);
assert_eq!(first.interval.end, 20);
assert_eq!(first.data, "xyz");
let second = iter.next().unwrap();
assert_eq!(second.interval.start, 18);
assert_eq!(second.interval.end, 25);
assert_eq!(second.data, "abc");
assert!(iter.next().is_none());
Trait Implementations
impl<I, T, D> FromIterator<I> for IntervalTree<T, D> where
I: Into<IntervalTreeEntry<T, D>>,
T: IntervalType,
impl<I, T, D> FromIterator<I> for IntervalTree<T, D> where
I: Into<IntervalTreeEntry<T, D>>,
T: IntervalType,
Creates a value from an iterator. Read more