1use ranges_ext::{RangeInfo, RangeSetHeapless};
2use std::ops::Range;
3
4#[derive(Clone, Debug, PartialEq, Eq)]
6struct DemoRange<T> {
7 range: core::ops::Range<T>,
8 kind: (),
9 overwritable: bool,
10}
11
12impl<T> DemoRange<T> {
13 fn new(range: core::ops::Range<T>, overwritable: bool) -> Self {
14 Self {
15 range,
16 kind: (),
17 overwritable,
18 }
19 }
20}
21
22impl<T: core::fmt::Debug + Clone + Ord + Copy> RangeInfo for DemoRange<T> {
23 type Kind = ();
24 type Type = T;
25
26 fn range(&self) -> Range<Self::Type> {
27 self.range.clone()
28 }
29
30 fn kind(&self) -> Self::Kind {
31 self.kind
32 }
33
34 fn overwritable(&self) -> bool {
35 self.overwritable
36 }
37
38 fn clone_with_range(&self, range: Range<Self::Type>) -> Self {
39 Self {
40 range,
41 kind: self.kind,
42 overwritable: self.overwritable,
43 }
44 }
45}
46
47fn main() -> Result<(), Box<dyn std::error::Error>> {
48 let mut set: RangeSetHeapless<DemoRange<i32>, 16> = RangeSetHeapless::default();
49 set.add(DemoRange::new(1..5, true))?;
50 set.add(DemoRange::new(3..8, true))?;
51 set.add(DemoRange::new(10..15, true))?;
52 set.add(DemoRange::new(12..18, true))?;
53
54 println!("=== 区间合并结果 ===");
55 for (i, info) in set.iter().enumerate() {
56 println!(
57 "Element {}: [{}, {})",
58 i,
59 info.range().start,
60 info.range().end
61 );
62 }
63
64 println!("\n=== Debug 格式 ===");
65 for (i, info) in set.iter().enumerate() {
66 println!("Element {}: {:?}", i, info);
67 }
68
69 println!("\n=== 完整切片 ===");
70 println!("{:?}", set.as_slice());
71
72 Ok(())
73}