Skip to content

Commit b0d7833

Browse files
committed
Replace the open-coded fill_bytes_impl by rand_core::impls::fill_bytes_via_next.
1 parent 1a880aa commit b0d7833

File tree

1 file changed

+4
-21
lines changed

1 file changed

+4
-21
lines changed

rand_pcg/src/pcg128.rs

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
const MULTIPLIER: u128 = 0x2360_ED05_1FC6_5DA4_4385_DF64_9FCC_F645;
1515

1616
use core::fmt;
17-
use rand_core::{le, Error, RngCore, SeedableRng};
17+
use rand_core::{impls, le, Error, RngCore, SeedableRng};
1818
#[cfg(feature = "serde1")] use serde::{Deserialize, Serialize};
1919

2020
/// A PCG random number generator (XSL RR 128/64 (LCG) variant).
@@ -146,7 +146,7 @@ impl RngCore for Lcg128Xsl64 {
146146

147147
#[inline]
148148
fn fill_bytes(&mut self, dest: &mut [u8]) {
149-
fill_bytes_impl(self, dest)
149+
impls::fill_bytes_via_next(self, dest)
150150
}
151151

152152
#[inline]
@@ -237,8 +237,7 @@ impl SeedableRng for Mcg128Xsl64 {
237237
// Read as if a little-endian u128 value:
238238
let mut seed_u64 = [0u64; 2];
239239
le::read_u64_into(&seed, &mut seed_u64);
240-
let state = u128::from(seed_u64[0]) |
241-
u128::from(seed_u64[1]) << 64;
240+
let state = u128::from(seed_u64[0]) | u128::from(seed_u64[1]) << 64;
242241
Mcg128Xsl64::new(state)
243242
}
244243
}
@@ -257,7 +256,7 @@ impl RngCore for Mcg128Xsl64 {
257256

258257
#[inline]
259258
fn fill_bytes(&mut self, dest: &mut [u8]) {
260-
fill_bytes_impl(self, dest)
259+
impls::fill_bytes_via_next(self, dest)
261260
}
262261

263262
#[inline]
@@ -278,19 +277,3 @@ fn output_xsl_rr(state: u128) -> u64 {
278277
let xsl = ((state >> XSHIFT) as u64) ^ (state as u64);
279278
xsl.rotate_right(rot)
280279
}
281-
282-
#[inline(always)]
283-
fn fill_bytes_impl<R: RngCore + ?Sized>(rng: &mut R, dest: &mut [u8]) {
284-
let mut left = dest;
285-
while left.len() >= 8 {
286-
let (l, r) = { left }.split_at_mut(8);
287-
left = r;
288-
let chunk: [u8; 8] = rng.next_u64().to_le_bytes();
289-
l.copy_from_slice(&chunk);
290-
}
291-
let n = left.len();
292-
if n > 0 {
293-
let chunk: [u8; 8] = rng.next_u64().to_le_bytes();
294-
left.copy_from_slice(&chunk[..n]);
295-
}
296-
}

0 commit comments

Comments
 (0)