Struct scuttlebutt::UniformIntegersUnderBound 
source · [−]pub struct UniformIntegersUnderBound { /* private fields */ }Expand description
Sample u32s uniformly from [0, bound).
Implementations
sourceimpl UniformIntegersUnderBound
 
impl UniformIntegersUnderBound
sourcepub fn new(bound: u32) -> Self
 
pub fn new(bound: u32) -> Self
Create the distribution.
Performance
This function performs very well as long as the bound, $b$ is such that $t(b)$ is small,
where:
t(b) = (2^{32} - b + 1) \mod bIn particular, the probability that a random vector of $N$ elements is accepted is:
\left(1 - \frac{t(b)}{2^{32}}\right)^NThus, if $t(b)$ is quite small, then it is efficient for us to reject $N$ elements at a
time, as opposed to rejecting individual elements.
Repeated Invocations
It is inefficient to repeatedly call new with a fresh bound. However, an alternative
algorithm has not yet been implemented.
Timing Side-Channel
bound should be a public value, since it may be leaked in the timing of sampling.
Panics
Panics if bound is 0.
sourcepub fn sample(&self, rng: &mut AesRng) -> [U32x8; 4]
 
pub fn sample(&self, rng: &mut AesRng) -> [U32x8; 4]
Produce Aes128EncryptOnly::BLOCK_COUNT_HINT * 4 uniformly distributed u32s (under the
given bound).
sourcepub fn sample_20(&self, rng: &mut AesRng) -> [U32x8; 3]
 
pub fn sample_20(&self, rng: &mut AesRng) -> [U32x8; 3]
Produce 20 uniformly distributed u32s under the given bound.
Random numbers are returned in out[0][..], out[1][..], and the even-indexed entries of
out[2] (i.e. out[2][0], out[2][2], out[2][4], out[2][6]).
Alternatives
Consider using Self::sample instead. It may be faster on some platforms.
Trait Implementations
sourceimpl Clone for UniformIntegersUnderBound
 
impl Clone for UniformIntegersUnderBound
sourcefn clone(&self) -> UniformIntegersUnderBound
 
fn clone(&self) -> UniformIntegersUnderBound
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moresourceimpl Debug for UniformIntegersUnderBound
 
impl Debug for UniformIntegersUnderBound
impl Copy for UniformIntegersUnderBound
Auto Trait Implementations
impl RefUnwindSafe for UniformIntegersUnderBound
impl Send for UniformIntegersUnderBound
impl Sync for UniformIntegersUnderBound
impl Unpin for UniformIntegersUnderBound
impl UnwindSafe for UniformIntegersUnderBound
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
impl<T> FmtForward for T
impl<T> FmtForward for T
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
self to use its Binary implementation when Debug-formatted.fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
self to use its Octal implementation when Debug-formatted.fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
impl<T> Pipe for Twhere
    T: ?Sized,
impl<T> Pipe for Twhere
    T: ?Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read morefn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read morefn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
    Self: Borrow<B>,
    B: 'a + ?Sized,
    R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
    Self: Borrow<B>,
    B: 'a + ?Sized,
    R: 'a,
fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
    Self: BorrowMut<B>,
    B: 'a + ?Sized,
    R: 'a,
fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
    Self: BorrowMut<B>,
    B: 'a + ?Sized,
    R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
    Self: AsRef<U>,
    U: 'a + ?Sized,
    R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
    Self: AsRef<U>,
    U: 'a + ?Sized,
    R: 'a,
self, then passes self.as_ref() into the pipe function.fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
    Self: AsMut<U>,
    U: 'a + ?Sized,
    R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
    Self: AsMut<U>,
    U: 'a + ?Sized,
    R: 'a,
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere
    Self: Deref<Target = T>,
    T: 'a + ?Sized,
    R: 'a,
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere
    Self: Deref<Target = T>,
    T: 'a + ?Sized,
    R: 'a,
self, then passes self.deref() into the pipe function.impl<T> Tap for T
impl<T> Tap for T
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
    Self: Borrow<B>,
    B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
    Self: Borrow<B>,
    B: ?Sized,
Borrow<B> of a value. Read morefn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
    Self: BorrowMut<B>,
    B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
    Self: BorrowMut<B>,
    B: ?Sized,
BorrowMut<B> of a value. Read morefn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
    Self: AsRef<R>,
    R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
    Self: AsRef<R>,
    R: ?Sized,
AsRef<R> view of a value. Read morefn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
    Self: AsMut<R>,
    R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
    Self: AsMut<R>,
    R: ?Sized,
AsMut<R> view of a value. Read morefn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
    Self: Deref<Target = T>,
    T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
    Self: Deref<Target = T>,
    T: ?Sized,
Deref::Target of a value. Read morefn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
    Self: DerefMut<Target = T> + Deref,
    T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
    Self: DerefMut<Target = T> + Deref,
    T: ?Sized,
Deref::Target of a value. Read morefn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds. Read morefn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
    Self: Borrow<B>,
    B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
    Self: Borrow<B>,
    B: ?Sized,
.tap_borrow() only in debug builds, and is erased in release
builds. Read morefn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
    Self: BorrowMut<B>,
    B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
    Self: BorrowMut<B>,
    B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds. Read morefn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
    Self: AsRef<R>,
    R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
    Self: AsRef<R>,
    R: ?Sized,
.tap_ref() only in debug builds, and is erased in release
builds. Read morefn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
    Self: AsMut<R>,
    R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
    Self: AsMut<R>,
    R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds. Read more