Struct DynamicConstraint

Source
pub struct DynamicConstraint { /* private fields */ }
Expand description

A Constraint that contains a vector of trait objects representing constraints and verifies all of them. This is more flexible than a CompositeConstraint, but also less efficient, since it needs dynamic dispatch.

Implementations§

Source§

impl DynamicConstraint

Source

pub fn with_children( constraints: Vec<Box<dyn CloneConstraint>>, ) -> DynamicConstraint

Creates a new dynamic constraint from the given child constraints. The created constraint is defined to be satisfied if all children are satisfied.

Source

pub fn new() -> DynamicConstraint

Creates a new dynamic constraint without any child constraint. Children can be added later using DynamicConstraint::add.

Source

pub fn add(&mut self, constraint: impl CloneConstraint + 'static)

Adds a CloneConstraint to this dynamic constraint as a child. It is wrapped in a trait object.

Trait Implementations§

Source§

impl Clone for DynamicConstraint

Source§

fn clone(&self) -> Self

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 Constraint for DynamicConstraint

Source§

fn check(&self, grid: &SudokuGrid) -> bool

Checks whether the given SudokuGrid matches this constraint, that is, every cell matches this constraint. By default, this runs check_cell on every cell of the grid, which may be inefficient, so custom implementations may be advantageous.
Source§

fn check_cell(&self, grid: &SudokuGrid, column: usize, row: usize) -> bool

Checks whether the cell at the given position in the SudokuGrid fulfills the constraint. This is the same as calling check_number with the same coordinates and the number which is actually filled in that cell. If the cell is empty, this function always returns true.
Source§

fn check_number( &self, grid: &SudokuGrid, column: usize, row: usize, number: usize, ) -> bool

Checks whether the given number would fit into the cell specified by column and row into the grid without violating this constraint. This function does not have to check whether number is actually a valid number for this grid (i.e. in the interval [1, size]). If you require this guarantee, use Sudoku::is_valid_number instead. Read more
Source§

fn get_groups(&self, grid: &SudokuGrid) -> Vec<Group>

Gets a vector of all groups that are defined by this constraint. A group is a set of cells which may not contain repeated numbers. As an example, the BlockConstraint defines each block as a group. Some constraints, such as the KingsMoveConstraint, do not have groups. In this particular case, a cell removed by a kings-move to the top-left may be the same as one to the bottom-right, so the cells removed by a kings-move from any particular cell cannot form a group. Such constraints should return an empty vector here. Read more
Source§

impl Default for DynamicConstraint

Source§

fn default() -> DynamicConstraint

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

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<C> CloneConstraint for C
where C: Constraint + Clone + 'static,

Source§

fn clone_box(&self) -> Box<dyn CloneConstraint>

Clones a trait object of this constraint.
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> 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.
Source§

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

Source§

fn vzip(self) -> V