[][src]Trait rand::distributions::uniform::UniformSampler

pub trait UniformSampler: Sized {
    type X;
    fn new<B1, B2>(low: B1, high: B2) -> Self
    where
        B1: SampleBorrow<Self::X> + Sized,
        B2: SampleBorrow<Self::X> + Sized
;
fn new_inclusive<B1, B2>(low: B1, high: B2) -> Self
    where
        B1: SampleBorrow<Self::X> + Sized,
        B2: SampleBorrow<Self::X> + Sized
;
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Self::X; fn sample_single<R: Rng + ?Sized, B1, B2>(
        low: B1,
        high: B2,
        rng: &mut R
    ) -> Self::X
    where
        B1: SampleBorrow<Self::X> + Sized,
        B2: SampleBorrow<Self::X> + Sized
, { ... } }

Helper trait handling actual uniform sampling.

See the module documentation on how to implement Uniform range sampling for a custom type.

Implementation of sample_single is optional, and is only useful when the implementation can be faster than Self::new(low, high).sample(rng).

Associated Types

type X

The type sampled by this implementation.

Loading content...

Required methods

fn new<B1, B2>(low: B1, high: B2) -> Self where
    B1: SampleBorrow<Self::X> + Sized,
    B2: SampleBorrow<Self::X> + Sized

Construct self, with inclusive lower bound and exclusive upper bound [low, high).

Usually users should not call this directly but instead use Uniform::new, which asserts that low < high before calling this.

fn new_inclusive<B1, B2>(low: B1, high: B2) -> Self where
    B1: SampleBorrow<Self::X> + Sized,
    B2: SampleBorrow<Self::X> + Sized

Construct self, with inclusive bounds [low, high].

Usually users should not call this directly but instead use Uniform::new_inclusive, which asserts that low <= high before calling this.

fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Self::X

Sample a value.

Loading content...

Provided methods

fn sample_single<R: Rng + ?Sized, B1, B2>(
    low: B1,
    high: B2,
    rng: &mut R
) -> Self::X where
    B1: SampleBorrow<Self::X> + Sized,
    B2: SampleBorrow<Self::X> + Sized

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high).

By default this is implemented using UniformSampler::new(low, high).sample(rng). However, for some types more optimal implementations for single usage may be provided via this method (which is the case for integers and floats). Results may not be identical.

Note that to use this method in a generic context, the type needs to be retrieved via SampleUniform::Sampler as follows:

use rand::{thread_rng, distributions::uniform::{SampleUniform, UniformSampler}};
fn sample_from_range<T: SampleUniform>(lb: T, ub: T) -> T {
    let mut rng = thread_rng();
    <T as SampleUniform>::Sampler::sample_single(lb, ub, &mut rng)
}
Loading content...

Implementors

impl UniformSampler for UniformDuration[src]

type X = Duration

impl UniformSampler for UniformFloat<f32>[src]

type X = f32

impl UniformSampler for UniformFloat<f64>[src]

type X = f64

impl UniformSampler for UniformFloat<f32x4>[src]

type X = f32x4

impl UniformSampler for UniformFloat<f64x2>[src]

type X = f64x2

impl UniformSampler for UniformFloat<f32x8>[src]

type X = f32x8

impl UniformSampler for UniformFloat<f64x4>[src]

type X = f64x4

impl UniformSampler for UniformFloat<f32x16>[src]

type X = f32x16

impl UniformSampler for UniformFloat<f64x8>[src]

type X = f64x8

impl UniformSampler for UniformFloat<f32x2>[src]

type X = f32x2

impl UniformSampler for UniformInt<i128>[src]

type X = i128

impl UniformSampler for UniformInt<i16>[src]

type X = i16

impl UniformSampler for UniformInt<i32>[src]

type X = i32

impl UniformSampler for UniformInt<i64>[src]

type X = i64

impl UniformSampler for UniformInt<i8>[src]

type X = i8

impl UniformSampler for UniformInt<isize>[src]

type X = isize

impl UniformSampler for UniformInt<u128>[src]

type X = u128

impl UniformSampler for UniformInt<u16>[src]

type X = u16

impl UniformSampler for UniformInt<u32>[src]

type X = u32

impl UniformSampler for UniformInt<u64>[src]

type X = u64

impl UniformSampler for UniformInt<u8>[src]

type X = u8

impl UniformSampler for UniformInt<usize>[src]

type X = usize

impl UniformSampler for UniformInt<i16x8>[src]

type X = i16x8

impl UniformSampler for UniformInt<i32x4>[src]

type X = i32x4

impl UniformSampler for UniformInt<i64x2>[src]

type X = i64x2

impl UniformSampler for UniformInt<i8x16>[src]

type X = i8x16

impl UniformSampler for UniformInt<u16x8>[src]

type X = u16x8

impl UniformSampler for UniformInt<u32x4>[src]

type X = u32x4

impl UniformSampler for UniformInt<u64x2>[src]

type X = u64x2

impl UniformSampler for UniformInt<u8x16>[src]

type X = u8x16

impl UniformSampler for UniformInt<i8x2>[src]

type X = i8x2

impl UniformSampler for UniformInt<u8x2>[src]

type X = u8x2

impl UniformSampler for UniformInt<i16x16>[src]

type X = i16x16

impl UniformSampler for UniformInt<i32x8>[src]

type X = i32x8

impl UniformSampler for UniformInt<i64x4>[src]

type X = i64x4

impl UniformSampler for UniformInt<i8x32>[src]

type X = i8x32

impl UniformSampler for UniformInt<u16x16>[src]

type X = u16x16

impl UniformSampler for UniformInt<u32x8>[src]

type X = u32x8

impl UniformSampler for UniformInt<u64x4>[src]

type X = u64x4

impl UniformSampler for UniformInt<u8x32>[src]

type X = u8x32

impl UniformSampler for UniformInt<i16x2>[src]

type X = i16x2

impl UniformSampler for UniformInt<i8x4>[src]

type X = i8x4

impl UniformSampler for UniformInt<u16x2>[src]

type X = u16x2

impl UniformSampler for UniformInt<u8x4>[src]

type X = u8x4

impl UniformSampler for UniformInt<i16x32>[src]

type X = i16x32

impl UniformSampler for UniformInt<i32x16>[src]

type X = i32x16

impl UniformSampler for UniformInt<i64x8>[src]

type X = i64x8

impl UniformSampler for UniformInt<i8x64>[src]

type X = i8x64

impl UniformSampler for UniformInt<u16x32>[src]

type X = u16x32

impl UniformSampler for UniformInt<u32x16>[src]

type X = u32x16

impl UniformSampler for UniformInt<u64x8>[src]

type X = u64x8

impl UniformSampler for UniformInt<u8x64>[src]

type X = u8x64

impl UniformSampler for UniformInt<i16x4>[src]

type X = i16x4

impl UniformSampler for UniformInt<i32x2>[src]

type X = i32x2

impl UniformSampler for UniformInt<i8x8>[src]

type X = i8x8

impl UniformSampler for UniformInt<u16x4>[src]

type X = u16x4

impl UniformSampler for UniformInt<u32x2>[src]

type X = u32x2

impl UniformSampler for UniformInt<u8x8>[src]

type X = u8x8

Loading content...