aboutsummaryrefslogtreecommitdiff
path: root/rand/rand_core/src/impls.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rand/rand_core/src/impls.rs')
-rw-r--r--rand/rand_core/src/impls.rs15
1 files changed, 4 insertions, 11 deletions
diff --git a/rand/rand_core/src/impls.rs b/rand/rand_core/src/impls.rs
index 57bdd07..dee4ed1 100644
--- a/rand/rand_core/src/impls.rs
+++ b/rand/rand_core/src/impls.rs
@@ -17,12 +17,11 @@
//! to/from byte sequences, and since its purpose is reproducibility,
//! non-reproducible sources (e.g. `OsRng`) need not bother with it.
-use core::intrinsics::transmute;
use core::ptr::copy_nonoverlapping;
use core::slice;
use core::cmp::min;
use core::mem::size_of;
-use RngCore;
+use crate::RngCore;
/// Implement `next_u64` via `next_u32`, little-endian order.
@@ -44,21 +43,15 @@ pub fn fill_bytes_via_next<R: RngCore + ?Sized>(rng: &mut R, dest: &mut [u8]) {
while left.len() >= 8 {
let (l, r) = {left}.split_at_mut(8);
left = r;
- let chunk: [u8; 8] = unsafe {
- transmute(rng.next_u64().to_le())
- };
+ let chunk: [u8; 8] = rng.next_u64().to_le_bytes();
l.copy_from_slice(&chunk);
}
let n = left.len();
if n > 4 {
- let chunk: [u8; 8] = unsafe {
- transmute(rng.next_u64().to_le())
- };
+ let chunk: [u8; 8] = rng.next_u64().to_le_bytes();
left.copy_from_slice(&chunk[..n]);
} else if n > 0 {
- let chunk: [u8; 4] = unsafe {
- transmute(rng.next_u32().to_le())
- };
+ let chunk: [u8; 4] = rng.next_u32().to_le_bytes();
left.copy_from_slice(&chunk[..n]);
}
}