use ord_subset_trait::*;
use ord_var::*;
pub trait OrdSubsetIterExt: Iterator {
#[inline]
fn ord_subset_max(self) -> Option<Self::Item>
where
Self: Sized,
Self::Item: OrdSubset,
{
self.filter_map(OrdVar::new_checked)
.max()
.map(OrdVar::into_inner) }
#[inline]
fn ord_subset_min(self) -> Option<Self::Item>
where
Self: Sized,
Self::Item: OrdSubset,
{
self.filter_map(OrdVar::new_checked)
.min()
.map(OrdVar::into_inner) }
#[inline]
fn ord_subset_min_by_key<F, B>(self, mut f: F) -> Option<Self::Item>
where
F: FnMut(&Self::Item) -> B,
B: OrdSubset,
Self: Sized,
{
self.min_by_key(|it| OrdVar::new_checked(f(it)).ok_or(()))
}
#[inline]
fn ord_subset_max_by_key<F, B>(self, mut f: F) -> Option<Self::Item>
where
F: FnMut(&Self::Item) -> B,
B: OrdSubset,
Self: Sized,
{
self.max_by_key(|it| OrdVar::new_checked(f(it)))
}
}
impl<T: ?Sized + Iterator> OrdSubsetIterExt for T {}