std::rand: Make Rng.next_u32 non-default, waiting for #7771.

This commit is contained in:
Huon Wilson 2013-10-09 09:56:57 +11:00
parent 618c6afe32
commit 62fededd8e
3 changed files with 11 additions and 6 deletions

View File

@ -363,6 +363,12 @@ impl Isaac64Rng {
}
impl Rng for Isaac64Rng {
// FIXME #7771: having next_u32 like this should be unnecessary
#[inline]
fn next_u32(&mut self) -> u32 {
self.next_u64() as u32
}
#[inline]
fn next_u64(&mut self) -> u64 {
if self.cnt == 0 {

View File

@ -99,12 +99,8 @@ pub trait Rng {
/// Return the next random u32. This rarely needs to be called
/// directly, prefer `r.gen()` to `r.next_u32()`.
///
/// By default this is implemented in terms of `next_u64`. An
/// implementation of this trait must provide at least one of
/// these two methods.
fn next_u32(&mut self) -> u32 {
self.next_u64() as u32
}
// FIXME #7771: Should be implemented in terms of next_u64
fn next_u32(&mut self) -> u32;
/// Return the next random u64. This rarely needs to be called
/// directly, prefer `r.gen()` to `r.next_u64()`.

View File

@ -209,6 +209,9 @@ mod tests {
use rand::Rng;
struct ConstantRng(u64);
impl Rng for ConstantRng {
fn next_u32(&mut self) -> u32 {
(**self) as u32
}
fn next_u64(&mut self) -> u64 {
**self
}