From c27ce62b9755fb0832249b9684382d0111915316 Mon Sep 17 00:00:00 2001 From: sgoudham Date: Sun, 30 Jan 2022 23:05:52 +0000 Subject: [PATCH] Add UwUSeeder --- src/seeder.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/seeder.rs diff --git a/src/seeder.rs b/src/seeder.rs new file mode 100644 index 0000000..bb08f62 --- /dev/null +++ b/src/seeder.rs @@ -0,0 +1,37 @@ +use std::hash::Hasher; + +use ahash::AHasher; +use rand::distributions::uniform::{SampleRange, SampleUniform}; +use rand::{Rng, RngCore, SeedableRng}; +use rand_xoshiro::Xoshiro256Plus; + +pub struct UwUSeeder { + rng: Xoshiro256Plus, +} + +impl UwUSeeder { + #[inline] + pub fn new(word: &[u8], random: bool) -> UwUSeeder { + let rand_u64 = if !random { + let mut hasher = AHasher::new_with_keys(0, 0); + hasher.write(word); + hasher.finish() + } else { + rand::rngs::OsRng::default().next_u64() + }; + + UwUSeeder { + rng: Xoshiro256Plus::seed_from_u64(rand_u64), + } + } + + #[inline] + pub fn random_float(&mut self) -> f64 { + self.rng.gen_range(0.0..1.0) + } + + #[inline] + pub fn random_int>(&mut self, range: R) -> T { + self.rng.gen_range(range) + } +} \ No newline at end of file