icentral_nodeid/
range.rs

1crate::ix!();
2
3pub struct NodeIdRange {
4    start: usize,
5    len:   usize,
6}
7
8impl NodeIdRange {
9
10    pub fn len(&self) -> usize {
11        self.len
12    }
13
14    pub fn range(&self) -> std::ops::Range<NodeId> {
15        std::ops::Range {
16            start: nodeid![self.start],
17            end:   nodeid![self.start + self.len]
18        }
19    }
20}
21
22impl IntoIterator for NodeIdRange {
23
24    type Item     = NodeId;
25    type IntoIter = std::vec::IntoIter<Self::Item>;
26
27    fn into_iter(self) -> Self::IntoIter {
28
29        let start = self.start;
30        let end   = start + self.len;
31
32        let vec: Vec<NodeId> = (start..end).map(|x| NodeId::from(x)).collect();
33
34        vec.into_iter()
35    }
36}
37
38impl NodeIdRange {
39
40    pub fn new(start: usize, len: usize) -> Self {
41        Self {
42            start,
43            len,
44        }
45    }
46}