Expand description
Implementation of a Nested Containment List.
A Nested Containment List is a data structure for storing types that implement the
core::ops::RangeBounds trait. Elements stored in a NestedContainmentList are stored in a
nested structure to allow for easy querying using other RangeBounds queries.
§Construction
Construction of NestedContainmentLists can be done using either the new() or
from_iter() methods. Construction from from_iter() has temporal complexity
O(n log(n)), where n is the length of the slice.
use nested_containment_list::NestedContainmentList;
use std::ops::Range;
let nclist = NestedContainmentList::<Range<usize>, usize>::new();use nested_containment_list::NestedContainmentList;
use std::iter::FromIterator;
let nclist = NestedContainmentList::from_iter(vec![1..5, 2..4, 5..7]);§Mutation
A NestedContainmentList allows for insertion and removal of RangeBounds types. Both of
these methods have a temporal complexity of O(log(n)), where n is the number of
RangeBounds stored in the data structure.
use nested_containment_list::NestedContainmentList;
let mut nclist = NestedContainmentList::new();
nclist.insert(1..5);
nclist.remove(&(1..5));§Iteration
Iterating over a NestedContainmentList is done in a nested manner. An Iterator is
obtained from the overlapping() method. It is used to iterate directly over the top-most
sublist, returning values which overlap with the query range, with nested intervals contained
within the top-most elements being accessed through nested sublists.
For example, iterating over all elements can be done as follows:
use nested_containment_list::NestedContainmentList;
use std::iter::FromIterator;
let nclist = NestedContainmentList::from_iter(vec![1..5, 2..4, 6..7]);
let mut sublist = nclist.overlapping(&(..));
// The first element in the top-most sublist, 1..5.
let first_element = sublist.next().unwrap();
assert_eq!(first_element.value, &(1..5));
// Contained inside the element's sublist is the interval 2..4.
assert_eq!(first_element.sublist().next().unwrap().value, &(2..4));
// The next element in the top-most sublist is 6..7, so it is obtained like the first element.
let second_element = sublist.next().unwrap();
assert_eq!(second_element.value, &(6..7));To remove a single level of nesting, one may use the Iterator::flatten() method.
§no_std
This crate is usable in
no_std
environments when compiled on stable rustc 1.36.0 or higher. The version limitation is due to
the use of alloc, allowing for heap allocation
without use of std.
Structs§
- Iter
- An
Iteratorover all elements in aNestedContainmentList. - Iter
Element - An element obtained from
Iter. - Nested
Containment List - Data structure for efficient storage and querying of
RangeBounds. - Overlapping
- An
Iteratorover elements in aNestedContainmentListthat overlap a query. - Overlapping
Element - An element contained within an
Overlapping.