use std::{collections::HashMap, hash::Hash};

//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>\\

#[derive(Debug)]
pub struct Bimap<V: Eq + Hash, Λ: Eq + Hash> {
    pub mλ: HashMap<V, Λ>,
    pub my: HashMap<Λ, V>,
}

impl<V: Eq + Hash + Clone, Λ: Eq + Hash + Clone> Bimap<V, Λ> {
    pub fn new() -> Self {
        Bimap {
            mλ: HashMap::new(),
            my: HashMap::new(),
        }
    }

    pub fn insert(&mut self, y: V, λ: Λ) {
        self.mλ.insert(y.clone(), λ.clone());
        self.my.insert(λ, y);
    }
}

//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>>\\