Skip to main content

ruprim/reduce/components/readers/
unit.rs

1use ruda_kernel::dsl as kernel_dsl;
2use crate::reduce::{
3    ReducePrecision,
4    components::{
5        instructions::Item,
6        readers::{Reader, ReaderExpand},
7    },
8};
9use ruda_kernel::dsl::prelude::*;
10
11#[derive(RudaType)]
12pub struct UnitReader<P: ReducePrecision> {
13    reader: Reader<P>,
14}
15
16#[ruda]
17#[allow(clippy::len_without_is_empty)]
18impl<P: ReducePrecision> UnitReader<P> {
19    pub fn new(reader: Reader<P>) -> UnitReader<P> {
20        UnitReader::<P> { reader }
21    }
22
23    pub fn read(&self, vector_index: usize) -> Item<P> {
24        match &self.reader {
25            Reader::Parallel(reader) => reader.read_unit(vector_index),
26            Reader::Perpendicular(reader) => reader.read_unit(vector_index),
27        }
28    }
29
30    pub fn length(&self) -> usize {
31        match &self.reader {
32            Reader::Parallel(reader) => reader.length_unit(),
33            Reader::Perpendicular(reader) => reader.length_unit(),
34        }
35    }
36}