use std::collections::HashMap;
use std::sync::Arc;
use super::config::AbstractProcessConfiguration;
pub(crate) enum NodeMemoizer<Conf : AbstractProcessConfiguration> {
Memoizing(HashMap<Arc<Conf::DomainSpecificNode>, u32>),
NotMemoizing
}
impl<Conf : AbstractProcessConfiguration> NodeMemoizer<Conf> {
pub fn new(is_memoized : bool) -> Self {
if is_memoized {
Self::Memoizing(HashMap::new())
} else {
Self::NotMemoizing
}
}
pub fn is_memoized(&self) -> bool {
match &self {
NodeMemoizer::Memoizing(_) => true,
NodeMemoizer::NotMemoizing => false
}
}
pub fn check_memo(&self, to_look_up : &Conf::DomainSpecificNode) -> Option<u32> {
match &self {
NodeMemoizer::Memoizing(memo) => memo.get(to_look_up).copied(),
NodeMemoizer::NotMemoizing => None,
}
}
pub fn memoize_new_node(&mut self, arc_node : Arc<Conf::DomainSpecificNode>, new_node_id : u32) {
match self {
NodeMemoizer::Memoizing(memo) => {
memo.insert(arc_node, new_node_id);
},
NodeMemoizer::NotMemoizing => {}
}
}
}