burn_dataset/dataset/
base.rs

1use std::sync::Arc;
2
3use crate::DatasetIterator;
4
5/// The dataset trait defines a basic collection of items with a predefined size.
6pub trait Dataset<I>: Send + Sync {
7    /// Gets the item at the given index.
8    fn get(&self, index: usize) -> Option<I>;
9
10    /// Gets the number of items in the dataset.
11    fn len(&self) -> usize;
12
13    /// Checks if the dataset is empty.
14    fn is_empty(&self) -> bool {
15        self.len() == 0
16    }
17
18    /// Returns an iterator over the dataset.
19    fn iter(&self) -> DatasetIterator<'_, I>
20    where
21        Self: Sized,
22    {
23        DatasetIterator::new(self)
24    }
25}
26
27impl<D, I> Dataset<I> for Arc<D>
28where
29    D: Dataset<I>,
30{
31    fn get(&self, index: usize) -> Option<I> {
32        self.as_ref().get(index)
33    }
34
35    fn len(&self) -> usize {
36        self.as_ref().len()
37    }
38}
39
40impl<I> Dataset<I> for Arc<dyn Dataset<I>> {
41    fn get(&self, index: usize) -> Option<I> {
42        self.as_ref().get(index)
43    }
44
45    fn len(&self) -> usize {
46        self.as_ref().len()
47    }
48}
49
50impl<D, I> Dataset<I> for Box<D>
51where
52    D: Dataset<I>,
53{
54    fn get(&self, index: usize) -> Option<I> {
55        self.as_ref().get(index)
56    }
57
58    fn len(&self) -> usize {
59        self.as_ref().len()
60    }
61}
62
63impl<I> Dataset<I> for Box<dyn Dataset<I>> {
64    fn get(&self, index: usize) -> Option<I> {
65        self.as_ref().get(index)
66    }
67
68    fn len(&self) -> usize {
69        self.as_ref().len()
70    }
71}