use super::tree::{Cst, NodeHandle};
#[derive(Debug)]
pub struct Aside<T: Default> {
items: Vec<T>,
}
impl<T: Default> Aside<T> {
pub fn new(cst: &Cst) -> Self {
Self {
items: Vec::from_iter(std::iter::from_fn(|| Some(T::default())).take(cst.nodes.len())),
}
}
pub fn get(&self, node: NodeHandle) -> &T {
&self.items[node.0 as usize]
}
pub fn get_mut(&mut self, node: NodeHandle) -> &mut T {
&mut self.items[node.0 as usize]
}
pub fn set(&mut self, node: NodeHandle, val: T) {
*self.get_mut(node) = val;
}
pub fn iter(&self) -> impl Iterator<Item = (NodeHandle, &T)> {
self.items
.iter()
.enumerate()
.map(|(i, v)| (NodeHandle(i as u32), v))
}
}