Skip to content

Commit 01c3e1f

Browse files
committed
Remove rand::seq::gen_index
1 parent 4f33b31 commit 01c3e1f

File tree

3 files changed

+10
-30
lines changed

3 files changed

+10
-30
lines changed

src/seq/iterator.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
//! `IteratorRandom`
1010
1111
use super::coin_flipper::CoinFlipper;
12-
use super::gen_index;
1312
#[allow(unused)]
1413
use super::IndexedRandom;
1514
use crate::Rng;
@@ -71,7 +70,7 @@ pub trait IteratorRandom: Iterator + Sized {
7170
return match lower {
7271
0 => None,
7372
1 => self.next(),
74-
_ => self.nth(gen_index(rng, lower)),
73+
_ => self.nth(rng.gen_range(0..lower)),
7574
};
7675
}
7776

@@ -81,7 +80,7 @@ pub trait IteratorRandom: Iterator + Sized {
8180
// Continue until the iterator is exhausted
8281
loop {
8382
if lower > 1 {
84-
let ix = gen_index(coin_flipper.rng, lower + consumed);
83+
let ix = coin_flipper.rng.gen_range(0..lower + consumed);
8584
let skip = if ix < lower {
8685
result = self.nth(ix);
8786
lower - (ix + 1)
@@ -204,7 +203,7 @@ pub trait IteratorRandom: Iterator + Sized {
204203

205204
// Continue, since the iterator was not exhausted
206205
for (i, elem) in self.enumerate() {
207-
let k = gen_index(rng, i + 1 + amount);
206+
let k = rng.gen_range(0..i + 1 + amount);
208207
if let Some(slot) = buf.get_mut(k) {
209208
*slot = elem;
210209
}
@@ -240,7 +239,7 @@ pub trait IteratorRandom: Iterator + Sized {
240239
// If the iterator stops once, then so do we.
241240
if reservoir.len() == amount {
242241
for (i, elem) in self.enumerate() {
243-
let k = gen_index(rng, i + 1 + amount);
242+
let k = rng.gen_range(0..i + 1 + amount);
244243
if let Some(slot) = reservoir.get_mut(k) {
245244
*slot = elem;
246245
}

src/seq/mod.rs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,8 @@ pub use iterator::IteratorRandom;
4343
pub use slice::SliceChooseIter;
4444
pub use slice::{IndexedMutRandom, IndexedRandom, SliceRandom};
4545

46-
use crate::Rng;
47-
48-
// Sample a number uniformly between 0 and `ubound`. Uses 32-bit sampling where
49-
// possible, primarily in order to produce the same output on 32-bit and 64-bit
50-
// platforms.
51-
#[inline]
52-
fn gen_index<R: Rng + ?Sized>(rng: &mut R, ubound: usize) -> usize {
53-
if ubound <= (u32::MAX as usize) {
54-
rng.gen_range(0..ubound as u32) as usize
55-
} else {
56-
#[cfg(target_pointer_width = "32")]
57-
unreachable!();
58-
59-
#[cfg(target_pointer_width = "64")]
60-
return rng.gen_range(0..ubound as u64) as usize;
61-
}
62-
}
63-
6446
/// Low-level API for sampling indices
6547
pub mod index {
66-
use super::gen_index;
6748
use crate::Rng;
6849

6950
#[cfg(feature = "alloc")]
@@ -88,7 +69,7 @@ pub mod index {
8869
// Floyd's algorithm
8970
let mut indices = [0; N];
9071
for (i, j) in (len - N..len).enumerate() {
91-
let t = gen_index(rng, j + 1);
72+
let t = rng.gen_range(0..j + 1);
9273
if let Some(pos) = indices[0..i].iter().position(|&x| x == t) {
9374
indices[pos] = j;
9475
}

src/seq/slice.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
//! `IndexedRandom`, `IndexedMutRandom`, `SliceRandom`
1010
1111
use super::increasing_uniform::IncreasingUniform;
12-
use super::{gen_index, index};
12+
use super::index;
1313
#[cfg(feature = "alloc")]
1414
use crate::distr::uniform::{SampleBorrow, SampleUniform};
1515
#[cfg(feature = "alloc")]
@@ -57,7 +57,7 @@ pub trait IndexedRandom: Index<usize> {
5757
if self.is_empty() {
5858
None
5959
} else {
60-
Some(&self[gen_index(rng, self.len())])
60+
Some(&self[rng.gen_range(0..self.len())])
6161
}
6262
}
6363

@@ -253,7 +253,7 @@ pub trait IndexedMutRandom: IndexedRandom + IndexMut<usize> {
253253
None
254254
} else {
255255
let len = self.len();
256-
Some(&mut self[gen_index(rng, len)])
256+
Some(&mut self[rng.gen_range(0..len)])
257257
}
258258
}
259259

@@ -393,7 +393,7 @@ impl<T> SliceRandom for [T] {
393393
// It ensures that the last `amount` elements of the slice
394394
// are randomly selected from the whole slice.
395395

396-
// `IncreasingUniform::next_index()` is faster than `gen_index`
396+
// `IncreasingUniform::next_index()` is faster than `Rng::gen_range`
397397
// but only works for 32 bit integers
398398
// So we must use the slow method if the slice is longer than that.
399399
if self.len() < (u32::MAX as usize) {
@@ -404,7 +404,7 @@ impl<T> SliceRandom for [T] {
404404
}
405405
} else {
406406
for i in m..self.len() {
407-
let index = gen_index(rng, i + 1);
407+
let index = rng.gen_range(0..i + 1);
408408
self.swap(i, index);
409409
}
410410
}

0 commit comments

Comments
 (0)