diff options
Diffstat (limited to 'oryxc/src/depmap.rs')
| -rw-r--r-- | oryxc/src/depmap.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/oryxc/src/depmap.rs b/oryxc/src/depmap.rs new file mode 100644 index 0000000..60e358e --- /dev/null +++ b/oryxc/src/depmap.rs @@ -0,0 +1,31 @@ +use boxcar; +use dashmap::DashMap; + +use crate::compiler::Job; +use crate::prelude::*; + +pub struct DepMap(DashMap<Dependency, boxcar::Vec<Job>>); + +#[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<boxcar::Vec<Job>> { + return self.0.remove(&d).map(|(_, v)| v); + } +} |