# Struct rand_core::block::BlockRng64 [−][src]

```
pub struct BlockRng64<R: BlockRngCore + ?Sized> {
pub core: R,
// some fields omitted
}
```

## Expand description

A wrapper type implementing `RngCore`

for some type implementing
`BlockRngCore`

with `u64`

array buffer; i.e. this can be used to implement
a full RNG from just a `generate`

function.

This is similar to `BlockRng`

, but specialized for algorithms that operate
on `u64`

values.

No whole generated `u64`

values are thrown away and all values are consumed
in-order. `next_u64`

simply takes the next available `u64`

value.
`next_u32`

is however a bit special: half of a `u64`

is consumed, leaving
the other half in the buffer. If the next function called is `next_u32`

then the other half is then consumed, however both `next_u64`

and
`fill_bytes`

discard the rest of any half-consumed `u64`

s when called.

`fill_bytes`

and `try_fill_bytes`

consume a whole number of `u64`

values. If the requested length is not a multiple of 8, some bytes will be
discarded.

## Fields

`core: R`

The *core* part of the RNG, implementing the `generate`

function.

## Implementations

Create a new `BlockRng`

from an existing RNG implementing
`BlockRngCore`

. Results will be generated on first use.

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.

Reset the number of available results. This will force a new set of results to be generated on next use.

Generate a new set of results immediately, setting the index to the given value.

## Trait Implementations

### impl<'de, R: BlockRngCore + ?Sized> Deserialize<'de> for BlockRng64<R> where

R: Deserialize<'de>,

R::Results: Deserialize<'de>,

### impl<'de, R: BlockRngCore + ?Sized> Deserialize<'de> for BlockRng64<R> where

R: Deserialize<'de>,

R::Results: Deserialize<'de>,

#### fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where

__D: Deserializer<'de>,

#### fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where

__D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

### impl<R: BlockRngCore<Item = u64>> RngCore for BlockRng64<R> where

<R as BlockRngCore>::Results: AsRef<[u64]> + AsMut<[u64]>,

### impl<R: BlockRngCore<Item = u64>> RngCore for BlockRng64<R> where

<R as BlockRngCore>::Results: AsRef<[u64]> + AsMut<[u64]>,

### impl<R: BlockRngCore + ?Sized> Serialize for BlockRng64<R> where

R: Serialize,

R::Results: Serialize,

### impl<R: BlockRngCore + ?Sized> Serialize for BlockRng64<R> where

R: Serialize,

R::Results: Serialize,

## Auto Trait Implementations

### impl<R: ?Sized> RefUnwindSafe for BlockRng64<R> where

R: RefUnwindSafe,

<R as BlockRngCore>::Results: RefUnwindSafe,

### impl<R: ?Sized> Send for BlockRng64<R> where

R: Send,

<R as BlockRngCore>::Results: Send,

### impl<R: ?Sized> Sync for BlockRng64<R> where

R: Sync,

<R as BlockRngCore>::Results: Sync,

### impl<R: ?Sized> Unpin for BlockRng64<R> where

R: Unpin,

<R as BlockRngCore>::Results: Unpin,

### impl<R: ?Sized> UnwindSafe for BlockRng64<R> where

R: UnwindSafe,

<R as BlockRngCore>::Results: UnwindSafe,

## Blanket Implementations

Mutably borrows from an owned value. Read more