grass_runtime/algorithm/markers/
sorted.rs

1use crate::property::Region;
2
3pub trait Sorted: Iterator {}
4
5pub trait AssumeSorted: Iterator + Sized {
6    fn assume_sorted(self) -> AssumingSortedIter<Self>
7    where
8        Self::Item: Region,
9    {
10        AssumingSortedIter { inner: self }
11    }
12}
13
14impl<T: Iterator> AssumeSorted for T {}
15
16pub struct AssumingSortedIter<T: Iterator> {
17    inner: T,
18}
19
20impl<T: Iterator> Iterator for AssumingSortedIter<T> {
21    type Item = T::Item;
22    fn next(&mut self) -> Option<Self::Item> {
23        self.inner.next()
24    }
25}
26
27impl<T: Iterator> Sorted for AssumingSortedIter<T> {}
28
29impl<T: Iterator + Sorted, P> Sorted for std::iter::Filter<T, P> where P: Fn(&T::Item) -> bool {}