sac-base 0.0.7

Base crate of the sac-signal and sac-control crates
Documentation
use alloc::vec::Vec;

#[inline(always)]
pub fn iter_n_inputs<T, F>(data_input: (Vec<&[T]>, usize), output: &mut Vec<T>, clk: F)
    where   T: Default + Copy,
            F: Fn(T, T) -> T
{
    let (inputs, max_len) = data_input;
    output.clear();
    for i in 0..max_len {
        let mut res = match inputs.get(0) {
            Some(inner) => {
                match inner.get(i) {
                    Some(v) => *v,
                    None => T::default(),
                }
            },
            None => T::default()
        };

        for j in 1..inputs.len() {
            let val = match inputs.get(j) {
                Some(inner) => {
                    match inner.get(i) {
                        Some(v) => *v,
                        None => T::default(),
                    }
                },
                None => T::default()
            };
            res = clk(res, val);
        }
        output.push(res);
    }
}

pub fn iter_one_input_to_one<T, F>(data_input: (Vec<&[T]>, usize), output: &mut Vec<T>, clk: F)
    where   T: Default + Copy,
            F: Fn(T) -> T
{
    let (inputs, max_len) = data_input;
    inputs.into_iter().take(1).into_iter().for_each(|data| {
        data.into_iter().take(max_len).into_iter().for_each(|v| {
            let res = clk(*v);
            output.insert(0, res);
        })
    })
}