pub trait Rng {
type Seed;
// Required method
fn new(seed: Self::Seed) -> Self;
// Provided method
fn next<T>(&mut self) -> T
where Self: RngNext<T> { ... }
}Expand description
A generic Random number generator
§Example
use common_traits::{Rng, RngNext};
pub struct Xorshift64(u64);
impl Rng for Xorshift64 {
type Seed = u64;
fn new(seed: u64) -> Self {
Self(seed.saturating_add(1))
}
}
impl RngNext<u64> for Xorshift64 {
fn next_inner(&mut self) -> u64 {
self.0 ^= self.0 << 13;
self.0 ^= self.0 >> 7;
self.0 ^= self.0 << 17;
self.0
}
}
impl RngNext<f64> for Xorshift64 {
fn next_inner(&mut self) -> f64 {
let v: u64 = (self.next::<u64>() >> 11) | (1023 << 52);
let r: f64 = f64::from_le_bytes(v.to_le_bytes());
r - 1f64
}
}Required Associated Types§
Required Methods§
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.