Generator

Struct Generator 

Source
pub struct Generator<C: CoordinateSystem, G: Grid<C>> { /* private fields */ }
Expand description

Model synthesis/WFC generator. Use a GeneratorBuilder to get an instance of a Generator.

Implementations§

Source§

impl<C: CoordinateSystem, G: Grid<C>> Generator<C, G>

Source

pub fn builder() -> GeneratorBuilder<Unset, Unset, C, G>

Returns a new GeneratorBuilder

Source

pub fn max_retry_count(&self) -> u32

Returns the max_retry_count: how many time the Generator should retry to generate the Grid when a contradiction is encountered

Source

pub fn set_max_retry_count(&mut self, max_retry_count: u32)

Specifies how many time the Generator should retry to generate the Grid when a contradiction is encountered

Source

pub fn seed(&self) -> u64

Returns the seed that was used to initialize the generator RNG for this generation. See RngMode for more information.

Source

pub fn grid(&self) -> &G

Returns the Grid used by the generator

Source

pub fn rules(&self) -> &Rules<C>

Returns the Rules used by the generator

Source

pub fn nodes_left(&self) -> usize

Returns how many nodes are left to generate

Source

pub fn to_grid_data(&self) -> Option<GridData<C, ModelInstance, G>>

Returns a GridData of ModelInstance with all the nodes generated if the generation is done

Returns None if the generation is still ongoing or currently failed

Source

pub fn generate_grid( &mut self, ) -> Result<(GenInfo, GridData<C, ModelInstance, G>), GeneratorError>

Tries to generate the whole grid. If the generation fails due to a contradiction, it will retry max_retry_count times before returning the last encountered GeneratorError

If the generation is currently done or failed, calling this method will reinitialize the generator with the next seed before starting the generation.

If the generation was already started by previous calls to Generator::set_and_propagate or Generator::select_and_propagate, this will simply continue the current generation.

Source

pub fn generate(&mut self) -> Result<GenInfo, GeneratorError>

Same as Generator::generate_grid but does not return the generated ModelInstance when successful.

Generator::to_grid_data can still be called to retrieve a GridData afterwards.

Source

pub fn select_and_propagate( &mut self, ) -> Result<GenerationStatus, GeneratorError>

Advances the generation by one “step”: select a node and a model via the heuristics and propagate the changes.

If the generation is currently done or failed, this method will just return the done or failed status/error.

Note: One call to this method can lead to more than one node generated if the propagation phase forces some other node(s) into a definite state (due to only one possible model remaining on a node)

Source

pub fn select_and_propagate_collected( &mut self, ) -> Result<(GenerationStatus, Vec<GeneratedNode>), GeneratorError>

Same as Generator::select_and_propagate but collects and return the generated GeneratedNode when successful.

Source

pub fn set_and_propagate<N: NodeRef<C, G>, M: ModelVariantRef<C>>( &mut self, node_ref: N, model_variant_ref: M, memorized: bool, ) -> Result<GenerationStatus, NodeSetError>

Tries to set the node referenced by node_ref to the model refrenced by model_variant_ref. Then tries to propagate the change.

If the generation is currently done or failed, this method will just return the done or failed status/error.

Note: One call to this method can lead to more than one node generated if the propagation phase forces some other node(s) into a definite state (due to only one possible model remaining on a node)

Source

pub fn set_and_propagate_collected<N: NodeRef<C, G>, M: ModelVariantRef<C>>( &mut self, node_ref: N, model_variant_ref: M, memorized: bool, ) -> Result<(GenerationStatus, Vec<GeneratedNode>), NodeSetError>

Same as Generator::set_and_propagate but also returns all the GeneratedNode generated by this generation operation if successful.

Source

pub fn reinitialize(&mut self) -> GenerationStatus

Reinitalizes the generator with the next seed (a seed is generated from the current seed)

Source

pub fn reinitialize_collected( &mut self, ) -> (GenerationStatus, Vec<GeneratedNode>)

Same as Generator::reinitialize but also returns all the GeneratedNode generated by this generation operation.

Source

pub fn get_models_on(&self, node_index: NodeIndex) -> Vec<ModelInstance>

Returns all the current possible model instances on node_index

Source

pub fn get_models_variations_on( &self, node_index: NodeIndex, ) -> (Vec<ModelVariations>, u32)

Returns all the current possible model on node_index grouped by variations, as well as the total number of possible models

Auto Trait Implementations§

§

impl<C, G> Freeze for Generator<C, G>
where G: Freeze,

§

impl<C, G> RefUnwindSafe for Generator<C, G>

§

impl<C, G> Send for Generator<C, G>
where G: Send,

§

impl<C, G> Sync for Generator<C, G>
where G: Sync,

§

impl<C, G> Unpin for Generator<C, G>
where G: Unpin,

§

impl<C, G> UnwindSafe for Generator<C, G>

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

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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