Skip to main content

union/
union.rs

1//! Union two interval sets.
2//!
3//! Each output interval carries `(Option<A>, Option<B>)`, so callers can tell
4//! which input(s) covered each region.
5//!
6//! Run with: `cargo run --example union`
7
8use odsek::*;
9
10fn main() {
11    // [1, 3] tagged "A"
12    let ia = Interval::new(EndpointOC::Closed(1), EndpointOC::Closed(3), "A");
13    // (2, 4) tagged "B"
14    let ib = Interval::new(EndpointOC::Open(2), EndpointOC::Open(4), "B");
15
16    let isa = IntervalsSingle::new(ia);
17    let isb = IntervalsSingle::new(ib);
18
19    // Union: [1,2] -> (Some("A"), None), (2,3] -> (Some("A"), Some("B")), (3,4) -> (None, Some("B"))
20    for iv in or(isa, isb).into_iter() {
21        println!("{:?}", iv);
22    }
23}