Trait math::iter::common_refinement_zip::CommonRefinementZip
source · pub trait CommonRefinementZip<B, X, P, V>where
B: Copy + Num + Ord,
Self: Iterator<Item = X> + Sized,
P: Clone + Interval<B> + for<'b> Intersect<&'b P, Option<P>>,{
// Required method
fn get_interval_value_extractor(
&self
) -> Box<dyn Fn(<Self as Iterator>::Item) -> (P, V)>;
// Provided methods
fn common_refinement_zip(
self,
other: Self
) -> CommonRefinementZipped<B, Self, X, P, V> ⓘ { ... }
fn into_common_refinement_zipped(
self
) -> CommonRefinementZipped<B, Self, X, P, V> ⓘ { ... }
}
Required Methods§
Provided Methods§
fn common_refinement_zip( self, other: Self ) -> CommonRefinementZipped<B, Self, X, P, V> ⓘ
fn into_common_refinement_zipped( self ) -> CommonRefinementZipped<B, Self, X, P, V> ⓘ
Object Safety§
This trait is not object safe.
Implementations on Foreign Types§
source§impl<'a, V, B> CommonRefinementZip<B, (&'a ContiguousIntegerSet<B>, &'a V), ContiguousIntegerSet<B>, V> for Iter<'a, IntInterval<B>, V>
impl<'a, V, B> CommonRefinementZip<B, (&'a ContiguousIntegerSet<B>, &'a V), ContiguousIntegerSet<B>, V> for Iter<'a, IntInterval<B>, V>
Example
use math::{
interval::{traits::Interval, IntInterval},
iter::CommonRefinementZip,
};
use std::collections::BTreeMap;
let m1: BTreeMap<IntInterval<usize>, i32> =
vec![(IntInterval::new(0, 5), 5), (IntInterval::new(8, 10), 2)]
.into_iter()
.collect();
let m2: BTreeMap<IntInterval<usize>, i32> =
vec![(IntInterval::new(2, 4), 8), (IntInterval::new(12, 13), 9)]
.into_iter()
.collect();
let mut iter = m1.iter().common_refinement_zip(m2.iter());
assert_eq!(
Some((IntInterval::new(0, 1), vec![Some(5), None])),
iter.next()
);
assert_eq!(
Some((IntInterval::new(2, 4), vec![Some(5), Some(8)])),
iter.next()
);
assert_eq!(
Some((IntInterval::new(5, 5), vec![Some(5), None])),
iter.next()
);
assert_eq!(
Some((IntInterval::new(8, 10), vec![Some(2), None])),
iter.next()
);
assert_eq!(
Some((IntInterval::new(12, 13), vec![None, Some(9)])),
iter.next()
);
assert_eq!(None, iter.next());