1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use super::rand::base::{get_sys_seed, refresh_sys_seed, time_get};
use super::rand::Rand;

pub fn randomize() {
    refresh_sys_seed(time_get() as usize);
}

pub trait RandTrait {
    fn rand() -> Self;
}

macro_rules! impl_rand_trait {
    ($($t: ty)*) => (
        $(
            impl RandTrait for $t {
                fn rand() -> Self {
                    let mut _seed = get_sys_seed();
                    let mut solver = Rand::new();
                    solver.srand(0, _seed);
                    let _return = solver.rand();
                    _seed = solver.get_base_seed(0);
                    refresh_sys_seed(_seed);
                    _return as $t
                }
            }
        ) *
    )
}

impl_rand_trait!{u8 u16 u32 u64 usize}
impl_rand_trait!{i8 i16 i32 i64 isize}
impl_rand_trait!{f32 f64}