getbeginend/
getbeginend.rs1use 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}