Skip to main content

IntersectionConstraint

Struct IntersectionConstraint 

Source
pub struct IntersectionConstraint<C> { /* private fields */ }
Expand description

Logical conjunction of constraints (AND).

All children must agree on every variable binding. Built by the and! macro or directly via new.

The intersection delegates to its children using cardinality-aware ordering: the child with the lowest estimate proposes candidates, and the remaining children confirm them in order of increasing estimate. This strategy keeps the candidate set small from the start and avoids materialising cross products.

Variables from all children are exposed as a single union, so the engine sees one flat set of variables regardless of how many sub-constraints contribute.

Implementations§

Source§

impl<'a, C> IntersectionConstraint<C>
where C: Constraint<'a> + 'a,

Source

pub fn new(constraints: Vec<C>) -> Self

Creates an intersection over the given constraints.

Trait Implementations§

Source§

impl<'a, C> Constraint<'a> for IntersectionConstraint<C>
where C: Constraint<'a> + 'a,

Source§

fn variables(&self) -> VariableSet

Returns the union of all children’s variable sets.

Source§

fn estimate(&self, variable: VariableId, binding: &Binding) -> Option<usize>

Returns the minimum estimate across children that constrain variable. The tightest child bounds the search, reflecting the intersection semantics: every child must agree, so the smallest candidate set dominates.

Source§

fn propose( &self, variable: VariableId, binding: &Binding, proposals: &mut Vec<RawValue>, )

Sorts children by estimate, lets the tightest one propose, then confirms through the rest in ascending estimate order. Children that return None for this variable are skipped entirely.

Source§

fn confirm( &self, variable: VariableId, binding: &Binding, proposals: &mut Vec<RawValue>, )

Confirms proposals through all children that constrain variable, in order of increasing estimate.

Source§

fn satisfied(&self, binding: &Binding) -> bool

Returns true only when every child is satisfied.

Source§

fn influence(&self, variable: VariableId) -> VariableSet

Returns the union of all children’s influence sets for variable.

Auto Trait Implementations§

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> 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V