use std::sync::Arc;
use crate::DatasetIterator;
pub trait Dataset<I>: Send + Sync {
fn get(&self, index: usize) -> Option<I>;
fn len(&self) -> usize;
fn is_empty(&self) -> bool {
self.len() == 0
}
fn iter(&self) -> DatasetIterator<'_, I>
where
Self: Sized,
{
DatasetIterator::new(self)
}
}
impl<D, I> Dataset<I> for Arc<D>
where
D: Dataset<I>,
{
fn get(&self, index: usize) -> Option<I> {
self.as_ref().get(index)
}
fn len(&self) -> usize {
self.as_ref().len()
}
}
impl<I> Dataset<I> for Arc<dyn Dataset<I>> {
fn get(&self, index: usize) -> Option<I> {
self.as_ref().get(index)
}
fn len(&self) -> usize {
self.as_ref().len()
}
}
impl<D, I> Dataset<I> for Box<D>
where
D: Dataset<I>,
{
fn get(&self, index: usize) -> Option<I> {
self.as_ref().get(index)
}
fn len(&self) -> usize {
self.as_ref().len()
}
}
impl<I> Dataset<I> for Box<dyn Dataset<I>> {
fn get(&self, index: usize) -> Option<I> {
self.as_ref().get(index)
}
fn len(&self) -> usize {
self.as_ref().len()
}
}