Sfc32

Struct Sfc32 

Source
pub struct Sfc32 { /* private fields */ }
Expand description

A sfc32 random number generator.

The sfc32 algorithm is not suitable for cryptographic uses but is very fast. This algorithm has a 128-bit state and outputs 32-bit random numbers. The average period of this algorithm is approximately 2127, and the minimum period is greater than or equal to 232.

The algorithm used here is translated from the reference implementation provided by PractRand version pre0.95, which is licensed under the public domain.

§Examples

let mut rng = Sfc32::from_seed([0; 12]);
assert_eq!(rng.next_u32(), 0xfb52_c520);

Implementations§

Source§

impl Sfc32

Source

pub fn new(a: u32, b: u32, c: u32, rounds: Option<u32>) -> Self

Creates a new Sfc32 using the given seeds.

If rounds is None, the state is mixed up 15 rounds during initialization.

§Examples
let mut rng = Sfc32::new(0, 0, 0, None);
assert_eq!(rng.next_u32(), 0xfb52_c520);
Source

pub fn new_u64(seed: u64, rounds: Option<u32>) -> Self

Creates a new Sfc32 using a u64 seed.

If rounds is None, the state is mixed up 12 rounds during initialization.

Note that the result of this method is different from the result of Sfc32::seed_from_u64.

§Examples
let mut rng = Sfc32::new_u64(0, None);
assert_eq!(rng.next_u32(), 0x5146_76c3);

Trait Implementations§

Source§

impl Clone for Sfc32

Source§

fn clone(&self) -> Sfc32

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Sfc32

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Sfc32

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Sfc32

Source§

fn eq(&self, other: &Sfc32) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RngCore for Sfc32

Source§

fn next_u32(&mut self) -> u32

Return the next random u32. Read more
Source§

fn next_u64(&mut self) -> u64

Return the next random u64. Read more
Source§

fn fill_bytes(&mut self, dst: &mut [u8])

Fill dest with random data. Read more
Source§

impl SeedableRng for Sfc32

Source§

type Seed = [u8; 12]

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

fn from_seed(seed: Self::Seed) -> Self

Create a new PRNG using the given seed. Read more
Source§

fn seed_from_u64(state: u64) -> Self

Create a new PRNG using a u64 seed. Read more
Source§

fn from_rng(rng: &mut impl RngCore) -> Self

Create a new PRNG seeded from an infallible Rng. Read more
Source§

fn try_from_rng<R>(rng: &mut R) -> Result<Self, <R as TryRngCore>::Error>
where R: TryRngCore,

Create a new PRNG seeded from a potentially fallible Rng. Read more
Source§

impl Serialize for Sfc32

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for Sfc32

Source§

impl StructuralPartialEq for Sfc32

Auto Trait Implementations§

§

impl Freeze for Sfc32

§

impl RefUnwindSafe for Sfc32

§

impl Send for Sfc32

§

impl Sync for Sfc32

§

impl Unpin for Sfc32

§

impl UnwindSafe for Sfc32

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<R> TryRngCore for R
where R: RngCore + ?Sized,

Source§

type Error = Infallible

The type returned in the event of a RNG error.
Source§

fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>

Return the next random u32.
Source§

fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>

Return the next random u64.
Source§

fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>

Fill dest entirely with random data.
Source§

fn unwrap_err(self) -> UnwrapErr<Self>
where Self: Sized,

Wrap RNG with the UnwrapErr wrapper.
Source§

fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>

Wrap RNG with the UnwrapMut wrapper.
Source§

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