use crate::genome::Genome;
use crate::io::column::ColumnSinkMut;
use crate::io::dtype::{Dtype, Numeric};
use crate::io::error::Result;
use ndarray::ArrayViewMut2;
pub trait ValueReader: Send + Sync {
type Item: Numeric;
fn contigs(&self) -> &Genome;
fn n_fields(&self) -> usize;
fn read_into(
&self,
contig_name: &str,
start: u64,
end: u64,
dst: ArrayViewMut2<'_, Self::Item>,
) -> Result<()>;
fn fork(&self) -> Result<Self>
where
Self: Sized;
}
pub trait MultiValueReader: Send + Sync {
fn contigs(&self) -> &Genome;
fn columns(&self) -> &[Dtype];
fn read_into(
&self,
contig_name: &str,
start: u64,
end: u64,
sinks: &mut [ColumnSinkMut<'_>],
) -> Result<()>;
fn fork(&self) -> Result<Self>
where
Self: Sized;
}