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 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more