Expand description
An interval set/map library inspired by Boost.Icl.
This crate provides two main data structures:
IntervalSet: A collection of non-overlapping intervals with automatic mergingIntervalMap: A mapping from intervals to values with split/merge behavior
§Examples
§IntervalSet
use intervalmap::IntervalSet;
let mut set = IntervalSet::new();
set.insert(0..10);
set.insert(5..15); // Merges with [0, 10) to form [0, 15)
assert!(set.contains(7));
assert!(!set.contains(20));§IntervalMap
use intervalmap::IntervalMap;
let mut map = IntervalMap::new();
map.insert(0..10, "first");
map.insert(5..15, "second"); // Splits: [0,5)->"first", [5,15)->"second"
assert_eq!(map.get(3), Some(&"first"));
assert_eq!(map.get(7), Some(&"second"));§Using Macros
use intervalmap::{interval_set, interval_map};
let set = interval_set![0..10, 20..30];
assert!(set.contains(5));
let map = interval_map![(0..10) => "a", (20..30) => "b"];
assert_eq!(map.get(5), Some(&"a"));Re-exports§
pub use interval_map::Entry;pub use interval_map::IntervalMap;pub use interval_map::OccupiedEntry;pub use interval_map::VacantEntry;
Modules§
Macros§
- interval_
map - Creates an
IntervalMapfrom a list of range-value pairs. - interval_
set - Creates an
IntervalSetfrom a list of ranges.
Structs§
- Interval
- A half-open interval
[start, end). - Interval
Set - A set of non-overlapping intervals with automatic merging.
Traits§
- Index
Type - A trait for types that can be used as interval indices.