diff options
| author | Eric Huss <eric@huss.org> | 2021-09-29 19:33:42 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-29 19:33:42 -0700 |
| commit | 8f9f3aa04d0fc5dff13f8e045f30fc96a4928703 (patch) | |
| tree | dd881983d7a6edd189a2343c73dfebc9185850c0 | |
| parent | e392f5d90d6d0229ee4fa830642cb6e8df0bae03 (diff) | |
| parent | 830ecbd96ce30e3885663512ed94cbd347e64615 (diff) | |
| download | rust-8f9f3aa04d0fc5dff13f8e045f30fc96a4928703.tar.gz rust-8f9f3aa04d0fc5dff13f8e045f30fc96a4928703.zip | |
Rollup merge of #89335 - mbrubeck:range-is-sorted, r=cuviper
Optimize is_sorted for Range and RangeInclusive The [`Step`] trait guarantees that `Range<impl Step>` yields items in sorted order. We can override `Iterator::is_sorted` based on this guarantee, as we already do for `Iterator::min` and `max`. Thank you to ``@fiveseven-lambda`` who pointed this out [on the Rust Users Forum](https://users.rust-lang.org/t/is-sorted-method-in-impl-iterator-for-range/64717). [`Step`]: https://doc.rust-lang.org/stable/std/iter/trait.Step.html
| -rw-r--r-- | library/core/src/iter/range.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/library/core/src/iter/range.rs b/library/core/src/iter/range.rs index f7ed811e447..0f835689699 100644 --- a/library/core/src/iter/range.rs +++ b/library/core/src/iter/range.rs @@ -673,6 +673,11 @@ impl<A: Step> Iterator for ops::Range<A> { } #[inline] + fn is_sorted(self) -> bool { + true + } + + #[inline] #[doc(hidden)] unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item where @@ -1095,6 +1100,11 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> { fn max(mut self) -> Option<A> { self.next_back() } + + #[inline] + fn is_sorted(self) -> bool { + true + } } #[stable(feature = "inclusive_range", since = "1.26.0")] |
