From 2cd772bdba10ac5b8449595cc218419c33b9bcf4 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Thu, 10 Oct 2013 13:59:55 +1100 Subject: [PATCH] std::rand: add the Sample and IndependentSample traits. These are a "parameterised" Rand. --- src/libstd/rand/distributions.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/libstd/rand/distributions.rs b/src/libstd/rand/distributions.rs index 0902100dca60..845d8bbc9525 100644 --- a/src/libstd/rand/distributions.rs +++ b/src/libstd/rand/distributions.rs @@ -23,6 +23,24 @@ use num; use rand::{Rng,Rand}; +/// Things that can be used to create a random instance of `Support`. +pub trait Sample { + /// Generate a random value of `Support`, using `rng` as the + /// source of randomness. + fn sample(&mut self, rng: &mut R) -> Support; +} + +/// `Sample`s that do not require keeping track of state, so each +/// sample is (statistically) independent of all others, assuming the +/// `Rng` used has this property. +// XXX maybe having this separate is overkill (the only reason is to +// take &self rather than &mut self)? or maybe this should be the +// trait called `Sample` and the other should be `DependentSample`. +pub trait IndependentSample: Sample { + /// Generate a random value. + fn ind_sample(&self, &mut R) -> Support; +} + mod ziggurat_tables; // inlining should mean there is no performance penalty for this