[][src]Struct rand_isaac::isaac::IsaacCore

pub struct IsaacCore { /* fields omitted */ }

The core of IsaacRng, used with BlockRng.

Trait Implementations

impl Debug for IsaacCore[src]

impl Clone for IsaacCore[src]

impl Serialize for IsaacCore[src]

impl<'de> Deserialize<'de> for IsaacCore[src]

impl BlockRngCore for IsaacCore[src]

type Item = u32

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

fn generate(&mut self, results: &mut IsaacArray<Self::Item>)[src]

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.

impl SeedableRng for IsaacCore[src]

type Seed = [u8; 32]

Seed type, which is restricted to types mutably-dereferencable as u8 arrays (we recommend [u8; N] for some N). Read more

fn seed_from_u64(seed: u64) -> Self[src]

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.

Auto Trait Implementations

impl Unpin for IsaacCore

impl Send for IsaacCore

impl Sync for IsaacCore

impl UnwindSafe for IsaacCore

impl RefUnwindSafe for IsaacCore

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]