random/
source.rs

1use crate::{Sequence, Value};
2
3/// A source of randomness.
4pub trait Source {
5    /// Read `u64` uniformly distributed over `{0, 1, …, u64::MAX}`.
6    fn read_u64(&mut self) -> u64;
7
8    /// Read `f64` uniformly distributed over `[0, 1]`.
9    #[inline(always)]
10    fn read_f64(&mut self) -> f64 {
11        self.read_u64() as f64 / u64::MAX as f64
12    }
13
14    /// Read a random value.
15    #[inline(always)]
16    fn read<V>(&mut self) -> V
17    where
18        Self: Sized,
19        V: Value,
20    {
21        Value::read(self)
22    }
23
24    /// Read a sequence of random values.
25    #[inline(always)]
26    fn iter<V>(&mut self) -> Sequence<'_, Self, V>
27    where
28        Self: Sized,
29        V: Value,
30    {
31        From::from(self)
32    }
33}