From 8ff5c4394cdfc11f29de36123a6c9618e12c9904 Mon Sep 17 00:00:00 2001 From: Tobias Bucher Date: Thu, 23 Jun 2016 12:26:15 +0200 Subject: [PATCH] Use `len` instead of `size_hint` where appropiate This makes it clearer that we're not just looking for a lower bound but rather know that the iterator is an `ExactSizeIterator`. --- src/libcollections/vec.rs | 2 +- src/libcore/fmt/mod.rs | 2 +- src/libcore/slice.rs | 8 ++++---- src/libcore/str/mod.rs | 9 ++++----- src/libcore/str/pattern.rs | 8 ++++---- src/libstd/sys/common/wtf8.rs | 2 +- 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index bd1bf6e9cc3..9797113b8ad 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -1658,7 +1658,7 @@ impl Iterator for IntoIter { #[inline] fn count(self) -> usize { - self.size_hint().0 + self.len() } } diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index 6579e5dab54..4ac134c2b59 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -1384,7 +1384,7 @@ impl Debug for str { for (i, c) in self.char_indices() { let esc = c.escape_default(); // If char needs escaping, flush backlog so far and write, else skip - if esc.size_hint() != (1, Some(1)) { + if esc.len() != 1 { f.write_str(&self[from..i])?; for c in esc { f.write_char(c)?; diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index 727c26ba9ab..4f11cac4eb2 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -835,7 +835,7 @@ macro_rules! iterator { #[inline] fn count(self) -> usize { - self.size_hint().0 + self.len() } #[inline] @@ -1444,7 +1444,7 @@ impl<'a, T> Iterator for Windows<'a, T> { #[inline] fn count(self) -> usize { - self.size_hint().0 + self.len() } #[inline] @@ -1541,7 +1541,7 @@ impl<'a, T> Iterator for Chunks<'a, T> { #[inline] fn count(self) -> usize { - self.size_hint().0 + self.len() } #[inline] @@ -1632,7 +1632,7 @@ impl<'a, T> Iterator for ChunksMut<'a, T> { #[inline] fn count(self) -> usize { - self.size_hint().0 + self.len() } #[inline] diff --git a/src/libcore/str/mod.rs b/src/libcore/str/mod.rs index 5fc15fae519..9016d1a4d55 100644 --- a/src/libcore/str/mod.rs +++ b/src/libcore/str/mod.rs @@ -433,7 +433,7 @@ impl<'a> Iterator for Chars<'a> { #[inline] fn size_hint(&self) -> (usize, Option) { - let (len, _) = self.iter.size_hint(); + let len = self.iter.len(); // `(len + 3)` can't overflow, because we know that the `slice::Iter` // belongs to a slice in memory which has a maximum length of // `isize::MAX` (that's well below `usize::MAX`). @@ -480,12 +480,12 @@ impl<'a> Iterator for CharIndices<'a> { #[inline] fn next(&mut self) -> Option<(usize, char)> { - let (pre_len, _) = self.iter.iter.size_hint(); + let pre_len = self.iter.iter.len(); match self.iter.next() { None => None, Some(ch) => { let index = self.front_offset; - let (len, _) = self.iter.iter.size_hint(); + let len = self.iter.iter.len(); self.front_offset += pre_len - len; Some((index, ch)) } @@ -505,8 +505,7 @@ impl<'a> DoubleEndedIterator for CharIndices<'a> { match self.iter.next_back() { None => None, Some(ch) => { - let (len, _) = self.iter.iter.size_hint(); - let index = self.front_offset + len; + let index = self.front_offset + self.iter.iter.len(); Some((index, ch)) } } diff --git a/src/libcore/str/pattern.rs b/src/libcore/str/pattern.rs index b803539e12b..53804c611e6 100644 --- a/src/libcore/str/pattern.rs +++ b/src/libcore/str/pattern.rs @@ -310,9 +310,9 @@ unsafe impl<'a, C: CharEq> Searcher<'a> for CharEqSearcher<'a, C> { let s = &mut self.char_indices; // Compare lengths of the internal byte slice iterator // to find length of current char - let (pre_len, _) = s.iter.iter.size_hint(); + let pre_len = s.iter.iter.len(); if let Some((i, c)) = s.next() { - let (len, _) = s.iter.iter.size_hint(); + let len = s.iter.iter.len(); let char_len = pre_len - len; if self.char_eq.matches(c) { return SearchStep::Match(i, i + char_len); @@ -330,9 +330,9 @@ unsafe impl<'a, C: CharEq> ReverseSearcher<'a> for CharEqSearcher<'a, C> { let s = &mut self.char_indices; // Compare lengths of the internal byte slice iterator // to find length of current char - let (pre_len, _) = s.iter.iter.size_hint(); + let pre_len = s.iter.iter.len(); if let Some((i, c)) = s.next_back() { - let (len, _) = s.iter.iter.size_hint(); + let len = s.iter.iter.len(); let char_len = pre_len - len; if self.char_eq.matches(c) { return SearchStep::Match(i, i + char_len); diff --git a/src/libstd/sys/common/wtf8.rs b/src/libstd/sys/common/wtf8.rs index d705b8986d0..b6be85a4dfa 100644 --- a/src/libstd/sys/common/wtf8.rs +++ b/src/libstd/sys/common/wtf8.rs @@ -715,7 +715,7 @@ impl<'a> Iterator for Wtf8CodePoints<'a> { #[inline] fn size_hint(&self) -> (usize, Option) { - let (len, _) = self.bytes.size_hint(); + let len = self.bytes.len(); (len.saturating_add(3) / 4, Some(len)) } }