Skip to main content

getbeginend/
getbeginend.rs

1use common_range_tools::{GetBeginEnd, GetBeginEndOption, NumberIncDecCpCmp, OverlapIter};
2
3struct MyFactory {}
4
5#[derive(Clone, Copy, Debug)]
6struct MyRange {
7    a: i32,
8    b: i32,
9}
10
11impl GetBeginEndOption<i32, MyRange> for MyFactory {
12    fn factory(&self, opt: Option<(i32, i32)>) -> Option<MyRange> {
13        match opt {
14            Some((a, b)) => Some(MyRange { a, b }),
15            None => None,
16        }
17    }
18
19    fn new_range(&self, src: (i32, i32)) -> MyRange {
20        return MyRange { a: src.0, b: src.1 };
21    }
22}
23impl GetBeginEnd<i32> for MyRange {
24    fn get_begin(&self) -> &i32 {
25        return &self.a;
26    }
27
28    fn get_end(&self) -> &i32 {
29        return &self.b;
30    }
31
32    fn to_tuple(self) -> (i32, i32) {
33        return (self.a, self.b);
34    }
35}
36
37fn main() {
38    for r in OverlapIter::new(
39        vec![
40            MyRange { a: 1, b: 4 },
41            MyRange { a: 3, b: 5 },
42            MyRange { a: 4, b: 6 },
43        ],
44        1,
45        NumberIncDecCpCmp::defaults(),
46        MyFactory {},
47    ) {
48        println!("{:?}", r);
49    }
50}