pub struct IsaacCore { /* fields omitted */ }
The core of IsaacRng
, used with BlockRng
.
Performs copy-assignment from source
. Read more
Formats the value using the given formatter. Read more
Serialize this value into the given Serde serializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Results element type, e.g. u32
.
type Results = IsaacArray<Self::Item>
Results type. This is the 'block' an RNG implementing BlockRngCore
generates, which will usually be an array like [u32; 16]
. Read more
Refills the output buffer, results
. See also the pseudocode desciption
of the algorithm in the IsaacRng
documentation.
Optimisations used (similar to the reference implementation):
- The loop is unrolled 4 times, once for every constant of mix().
- The contents of the main loop are moved to a function
rngstep
, to
reduce code duplication.
- We use local variables for a and b, which helps with optimisations.
- We split the main loop in two, one that operates over 0..128 and one
over 128..256. This way we can optimise out the addition and modulus
from
s[i+128 mod 256]
.
- We maintain one index
i
and add m
or m2
as base (m2 for the
s[i+128 mod 256]
), relying on the optimizer to turn it into pointer
arithmetic.
- We fill
results
backwards. The reference implementation reads values
from results
in reverse. We read them in the normal direction, to
make fill_bytes
a memcopy. To maintain compatibility we fill in
reverse.
Seed type, which is restricted to types mutably-dereferencable as u8
arrays (we recommend [u8; N]
for some N
). Read more
Create a new PRNG using the given seed. Read more
Create an ISAAC random number generator using an u64
as seed.
If seed == 0
this will produce the same stream of random numbers as
the reference implementation when used unseeded.
Create a new PRNG seeded from another Rng
. Read more
Creates a new instance, automatically seeded with fresh entropy. Read more
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static