use ruda_kernel::dsl as kernel_dsl;
use crate::reduce::{
ReducePrecision,
components::{
instructions::Item,
readers::{Reader, ReaderExpand},
},
};
use ruda_kernel::dsl::prelude::*;
#[derive(RudaType)]
pub struct RudaReader<P: ReducePrecision> {
reader: Reader<P>,
}
#[ruda]
#[allow(clippy::len_without_is_empty)]
impl<P: ReducePrecision> RudaReader<P> {
pub fn new(reader: Reader<P>) -> RudaReader<P> {
RudaReader::<P> { reader }
}
pub fn read(&self, vector_index: usize) -> Item<P> {
match &self.reader {
Reader::Parallel(reader) => reader.read_ruda(vector_index),
Reader::Perpendicular(reader) => reader.read_ruda(vector_index),
}
}
pub fn length(&self) -> usize {
match &self.reader {
Reader::Parallel(reader) => reader.length_ruda(),
Reader::Perpendicular(reader) => reader.length_ruda(),
}
}
}