use boxcar; use dashmap::DashMap; use crate::compiler::Job; use crate::prelude::*; pub struct DepMap(DashMap>); #[derive(Eq, Hash, PartialEq)] pub enum Dependency { Symbol(SymbolId), } impl DepMap { pub fn with_capacity(n: usize) -> Self { return Self(DashMap::with_capacity(n)); } pub fn add(&self, d: Dependency, j: Job) { self.0 .entry(d) .and_modify(|v| { v.push(j.clone()); }) .or_insert_with(|| boxcar::vec![j]); } pub fn pop(&self, d: Dependency) -> Option> { return self.0.remove(&d).map(|(_, v)| v); } }