veripb_formula/
boolean_var.rs

1//! Implementation of [`VarType`] for Boolean variables.
2
3use crate::{prelude::Negate, var_type::VarType};
4
5/// A [`BooleanVar`] is a variable which takes boolean variables. The [`BooleanVar`] implements the [`VarType`] trait.
6#[derive(Debug, Clone, Default)]
7pub struct BooleanVar {
8    value: BoolValue,
9}
10
11/// A Boolean value that is either `Unassigned`, `Assigned(true)`, or `Assigned(false)`.
12#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
13pub enum BoolValue {
14    Unassigned,
15    Assigned(bool),
16}
17
18impl VarType for BooleanVar {
19    type Value = BoolValue;
20
21    #[inline]
22    fn new() -> Self
23    where
24        Self: Sized,
25    {
26        BooleanVar {
27            value: BoolValue::Unassigned,
28        }
29    }
30
31    #[inline]
32    fn set_value(&mut self, value: Self::Value) {
33        self.value = value;
34    }
35
36    #[inline]
37    fn get_value(&self) -> Self::Value {
38        self.value
39    }
40}
41
42impl Negate for BoolValue {
43    #[inline]
44    fn negate(self) -> Self {
45        match self {
46            Self::Unassigned => Self::Unassigned,
47            Self::Assigned(value) => Self::Assigned(!value),
48        }
49    }
50}
51
52impl Default for BoolValue {
53    #[inline]
54    fn default() -> Self {
55        Self::Unassigned
56    }
57}