pub struct MersenneTwisterConfig<const N: usize, const M: usize> {
pub params: MersenneTwisterParams,
}Expand description
Configuration for an MT19937-style Mersenne Twister.
N is the array length; M is the recurrence offset. The canonical
MT19937 instantiation is MersenneTwisterConfig::<624, 397>.
§Examples
use vrd::MersenneTwisterConfig;
let cfg = MersenneTwisterConfig::<624, 397>::default();
assert_eq!(cfg.params.upper_mask, 0x80000000);Fields§
§params: MersenneTwisterParamsThe validated configuration parameters.
Implementations§
Source§impl<const N: usize, const M: usize> MersenneTwisterConfig<N, M>
impl<const N: usize, const M: usize> MersenneTwisterConfig<N, M>
Sourcepub fn new_custom(
params: MersenneTwisterParams,
) -> Result<Self, MersenneTwisterError>
pub fn new_custom( params: MersenneTwisterParams, ) -> Result<Self, MersenneTwisterError>
Builds a config with custom parameters, validating the invariants.
§Examples
use vrd::{MersenneTwisterConfig, MersenneTwisterParams};
let p = MersenneTwisterParams::default();
let cfg = MersenneTwisterConfig::<624, 397>::new_custom(p).unwrap();
assert_eq!(cfg.params, p);§Errors
Returns MersenneTwisterError::InvalidConfig when any parameter
(or the N/M const generics) violates a Mersenne-Twister
invariant.
Sourcepub fn validate(
params: &MersenneTwisterParams,
) -> Result<(), MersenneTwisterError>
pub fn validate( params: &MersenneTwisterParams, ) -> Result<(), MersenneTwisterError>
Validates params against the Mersenne-Twister invariants.
§Examples
use vrd::{MersenneTwisterConfig, MersenneTwisterParams};
let p = MersenneTwisterParams::default();
assert!(MersenneTwisterConfig::<624, 397>::validate(&p).is_ok());
// Invalid: M >= N.
assert!(MersenneTwisterConfig::<10, 10>::validate(&p).is_err());§Errors
Returns MersenneTwisterError::InvalidConfig when the invariants
are violated. The static message in the error names which one.
Sourcepub fn new() -> Result<Self, MersenneTwisterError>
pub fn new() -> Result<Self, MersenneTwisterError>
Builds a config using the canonical MT19937 parameters.
§Examples
use vrd::MersenneTwisterConfig;
let cfg = MersenneTwisterConfig::<624, 397>::new().unwrap();
assert_eq!(cfg.params.matrix_a, 0x9908b0df);§Errors
Returns MersenneTwisterError::InvalidConfig only if the
N/M const generics violate the Mersenne-Twister invariants.
MersenneTwisterConfig::<624, 397>::new() is infallible.
Sourcepub fn set_config(
&mut self,
params: MersenneTwisterParams,
) -> Result<(), MersenneTwisterError>
pub fn set_config( &mut self, params: MersenneTwisterParams, ) -> Result<(), MersenneTwisterError>
Replaces the parameters in place after re-validating them. On error, the existing parameters are preserved.
§Examples
use vrd::{MersenneTwisterConfig, MersenneTwisterParams};
let mut cfg = MersenneTwisterConfig::<624, 397>::default();
cfg.set_config(MersenneTwisterParams::default()).unwrap();§Errors
Returns MersenneTwisterError::InvalidConfig when params
fails validation; the existing self.params is left unchanged.
Trait Implementations§
Source§impl<const N: usize, const M: usize> Clone for MersenneTwisterConfig<N, M>
impl<const N: usize, const M: usize> Clone for MersenneTwisterConfig<N, M>
Source§fn clone(&self) -> MersenneTwisterConfig<N, M>
fn clone(&self) -> MersenneTwisterConfig<N, M>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Default for MersenneTwisterConfig<624, 397>
impl Default for MersenneTwisterConfig<624, 397>
Source§impl<'de, const N: usize, const M: usize> Deserialize<'de> for MersenneTwisterConfig<N, M>
impl<'de, const N: usize, const M: usize> Deserialize<'de> for MersenneTwisterConfig<N, M>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<const N: usize, const M: usize> Ord for MersenneTwisterConfig<N, M>
impl<const N: usize, const M: usize> Ord for MersenneTwisterConfig<N, M>
Source§fn cmp(&self, other: &MersenneTwisterConfig<N, M>) -> Ordering
fn cmp(&self, other: &MersenneTwisterConfig<N, M>) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<const N: usize, const M: usize> PartialEq for MersenneTwisterConfig<N, M>
impl<const N: usize, const M: usize> PartialEq for MersenneTwisterConfig<N, M>
Source§fn eq(&self, other: &MersenneTwisterConfig<N, M>) -> bool
fn eq(&self, other: &MersenneTwisterConfig<N, M>) -> bool
self and other values to be equal, and is used by ==.