Files @ 88611f9fd179
Branch filter:

Location: CSY/reowolf/src/random.rs

88611f9fd179 965 B application/rls-services+xml Show Annotation Show as Raw Download as Raw
Max Henger
Merge branch 'feat-examples' into 'master'

feat: examples

See merge request nl-cwi-csy/reowolf!12
/**
 * random.rs
 *
 * Simple wrapper over a random number generator. Put here so that we can have
 * a feature flag for particular forms of randomness. For now we'll use pseudo-
 * randomness since that will help debugging.
 */

use rand::{RngCore, SeedableRng};
use rand_pcg;

pub(crate) struct Random {
    rng: rand_pcg::Lcg64Xsh32,
}

impl Random {
    pub(crate) fn new() -> Self {
        use std::time::SystemTime;

        let now = SystemTime::now();
        let elapsed = match now.duration_since(SystemTime::UNIX_EPOCH) {
            Ok(elapsed) => elapsed,
            Err(err) => err.duration(),
        };

        let elapsed = elapsed.as_nanos();
        let seed = elapsed.to_le_bytes();

        return Self::new_seeded(seed);
    }

    pub(crate) fn new_seeded(seed: [u8; 16]) -> Self {
        return Self{ rng: rand_pcg::Pcg32::from_seed(seed) }
    }

    pub(crate) fn get_u64(&mut self) -> u64 {
        return self.rng.next_u64();
    }
}