#interval #coalesced #1d #structures #overlap

coalesced_intervals

Data structure for maintaining maximally-coalesced 1D intervals

7 releases

0.1.6 Jun 21, 2024
0.1.5 May 12, 2024

#1085 in Data structures

Download history 4117/week @ 2025-10-12 4225/week @ 2025-10-19 3110/week @ 2025-10-26 2034/week @ 2025-11-02 1555/week @ 2025-11-09 1929/week @ 2025-11-16 799/week @ 2025-11-23 1858/week @ 2025-11-30 3221/week @ 2025-12-07 2913/week @ 2025-12-14 611/week @ 2025-12-21 291/week @ 2025-12-28 1871/week @ 2026-01-04 2812/week @ 2026-01-11 3361/week @ 2026-01-18 6577/week @ 2026-01-25

14,716 downloads per month

Apache-2.0

115KB
319 lines

coalesced_intervals: maintain maximally coalesced 1D intervals

sample usage diagram

extern crate coalesced_intervals;

fn main() {
    let mut ivals = coalesced_intervals::CoalescedIntervals::new();

    // Add `[0, 1)` and `[2, 3)` (there's a hole in the middle).
    ivals.add(0, 1);
    ivals.add(2, 3);
    assert_eq!(ivals.to_vec(), [(0, 1), (2, 3)]);

    // By adding `[1, 2)` we end up with a coalesced segment `[0, 3)`.
    ivals.add(1, 2);
    assert_eq!(ivals.to_vec(), [(0, 3)]);

    // We can see that the coalesced interval has partial overlap
    // with other related intervals.
    assert!(ivals.contains_partial(-1, 1));
    assert!(ivals.contains_partial(1, 2));
    assert!(ivals.contains_partial(2, 4));

    // We can ask for the interval containing some target value.
    assert_eq!(ivals.get_interval_containing(1), Some((0, 3)));
    assert_eq!(ivals.get_interval_containing(4), None);

    // We can ask for the interval that starts at-or-after some value.
    assert_eq!(ivals.get_first_start_from(-1), Some((0, 3)));
    assert_eq!(ivals.get_first_start_from(0), Some((0, 3)));
    assert_eq!(ivals.get_first_start_from(1), None);
}

Dependencies