grass_runtime/algorithm/markers/
sorted.rs1use 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 {}