Skip to main content

BlockRng

Struct BlockRng 

Source
pub struct BlockRng<G: Generator> {
    results: G::Output,
    pub core: G,
}
Expand description

RNG functionality for a block Generator

This type encompasses a Generator core and a buffer. It provides optimized implementations of methods required by an Rng.

All values are consumed in-order of generation. No whole words (e.g. u32 or u64) are discarded, though where a word is partially used (e.g. for a byte-fill whose length is not a multiple of the word size) the rest of the word is discarded.

Fields§

§results: G::Output§core: G

The core part of the RNG, implementing the generate function.

Implementations§

Source§

impl<W: Word + Default, const N: usize, G: Generator<Output = [W; N]>> BlockRng<G>

Source

pub fn new(core: G) -> BlockRng<G>

Create a new BlockRng from an existing RNG implementing Generator. Results will be generated on first use.

Source

pub fn reconstruct(core: G, remaining_results: &[W]) -> Option<Self>

Reconstruct from a core and a remaining-results buffer.

This may be used to deserialize using a core and the output of Self::remaining_results.

Returns None if remaining_results is too long.

Source§

impl<W: Word, const N: usize, G: Generator<Output = [W; N]>> BlockRng<G>

Source

fn index(&self) -> usize

Get the index into the result buffer.

If this is equal to or larger than the size of the result buffer then the buffer is “empty” and generate() must be called to produce new results.

Source

fn set_index(&mut self, index: usize)

Source

pub fn reset_and_skip(&mut self, n: usize)

Re-generate buffer contents, skipping the first n words

Existing buffer contents are discarded. A new set of results is generated (either immediately or when next required). The first n words are skipped (this may be used to set a specific word position).

§Panics

This method will panic if n >= N where N is the buffer size (in words).

Source

pub fn word_offset(&self) -> usize

Get the number of words consumed since the start of the block

The result is in the range 0..N where N is the buffer size (in words).

Source

pub fn remaining_results(&self) -> &[W]

Access the unused part of the results buffer

The length of the returned slice is guaranteed to be less than the length of <Self as Generator>::Output (i.e. less than N where Output = [W; N]).

This is a low-level interface intended for serialization. Results are not marked as consumed.

Source

pub fn next_word(&mut self) -> W

Generate the next word (e.g. u32)

Source§

impl<const N: usize, G: Generator<Output = [u32; N]>> BlockRng<G>

Source

pub fn next_u64_from_u32(&mut self) -> u64

Generate a u64 from two u32 words

Source§

impl<W: Word, const N: usize, G: Generator<Output = [W; N]>> BlockRng<G>

Source

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

Fill dest

Trait Implementations§

Source§

impl<G: Clone + Generator> Clone for BlockRng<G>
where G::Output: Clone,

Source§

fn clone(&self) -> BlockRng<G>

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<G> Debug for BlockRng<G>
where G: Generator + Debug,

Source§

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

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

impl<G: Generator> Drop for BlockRng<G>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<G> Freeze for BlockRng<G>
where <G as Generator>::Output: Freeze, G: Freeze,

§

impl<G> RefUnwindSafe for BlockRng<G>

§

impl<G> Send for BlockRng<G>
where <G as Generator>::Output: Send, G: Send,

§

impl<G> Sync for BlockRng<G>
where <G as Generator>::Output: Sync, G: Sync,

§

impl<G> Unpin for BlockRng<G>
where <G as Generator>::Output: Unpin, G: Unpin,

§

impl<G> UnsafeUnpin for BlockRng<G>

§

impl<G> UnwindSafe for BlockRng<G>

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.