pub struct UnaryAijOperator<Item, Iter, Out, F>
where
Item: Copy,
Out: Copy,
F: Fn(Item) -> Out,
Iter: Iterator<Item = ([usize; 2], Item)>,
{
iter: Iter,
func: F,
}
impl<Item, Iter, Out, F> UnaryAijOperator<Item, Iter, Out, F>
where
Item: Copy,
Out: Copy,
F: Fn(Item) -> Out,
Iter: Iterator<Item = ([usize; 2], Item)>,
{
pub fn new(iter: Iter, func: F) -> Self {
Self { iter, func }
}
}
impl<Item, Iter, Out, F> Iterator for UnaryAijOperator<Item, Iter, Out, F>
where
Item: Copy + Default,
Out: Copy + Default + PartialEq,
F: Fn(Item) -> Out,
Iter: Iterator<Item = ([usize; 2], Item)>,
{
type Item = ([usize; 2], Out);
fn next(&mut self) -> Option<Self::Item> {
for (index, input) in self.iter.by_ref() {
let value = (self.func)(input);
if value != Out::default() {
return Some((index, value));
}
}
None
}
}