summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2015-04-05 23:01:10 -0400
committerJesse Luehrs <doy@tozt.net>2015-04-05 23:01:10 -0400
commit0060d0fc0586ff0684ad22df7339a70c9b06b31f (patch)
treeb3b695f324b3274e37ea4311d4b209b956742216
parent9cfb519ef68cfdabd6c7ad11c86f80b5bcf970a6 (diff)
downloadmatasano-0060d0fc0586ff0684ad22df7339a70c9b06b31f.tar.gz
matasano-0060d0fc0586ff0684ad22df7339a70c9b06b31f.zip
also allow creating MersenneTwister instances from full state
-rw-r--r--src/random.rs16
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())