use core::cmp::Ordering;
use alloc::vec::IntoIter;
pub trait IterSorted: Iterator {
fn sorted(self) -> IntoIter<Self::Item>
where
Self: Sized,
Self::Item: Ord,
{
let mut v = Vec::from_iter(self);
v.sort();
v.into_iter()
}
fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item>
where
Self: Sized,
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
{
let mut v = Vec::from_iter(self);
v.sort_by(cmp);
v.into_iter()
}
fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item>
where
Self: Sized,
K: Ord,
F: FnMut(&Self::Item) -> K,
{
let mut v = Vec::from_iter(self);
v.sort_by_key(f);
v.into_iter()
}
fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item>
where
Self: Sized,
K: Ord,
F: FnMut(&Self::Item) -> K,
{
let mut v = Vec::from_iter(self);
v.sort_by_cached_key(f);
v.into_iter()
}
fn sorted_unstable(self) -> IntoIter<Self::Item>
where
Self: Sized,
Self::Item: Ord,
{
let mut v = Vec::from_iter(self);
v.sort_unstable();
v.into_iter()
}
fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item>
where
Self: Sized,
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
{
let mut v = Vec::from_iter(self);
v.sort_unstable_by(cmp);
v.into_iter()
}
fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item>
where
Self: Sized,
K: Ord,
F: FnMut(&Self::Item) -> K,
{
let mut v = Vec::from_iter(self);
v.sort_unstable_by_key(f);
v.into_iter()
}
}
impl<I: ?Sized> IterSorted for I where I: Iterator {}