diff options
author | Jesse Luehrs <doy@tozt.net> | 2015-04-05 23:01:10 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2015-04-05 23:01:10 -0400 |
commit | 0060d0fc0586ff0684ad22df7339a70c9b06b31f (patch) | |
tree | b3b695f324b3274e37ea4311d4b209b956742216 | |
parent | 9cfb519ef68cfdabd6c7ad11c86f80b5bcf970a6 (diff) | |
download | matasano-0060d0fc0586ff0684ad22df7339a70c9b06b31f.tar.gz matasano-0060d0fc0586ff0684ad22df7339a70c9b06b31f.zip |
also allow creating MersenneTwister instances from full state
-rw-r--r-- | src/random.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/random.rs b/src/random.rs index 64944b7..e99b085 100644 --- a/src/random.rs +++ b/src/random.rs @@ -55,6 +55,22 @@ impl SeedableRng<u32> for MersenneTwister { } } +impl SeedableRng<([u32; 624], usize)> for MersenneTwister { + fn reseed (&mut self, seed: ([u32; 624], usize)) { + let (state, index) = seed; + for i in 0..624 { + self.state[i] = state[i]; + } + self.index = index; + } + + fn from_seed (seed: ([u32; 624], usize)) -> MersenneTwister { + let mut mt = MersenneTwister::new_unseeded(); + mt.reseed(seed); + mt + } +} + impl Rand for MersenneTwister { fn rand<R: Rng> (other: &mut R) -> MersenneTwister { MersenneTwister::from_seed(other.next_u32()) |