static_bushes/
util.rs

1#[derive(Clone, Debug, PartialEq, Eq)]
2pub enum IndexVec {
3    U16(Vec<u16>),
4    U32(Vec<u32>),
5}
6
7impl IndexVec {
8    pub fn get(&self, idx: usize) -> u32 {
9        match self {
10            IndexVec::U16(v) => v[idx] as u32,
11            IndexVec::U32(v) => v[idx],
12        }
13    }
14
15    pub fn set(&mut self, idx: usize, val: u32) {
16        match self {
17            IndexVec::U16(v) => {
18                v[idx] = val as u16;
19            }
20            IndexVec::U32(v) => {
21                v[idx] = val;
22            }
23        }
24    }
25
26    pub fn swap(&mut self, i: usize, j: usize) {
27        match self {
28            IndexVec::U16(v) => v.swap(i, j),
29            IndexVec::U32(v) => v.swap(i, j),
30        }
31    }
32
33    pub fn len(&self) -> usize {
34        match self {
35            IndexVec::U16(v) => v.len(),
36            IndexVec::U32(v) => v.len(),
37        }
38    }
39
40    #[cfg(test)]
41    pub fn iter<'a>(&'a self) -> impl Iterator<Item = u32> + 'a {
42        let out: Box<dyn Iterator<Item = u32>> = match self {
43            IndexVec::U16(v) => Box::new(v.iter().map(|x| *x as u32)),
44            IndexVec::U32(v) => Box::new(v.iter().cloned()),
45        };
46        out
47    }
48}