1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#![allow(dead_code)] extern crate rand; use rand::Rng; use rand::SeedableRng; use rand_isaac::IsaacRng; use std::slice; pub unsafe fn mk_rng<T: Rng, S>(seed_ptr: *const i32, f: S) -> T where T: Rng, S: Fn([u8;32]) -> T { let seed_slice = slice::from_raw_parts(seed_ptr, 32); let mut seed = [0u8; 32]; for i in 0..seed.len() { seed[i] = seed_slice[i] as u8; } f(seed) } pub unsafe fn mk_rng_isaac(seed_ptr: *const i32) -> IsaacRng { mk_rng(seed_ptr, IsaacRng::from_seed) }