burn_dataset/dataset/
iterator.rs1use crate::dataset::{Dataset, DatasetError};
2use std::error::Error;
3use std::iter::Iterator;
4
5pub struct DatasetIterator<'a, I, E = DatasetError>
7where
8 E: Error + Send + Sync + 'static,
9{
10 current: usize,
11 dataset: &'a dyn Dataset<I, E>,
12 len: usize,
13}
14
15impl<'a, I, E> DatasetIterator<'a, I, E>
16where
17 E: Error + Send + Sync + 'static,
18{
19 pub fn new<D>(dataset: &'a D) -> Self
21 where
22 D: Dataset<I, E>,
23 {
24 DatasetIterator {
25 current: 0,
26 dataset,
27 len: dataset.len(),
28 }
29 }
30}
31
32impl<I, E> Iterator for DatasetIterator<'_, I, E>
33where
34 E: Error + Send + Sync + 'static,
35{
36 type Item = Result<I, E>;
37
38 fn next(&mut self) -> Option<Result<I, E>> {
39 if self.current >= self.len {
40 return None;
41 }
42
43 let index = self.current;
44 self.current += 1;
45
46 Some(self.dataset.get(index))
47 }
48}