vn_settings/
image.rs

1use super::{Resettable, Settings};
2
3#[derive(Clone)]
4pub struct ImageSettings<T> {
5    pub images: Vec<Vec<T>>,
6}
7
8impl<T: Default> ImageSettings<T> {
9    pub fn common() -> Self {
10        Self { images: Vec::new() }
11    }
12
13    fn at(&mut self, i: usize, j: usize) -> &mut T {
14        while i >= self.images.len() {
15            self.images.push(Vec::new());
16        }
17
18        let image_order = &mut self.images[i];
19
20        while j >= image_order.len() {
21            image_order.push(Default::default());
22        }
23
24        &mut image_order[j]
25    }
26}
27
28pub type ImageParameter = (usize, usize);
29
30impl<T: Default> Settings<ImageParameter> for ImageSettings<T> {
31    type Value = T;
32
33    fn get_mut(&mut self, parameter: &ImageParameter) -> &mut T {
34        let &(i, j) = parameter;
35        self.at(i, j)
36    }
37}
38
39impl<T: Resettable> Resettable for ImageSettings<T> {
40    fn reset(&mut self) {
41        for image_order in &mut self.images {
42            for image in image_order {
43                image.reset();
44            }
45        }
46    }
47}