Module utils
Utilties to aid trait implementations
Portability
For cross-platform reproducibility, Little-Endian order (least-significant
part first) has been chosen as the standard for inter-type conversion.
For example, next_u64_via_u32 generates two u32 values x, y,
then outputs (y << 32) | x.
Byte-swapping (like the std to_le functions) is only needed to convert
to/from byte sequences, and since its purpose is reproducibility,
non-reproducible sources (e.g. OsRng) need not bother with it.
Implementing TryRng
Usually an implementation of TryRng will implement one of the three
methods over its internal source. The following helpers are provided for
the remaining implementations.
fn try_next_u32:
fn try_next_u64:
fn try_fill_bytes:
[fill_bytes_via_next_word][](self, dest)
Implementing SeedableRng
In many cases, SeedableRng::Seed must be converted to [u32; _] or
[u64; _]. read_words may be used for this.
Example
We demonstrate a simple multiplicative congruential generator (MCG), taken from M.E. O'Neill's blog post Does It Beat the Minimal Standard?.
use Infallible;
use ;
;
#
# let mut rng = seed_from_u64;
# assert_eq!;
# assert_eq!;
# let mut buf = ;
# rng.fill_bytes;
# assert_eq!;
Traits
- Word A marker trait for supported "word" types.
Functions
-
fill_bytes_via_next_word
Fill
dstwith bytes usingnext_word -
next_u64_via_u32
Generate a
u64usingnext_u32, little-endian order. -
next_word_via_fill
Generate a
u32oru64word usingfill_bytes - read_words Reads an array of words from a byte slice