Function range_zip::generate_impl
source · pub(crate) fn generate_impl(params: &Params) -> String
Expand description
Output:
ⓘ
impl<Idx, IR0, R0, IR1, R1, IO0, O0, IO1, O1> Iterator
for RangeZip2x2<Idx, IR0, R0, IR1, R1, IO0, O0, IO1, O1>
where
Idx: std::cmp::Ord,
IR0: Iterator<Item = (Idx, R0)>,
IR1: Iterator<Item = (Idx, R1)>,
IO0: Iterator<Item = (Idx, O0)>,
IO1: Iterator<Item = (Idx, O1)>,
O0: Clone,
O1: Clone,
{
type Item = (Idx, R0, R1, Option<O0>, Option<O1>);
#[inline]
fn next(&mut self) -> Option<Self::Item> {
let Self {
r0,
r1,
o0,
o1,
o0_data_latest,
o1_data_latest,
} = self;
let (r0_index, r0_data) = r0.next()?;
let (r1_index, r1_data) = r1.next()?;
let max_index = [r0_index, r1_index].into_iter().max()?;
let mut o0_data = None;
while let Some((_, data)) = o0.next_if(|(index, _)| index <= &max_index) {
o0_data = Some(data);
}
let o0_data = o0_data.or(o0_data_latest.take());
o0_data_latest.clone_from(&o0_data);
let mut o1_data = None;
while let Some((_, data)) = o1.next_if(|(index, _)| index <= &max_index) {
o1_data = Some(data);
}
let o1_data = o1_data.or(o1_data_latest.take());
o1_data_latest.clone_from(&o1_data);
Some((max_index, r0_data, r1_data, o0_data, o1_data))
}
}