random/
sequence.rs

1use core::marker::PhantomData;
2
3use crate::{Source, Value};
4
5/// A random sequence.
6pub struct Sequence<'l, S: ?Sized, V>
7where
8    S: Source + 'l,
9    V: Value + 'l,
10{
11    source: &'l mut S,
12    phantom: PhantomData<&'l V>,
13}
14
15impl<'l, S, V> From<&'l mut S> for Sequence<'l, S, V>
16where
17    S: Source,
18    V: Value,
19{
20    #[inline(always)]
21    fn from(source: &'l mut S) -> Self {
22        Sequence {
23            source,
24            phantom: PhantomData,
25        }
26    }
27}
28
29impl<'l, S, V> Iterator for Sequence<'l, S, V>
30where
31    S: Source,
32    V: Value,
33{
34    type Item = V;
35
36    #[inline(always)]
37    fn next(&mut self) -> Option<V> {
38        Some(self.source.read())
39    }
40}