This commit is contained in:
Jean-Philippe Bossuat
2025-01-06 14:10:28 +01:00
parent 681268c28e
commit a074886b3e
29 changed files with 1650 additions and 928 deletions

View File

@@ -1 +1 @@
pub mod source;
pub mod source;

View File

@@ -1,45 +1,47 @@
use rand_chacha::rand_core::SeedableRng;
use rand_chacha::ChaCha8Rng;
use rand_core::RngCore;
use rand_chacha::{ChaCha8Rng};
const MAXF64: f64 = 9007199254740992.0;
pub struct Source{
source:ChaCha8Rng,
pub struct Source {
source: ChaCha8Rng,
}
impl Source{
pub fn new(seed: [u8;32]) -> Source{
Source{source:ChaCha8Rng::from_seed(seed)}
impl Source {
pub fn new(seed: [u8; 32]) -> Source {
Source {
source: ChaCha8Rng::from_seed(seed),
}
}
pub fn new_seed(&mut self) -> [u8;32]{
let mut seed: [u8; 32] = [0u8;32];
pub fn new_seed(&mut self) -> [u8; 32] {
let mut seed: [u8; 32] = [0u8; 32];
self.source.fill_bytes(&mut seed);
seed
}
#[inline(always)]
pub fn next_u64(&mut self) -> u64{
pub fn next_u64(&mut self) -> u64 {
self.source.next_u64()
}
#[inline(always)]
pub fn next_u64n(&mut self, max: u64, mask: u64) -> u64{
pub fn next_u64n(&mut self, max: u64, mask: u64) -> u64 {
let mut x: u64 = self.next_u64() & mask;
while x >= max{
while x >= max {
x = self.next_u64() & mask;
}
x
}
#[inline(always)]
pub fn next_f64(&mut self, min: f64, max: f64) -> f64{
min + ((self.next_u64()<<11>>11) as f64)/MAXF64 * (max-min)
pub fn next_f64(&mut self, min: f64, max: f64) -> f64 {
min + ((self.next_u64() << 11 >> 11) as f64) / MAXF64 * (max - min)
}
#[inline(always)]
pub fn fill_bytes(&mut self, bytes: &mut [u8]){
pub fn fill_bytes(&mut self, bytes: &mut [u8]) {
self.source.fill_bytes(bytes)
}
}
}