1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use super::Rng; pub struct RandomByteIter<'a, R> where R: 'a + Rng, { count: u8, num: u32, rng: &'a mut R, } impl<'a, R> RandomByteIter<'a, R> where R: 'a + Rng, { #[inline(always)] pub fn new(rng: &'a mut R) -> Self { RandomByteIter { count: 0, num: 0, rng: rng, } } } impl<'a, R> Iterator for RandomByteIter<'a, R> where R: 'a + Rng, { type Item = u8; #[inline(always)] fn next(&mut self) -> Option<u8> { if self.count == 0 { self.num = self.rng.next_u32(); self.count = 4; } let byte = (self.num & 0xff) as u8; self.num >>= 8; self.count -= 1; Some(byte) } }