From ccc027eff7604bf75f1ad490f415a338e44c1038 Mon Sep 17 00:00:00 2001 From: Kevin Leimkuhler Date: Sat, 13 Oct 2018 17:26:57 -0700 Subject: [PATCH] Improve documentation and slice impl --- src/libcore/iter/iterator.rs | 8 ++++++-- src/libcore/slice/mod.rs | 21 ++++++++++++--------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/libcore/iter/iterator.rs b/src/libcore/iter/iterator.rs index 67591381fdc..4035ad6b77c 100644 --- a/src/libcore/iter/iterator.rs +++ b/src/libcore/iter/iterator.rs @@ -2640,7 +2640,9 @@ pub trait Iterator { /// /// Instead of using `PartialOrd::partial_cmp`, this function uses the given `compare` /// function to determine the ordering of two elements. Apart from that, it's equivalent to - /// `is_sorted`; see its documentation for more information. + /// [`is_sorted`]; see its documentation for more information. + /// + /// [`is_sorted`]: trait.Iterator.html#method.is_sorted #[unstable(feature = "is_sorted", reason = "new API", issue = "53485")] fn is_sorted_by(mut self, mut compare: F) -> bool where @@ -2666,9 +2668,11 @@ pub trait Iterator { /// function. /// /// Instead of comparing the iterator's elements directly, this function compares the keys of - /// the elements, as determined by `f`. Apart from that, it's equivalent to `is_sorted`; see + /// the elements, as determined by `f`. Apart from that, it's equivalent to [`is_sorted`]; see /// its documentation for more information. /// + /// [`is_sorted`]: trait.Iterator.html#method.is_sorted + /// /// # Examples /// /// ``` diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index ab160a6c0c4..9c82aca9ab2 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -2285,22 +2285,23 @@ impl [T] { /// /// Instead of using `PartialOrd::partial_cmp`, this function uses the given `compare` /// function to determine the ordering of two elements. Apart from that, it's equivalent to - /// `is_sorted`; see its documentation for more information. + /// [`is_sorted`]; see its documentation for more information. + /// + /// [`is_sorted`]: #method.is_sorted #[unstable(feature = "is_sorted", reason = "new API", issue = "53485")] pub fn is_sorted_by(&self, mut compare: F) -> bool where F: FnMut(&T, &T) -> Option { - let mut last = match self.first() { - Some(e) => e, - None => return true, - }; + let len = self.len(); + if len <= 1 { + return true; + } - for curr in &self[1..] { - if compare(&last, &curr).map(|o| o == Ordering::Greater).unwrap_or(true) { + for i in 1..len { + if compare(&self[i - 1], &self[i]).map(|o| o == Ordering::Greater).unwrap_or(true) { return false; } - last = &curr; } true @@ -2309,9 +2310,11 @@ impl [T] { /// Checks if the elements of this slice are sorted using the given key extraction function. /// /// Instead of comparing the slice's elements directly, this function compares the keys of the - /// elements, as determined by `f`. Apart from that, it's equivalent to `is_sorted`; see its + /// elements, as determined by `f`. Apart from that, it's equivalent to [`is_sorted`]; see its /// documentation for more information. /// + /// [`is_sorted`]: #method.is_sorted + /// /// # Examples /// /// ```