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
use crate::dataset::Dataset;
use std::iter::Iterator;

/// Dataset iterator.
pub struct DatasetIterator<'a, I> {
    current: usize,
    dataset: &'a dyn Dataset<I>,
}

impl<'a, I> DatasetIterator<'a, I> {
    /// Creates a new dataset iterator.
    pub fn new<D>(dataset: &'a D) -> Self
    where
        D: Dataset<I>,
    {
        DatasetIterator {
            current: 0,
            dataset,
        }
    }
}

impl<'a, I> Iterator for DatasetIterator<'a, I> {
    type Item = I;

    fn next(&mut self) -> Option<I> {
        let item = self.dataset.get(self.current);
        self.current += 1;
        item
    }
}