1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#[derive(Clone, Default)] pub struct StackState { name: &'static str, stack: usize, } impl StackState { pub(crate) fn new(name: &'static str) -> Self { Self { name, stack: 0 } } pub fn push(&mut self, bit: bool) { let bit_value = if bit { 1 } else { 0 }; self.stack = (self.stack << 1) | bit_value } pub fn pop(&mut self) { self.stack >>= 1; } pub(crate) fn is_active(&self) -> bool { (self.stack & 1) == 1 } } impl std::fmt::Debug for StackState { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_str(&format!("[{:b} <= {}]", self.stack, self.name)) } }