Crate range_union_find
source ·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
- Error returned when the float is NaN.
- Wrapper for non-NaN floats that implements Eq and Ord.
- Struct representing a union of ranges. See the documentation for
NonNanFloat
’s impl of theSteppable
trait for caveats when using this type with floating-point numbers.
Enums
- Enum describing what location an element has in a range.
- Enum describing how a range may overlap with another range.
- Enum describing how a range may be invalid.
Traits
- Trait representing number types over which intervals can be constructed.
- Trait representing number types which can be incrementally stepped.