diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index 1a482b75731..18244cec7c7 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -2290,6 +2290,28 @@ impl SlicePartialOrd for [A] } } +impl SlicePartialOrd for [A] + where A: Ord +{ + default fn partial_compare(&self, other: &[A]) -> Option { + let l = cmp::min(self.len(), other.len()); + + // Slice to the loop iteration range to enable bound check + // elimination in the compiler + let lhs = &self[..l]; + let rhs = &other[..l]; + + for i in 0..l { + match lhs[i].cmp(&rhs[i]) { + Ordering::Equal => (), + non_eq => return Some(non_eq), + } + } + + self.len().partial_cmp(&other.len()) + } +} + impl SlicePartialOrd for [u8] { #[inline] fn partial_compare(&self, other: &[u8]) -> Option {