Skip to main content

VariableState

Struct VariableState 

Source
pub struct VariableState<Atomic: AtomicConstraint> { /* private fields */ }
Expand description

The domains of all variables in the problem.

Domains are initially unbounded. This is why bounds are represented as IntExt.

Domains can be reduced through VariableState::apply. By default, the domain of every variable is infinite.

Implementations§

Source§

impl<Atomic> VariableState<Atomic>
where Atomic: AtomicConstraint,

Source

pub fn prepare_for_conflict_check( premises: impl IntoIterator<Item = Atomic>, consequent: Option<Atomic>, ) -> Result<Self, Atomic::Identifier>

Create a variable state that applies all the premises and, if present, the negation of the consequent.

If premises /\ !consequent contain mutually exclusive atomic constraints (e.g., [x >= 5] and [x <= 2]) then None is returned.

An InferenceChecker will receive a VariableState that conforms to this description.

Source

pub fn domains<'this>( &'this self, ) -> impl Iterator<Item = &'this Atomic::Identifier> + 'this
where Atomic::Identifier: 'this,

The domains for which at least one atomic is applied.

Source

pub fn lower_bound(&self, identifier: &Atomic::Identifier) -> IntExt

Get the lower bound of a variable.

Source

pub fn upper_bound(&self, identifier: &Atomic::Identifier) -> IntExt

Get the upper bound of a variable.

Source

pub fn contains(&self, identifier: &Atomic::Identifier, value: i32) -> bool

Tests whether the given value is in the domain of the variable.

Source

pub fn holes<'a>( &'a self, identifier: &Atomic::Identifier, ) -> impl Iterator<Item = i32> + 'a
where Atomic::Identifier: 'a,

Get the holes within the lower and upper bound of the variable expression.

Source

pub fn fixed_value(&self, identifier: &Atomic::Identifier) -> Option<i32>

Get the fixed value of this variable, if it is fixed.

Source

pub fn iter_domain<'a>( &'a self, identifier: &Atomic::Identifier, ) -> Option<DomainIterator<'a>>
where Atomic::Identifier: 'a,

Obtain an iterator over the domain of the variable.

If the domain is unbounded, then None is returned.

Source

pub fn apply(&mut self, atomic: &Atomic) -> bool

Apply the given Atomic to the state.

Returns true if the state remains consistent, or false if the atomic cannot be true in conjunction with previously applied atomics.

Source

pub fn is_true(&self, atomic: &Atomic) -> bool

Is the given atomic true in the current state.

Trait Implementations§

Source§

impl<Atomic: Clone + AtomicConstraint> Clone for VariableState<Atomic>
where Atomic::Identifier: Clone,

Source§

fn clone(&self) -> VariableState<Atomic>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<Atomic: Debug + AtomicConstraint> Debug for VariableState<Atomic>
where Atomic::Identifier: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<Atomic: AtomicConstraint> Default for VariableState<Atomic>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<Atomic> Freeze for VariableState<Atomic>

§

impl<Atomic> RefUnwindSafe for VariableState<Atomic>

§

impl<Atomic> Send for VariableState<Atomic>
where <Atomic as AtomicConstraint>::Identifier: Send,

§

impl<Atomic> Sync for VariableState<Atomic>
where <Atomic as AtomicConstraint>::Identifier: Sync,

§

impl<Atomic> Unpin for VariableState<Atomic>
where <Atomic as AtomicConstraint>::Identifier: Unpin,

§

impl<Atomic> UnwindSafe for VariableState<Atomic>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.