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}