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}