Expand description
Provides a data structure backed by a vector for unioning ranges of integers. We intelligently merge inserted ranges to minimize required storage.
Example usage:
let mut range_holder = RangeUnionFind::<u32>::new();
range_holder.insert_range(&(4..=8))?;
range_holder.insert_range(&(6..=10))?;
assert_eq!(range_holder.has_range(&(2..=12))?, OverlapType::Partial(7));
assert_eq!(range_holder.has_range(&(5..=9))?, OverlapType::Contained);The main type is the RangeUnionFind struct, with the NumInRange trait implemented for primitive integer and float types that can be used to form ranges. While we make a best effort to support floating point ranges, unexpected issues may arise with floating point imprecision.
Structs§
- Float
IsNan - Error returned when the float is NaN.
- NonNan
Float - Wrapper for non-NaN floats that implements Eq and Ord.
- Range
Union Find - Struct representing a union of ranges. See the documentation for
NonNanFloat’s impl of theSteppabletrait for caveats when using this type with floating-point numbers.
Enums§
- Contained
Type - Enum describing what location an element has in a range.
- Overlap
Type - Enum describing how a range may overlap with another range.
- Range
Operation Error - Enum describing how a range may be invalid.
Traits§
- NumIn
Range - Trait representing number types over which intervals can be constructed.
- Steppable
- Trait representing number types which can be incrementally stepped.