[−][src]Struct rand_core::block::BlockRng
A wrapper type implementing RngCore for some type implementing
BlockRngCore with u32 array buffer; i.e. this can be used to implement
a full RNG from just a generate function.
The core field may be accessed directly but the results buffer may not.
PRNG implementations can simply use a type alias
(pub type MyRng = BlockRng<MyRngCore>;) but might prefer to use a
wrapper type (pub struct MyRng(BlockRng<MyRngCore>);); the latter must
re-implement RngCore but hides the implementation details and allows
extra functionality to be defined on the RNG
(e.g. impl MyRng { fn set_stream(...){...} }).
BlockRng has heavily optimized implementations of the RngCore methods
reading values from the results buffer, as well as
calling BlockRngCore::generate directly on the output array when
fill_bytes / try_fill_bytes is called on a large array. These methods
also handle the bookkeeping of when to generate a new batch of values.
No whole generated u32 values are thown away and all values are consumed
in-order. next_u32 simply takes the next available u32 value.
next_u64 is implemented by combining two u32 values, least
significant first. fill_bytes and try_fill_bytes consume a whole
number of u32 values, converting each u32 to a byte slice in
little-endian order. If the requested byte length is not a multiple of 4,
some bytes will be discarded.
See also BlockRng64 which uses u64 array buffers. Currently there is
no direct support for other buffer types.
For easy initialization BlockRng also implements SeedableRng.
Fields
core: R
The core part of the RNG, implementing the generate function.
Methods
impl<R> BlockRng<R> where
R: BlockRngCore, [src]
impl<R> BlockRng<R> where
R: BlockRngCore, pub fn new(core: R) -> BlockRng<R>[src]
pub fn new(core: R) -> BlockRng<R>Create a new BlockRng from an existing RNG implementing
BlockRngCore. Results will be generated on first use.
pub fn index(&self) -> usize[src]
pub fn index(&self) -> usizeGet 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.
pub fn reset(&mut self)[src]
pub fn reset(&mut self)Reset the number of available results. This will force a new set of results to be generated on next use.
pub fn generate_and_set(&mut self, index: usize)[src]
pub fn generate_and_set(&mut self, index: usize)Generate a new set of results immediately, setting the index to the given value.
Trait Implementations
impl<R> Clone for BlockRng<R> where
R: BlockRngCore + Clone + ?Sized,
<R as BlockRngCore>::Results: Clone, [src]
impl<R> Clone for BlockRng<R> where
R: BlockRngCore + Clone + ?Sized,
<R as BlockRngCore>::Results: Clone, fn clone(&self) -> BlockRng<R>[src]
fn clone(&self) -> BlockRng<R>Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl<R> SeedableRng for BlockRng<R> where
R: BlockRngCore + SeedableRng, [src]
impl<R> SeedableRng for BlockRng<R> where
R: BlockRngCore + SeedableRng, type Seed = <R as SeedableRng>::Seed
Seed type, which is restricted to types mutably-dereferencable as u8 arrays (we recommend [u8; N] for some N). Read more
fn from_seed(seed: <BlockRng<R> as SeedableRng>::Seed) -> BlockRng<R>[src]
fn from_seed(seed: <BlockRng<R> as SeedableRng>::Seed) -> BlockRng<R>Create a new PRNG using the given seed. Read more
fn seed_from_u64(seed: u64) -> BlockRng<R>[src]
fn seed_from_u64(seed: u64) -> BlockRng<R>Create a new PRNG using a u64 seed. Read more
fn from_rng<S>(rng: S) -> Result<BlockRng<R>, Error> where
S: RngCore, [src]
fn from_rng<S>(rng: S) -> Result<BlockRng<R>, Error> where
S: RngCore, Create a new PRNG seeded from another Rng. Read more
impl<R> RngCore for BlockRng<R> where
R: BlockRngCore<Item = u32>,
<R as BlockRngCore>::Results: AsRef<[u32]>,
<R as BlockRngCore>::Results: AsMut<[u32]>, [src]
impl<R> RngCore for BlockRng<R> where
R: BlockRngCore<Item = u32>,
<R as BlockRngCore>::Results: AsRef<[u32]>,
<R as BlockRngCore>::Results: AsMut<[u32]>, fn next_u32(&mut self) -> u32[src]
fn next_u32(&mut self) -> u32Return the next random u32. Read more
fn next_u64(&mut self) -> u64[src]
fn next_u64(&mut self) -> u64Return the next random u64. Read more
fn fill_bytes(&mut self, dest: &mut [u8])[src]
fn fill_bytes(&mut self, dest: &mut [u8])Fill dest with random data. Read more
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error>[src]
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error>Fill dest entirely with random data. Read more
impl<R> Debug for BlockRng<R> where
R: BlockRngCore + Debug, [src]
impl<R> Debug for BlockRng<R> where
R: BlockRngCore + Debug, fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error>[src]
fn fmt(&self, fmt: &mut Formatter) -> Result<(), Error>Formats the value using the given formatter. Read more
impl<R> CryptoRng for BlockRng<R> where
R: BlockRngCore + CryptoRng, [src]
impl<R> CryptoRng for BlockRng<R> where
R: BlockRngCore + CryptoRng, Auto Trait Implementations
impl<R: ?Sized> Send for BlockRng<R> where
R: Send,
<R as BlockRngCore>::Results: Send,
impl<R: ?Sized> Send for BlockRng<R> where
R: Send,
<R as BlockRngCore>::Results: Send, impl<R: ?Sized> Sync for BlockRng<R> where
R: Sync,
<R as BlockRngCore>::Results: Sync,
impl<R: ?Sized> Sync for BlockRng<R> where
R: Sync,
<R as BlockRngCore>::Results: Sync, Blanket Implementations
impl<T, U> TryFrom for T where
T: From<U>, [src]
impl<T, U> TryFrom for T where
T: From<U>, type Error = !
try_from)The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>try_from)Performs the conversion.
impl<T> From for T[src]
impl<T> From for Timpl<T, U> TryInto for T where
U: TryFrom<T>, [src]
impl<T, U> TryInto for T where
U: TryFrom<T>, type Error = <U as TryFrom<T>>::Error
try_from)The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>try_from)Performs the conversion.
impl<T, U> Into for T where
U: From<T>, [src]
impl<T, U> Into for T where
U: From<T>, impl<T> Borrow for T where
T: ?Sized, [src]
impl<T> Borrow for T where
T: ?Sized, impl<T> BorrowMut for T where
T: ?Sized, [src]
impl<T> BorrowMut for T where
T: ?Sized, fn borrow_mut(&mut self) -> &mut T[src]
fn borrow_mut(&mut self) -> &mut TMutably borrows from an owned value. Read more
impl<T> Any for T where
T: 'static + ?Sized, [src]
impl<T> Any for T where
T: 'static + ?Sized, fn get_type_id(&self) -> TypeId[src]
fn get_type_id(&self) -> TypeId🔬 This is a nightly-only experimental API. (get_type_id)
this method will likely be replaced by an associated static
Gets the TypeId of self. Read more
impl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, type Owned = T
fn to_owned(&self) -> T[src]
fn to_owned(&self) -> TCreates owned data from borrowed data, usually by cloning. Read more
fn clone_into(&self, target: &mut T)[src]
fn clone_into(&self, target: &mut T)🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more