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}