blues-lsp 0.1.3

LSP language server for the Bluespec SystemVerilog language
Documentation
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))
    }
}