use std::collections::HashSet;
use std::sync::{PoisonError, RwLock};
use crate::dag::symbol::SymbolId;
#[derive(Debug, Default)]
pub struct SymbolPermissions {
commutative_symbols: RwLock<HashSet<SymbolId>>,
}
impl SymbolPermissions {
#[must_use]
pub fn new() -> Self {
Self {
commutative_symbols: RwLock::new(HashSet::new()),
}
}
pub fn set_commutative(&self, sym: SymbolId, commutative: bool) {
let mut guard = self
.commutative_symbols
.write()
.unwrap_or_else(PoisonError::into_inner);
if commutative {
guard.insert(sym);
} else {
guard.remove(&sym);
}
}
#[must_use]
pub fn is_commutative(&self, sym: SymbolId) -> bool {
let guard = self
.commutative_symbols
.read()
.unwrap_or_else(PoisonError::into_inner);
guard.contains(&sym)
}
}