quantized_density_fields/lod/
level.rs

1use id::ID;
2use qdf::state::State;
3
4/// Holds information about space level.
5#[derive(Debug, Clone)]
6pub struct Level<S>
7where
8    S: State,
9{
10    id: ID,
11    parent: Option<ID>,
12    level: usize,
13    index: usize,
14    state: S,
15    sublevels: Vec<ID>,
16}
17
18impl<S> Level<S>
19where
20    S: State,
21{
22    #[inline]
23    pub(crate) fn new(id: ID, parent: Option<ID>, level: usize, index: usize, state: S) -> Self {
24        Self {
25            id,
26            parent,
27            level,
28            index,
29            state,
30            sublevels: vec![],
31        }
32    }
33
34    /// Gets level id.
35    #[inline]
36    pub fn id(&self) -> ID {
37        self.id
38    }
39
40    /// Gets level parent id or `None` if it is root level.
41    #[inline]
42    pub fn parent(&self) -> Option<ID> {
43        self.parent
44    }
45
46    /// Gets zoom level index.
47    #[inline]
48    pub fn level(&self) -> usize {
49        self.level
50    }
51
52    /// Tells level index in parent.
53    #[inline]
54    pub fn index(&self) -> usize {
55        self.index
56    }
57
58    /// Gets level state.
59    #[inline]
60    pub fn state(&self) -> &S {
61        &self.state
62    }
63
64    /// Gets level sublevels.
65    #[inline]
66    pub fn sublevels(&self) -> &[ID] {
67        &self.sublevels
68    }
69
70    #[inline]
71    pub fn apply_state(&mut self, state: S) {
72        self.state = state;
73    }
74
75    #[inline]
76    pub(crate) fn apply_sublevels(&mut self, sublevels: Vec<ID>) {
77        self.sublevels = sublevels;
78    }
79}