@@ -30,8 +30,8 @@ use {RngCore, BlockRngCore, CryptoRng, SeedableRng, Error};
30
30
/// Implement `next_u64` via `next_u32`, little-endian order.
31
31
pub fn next_u64_via_u32 < R : RngCore + ?Sized > ( rng : & mut R ) -> u64 {
32
32
// Use LE; we explicitly generate one value before the next.
33
- let x = rng. next_u32 ( ) as u64 ;
34
- let y = rng. next_u32 ( ) as u64 ;
33
+ let x = u64 :: from ( rng. next_u32 ( ) ) ;
34
+ let y = u64 :: from ( rng. next_u32 ( ) ) ;
35
35
( y << 32 ) | x
36
36
}
37
37
@@ -223,8 +223,8 @@ where <R as BlockRngCore>::Results: AsRef<[u32]>
223
223
// requires little-endian CPU supporting unaligned reads:
224
224
unsafe { * ( & results[ index] as * const u32 as * const u64 ) }
225
225
} else {
226
- let x = results[ index] as u64 ;
227
- let y = results[ index + 1 ] as u64 ;
226
+ let x = u64 :: from ( results[ index] ) ;
227
+ let y = u64 :: from ( results[ index + 1 ] ) ;
228
228
( y << 32 ) | x
229
229
}
230
230
} ;
@@ -241,10 +241,10 @@ where <R as BlockRngCore>::Results: AsRef<[u32]>
241
241
self . index = 2 ;
242
242
read_u64 ( self . results . as_ref ( ) , 0 )
243
243
} else {
244
- let x = self . results . as_ref ( ) [ len-1 ] as u64 ;
244
+ let x = u64 :: from ( self . results . as_ref ( ) [ len-1 ] ) ;
245
245
self . core . generate ( & mut self . results ) ;
246
246
self . index = 1 ;
247
- let y = self . results . as_ref ( ) [ 0 ] as u64 ;
247
+ let y = u64 :: from ( self . results . as_ref ( ) [ 0 ] ) ;
248
248
( y << 32 ) | x
249
249
}
250
250
}
@@ -272,7 +272,8 @@ where <R as BlockRngCore>::Results: AsRef<[u32]>
272
272
273
273
while filled < end_direct {
274
274
let dest_u32: & mut R :: Results = unsafe {
275
- :: core:: mem:: transmute ( dest[ filled..] . as_mut_ptr ( ) )
275
+ & mut * ( dest[ filled..] . as_mut_ptr ( ) as
276
+ * mut <R as BlockRngCore >:: Results )
276
277
} ;
277
278
self . core . generate ( dest_u32) ;
278
279
filled += self . results . as_ref ( ) . len ( ) * 4 ;
@@ -282,7 +283,7 @@ where <R as BlockRngCore>::Results: AsRef<[u32]>
282
283
if len_remainder > 0 {
283
284
self . core . generate ( & mut self . results ) ;
284
285
let ( consumed_u32, _) =
285
- fill_via_u32_chunks ( & mut self . results . as_ref ( ) ,
286
+ fill_via_u32_chunks ( self . results . as_ref ( ) ,
286
287
& mut dest[ filled..] ) ;
287
288
288
289
self . index = consumed_u32;
@@ -307,7 +308,8 @@ where <R as BlockRngCore>::Results: AsRef<[u32]>
307
308
}
308
309
309
310
fn try_fill_bytes ( & mut self , dest : & mut [ u8 ] ) -> Result < ( ) , Error > {
310
- Ok ( self . fill_bytes ( dest) )
311
+ self . fill_bytes ( dest) ;
312
+ Ok ( ( ) )
311
313
}
312
314
}
313
315
0 commit comments