aiken/crates/uplc/src/debruijn/bimap.rs

40 lines
849 B
Rust

use std::collections::HashMap;
use crate::ast::Unique;
use super::Level;
#[derive(Debug)]
pub struct BiMap {
left: HashMap<Unique, Level>,
right: HashMap<Level, Unique>,
}
impl BiMap {
pub(super) fn new() -> Self {
BiMap {
right: HashMap::new(),
left: HashMap::new(),
}
}
pub(super) fn insert(&mut self, unique: Unique, level: Level) {
self.left.insert(unique, level);
self.right.insert(level, unique);
}
pub(super) fn remove(&mut self, unique: Unique, level: Level) {
self.left.remove(&unique);
self.right.remove(&level);
}
pub(super) fn get(&self, unique: &Unique) -> Option<&Level> {
self.left.get(unique)
}
pub(super) fn get_right(&self, level: &Level) -> Option<&Unique> {
self.right.get(level)
}
}