From 65db7ed17bb12d89a2945e3205b325940446f667 Mon Sep 17 00:00:00 2001 From: elvis Date: Sat, 20 Dec 2025 21:21:14 +0100 Subject: [PATCH] step and evaluate function for bool fuction and network --- rsprocess/src/boolean.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/rsprocess/src/boolean.rs b/rsprocess/src/boolean.rs index 5f38d41..fc247da 100644 --- a/rsprocess/src/boolean.rs +++ b/rsprocess/src/boolean.rs @@ -16,6 +16,21 @@ pub enum BooleanFunction { Or(Box, Box), } +impl BooleanFunction { + pub fn evaluate(&self, assignments: &BTreeMap) -> bool { + match self { + | Self::False => false, + | Self::True => true, + | Self::Not(bf) => !bf.evaluate(assignments), + | Self::Variable(i) => *assignments.get(i).unwrap_or(&false), + | Self::And(bf1, bf2) => + bf1.evaluate(assignments) && bf2.evaluate(assignments), + | Self::Or(bf1, bf2) => + bf1.evaluate(assignments) || bf2.evaluate(assignments), + } + } +} + impl PrintableWithTranslator for BooleanFunction { fn print( &self, @@ -258,6 +273,22 @@ pub struct BooleanNetwork { update_rules: BTreeMap, } +impl BooleanNetwork { + pub fn step(&self) -> BooleanNetwork { + BooleanNetwork { + initial_state: { + BTreeMap::from_iter( + self.update_rules + .iter() + .map(|(el, bf)| (*el, bf.evaluate(&self.initial_state))) + .collect::>(), + ) + }, + update_rules: self.update_rules.clone(), + } + } +} + impl PrintableWithTranslator for BooleanNetwork { fn print( &self,