From c5e0736c2434fbed6b7f249b42b336f0e27804a6 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 19 Jul 2014 15:39:02 +0200 Subject: [PATCH] Simplify str CharOffsets iterator Only one uint is needed to keep track of the offset from the original full string. --- src/libcore/str.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 293c0118af1ea..c6aff9c8bdac8 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -209,20 +209,20 @@ impl<'a> DoubleEndedIterator for Chars<'a> { /// Use with the `std::iter` module. #[deriving(Clone)] pub struct CharOffsets<'a> { - front: uint, - back: uint, + front_offset: uint, iter: Chars<'a>, } impl<'a> Iterator<(uint, char)> for CharOffsets<'a> { #[inline] fn next(&mut self) -> Option<(uint, char)> { + let (pre_len, _) = self.iter.iter.size_hint(); match self.iter.next() { None => None, Some(ch) => { - let index = self.front; + let index = self.front_offset; let (len, _) = self.iter.iter.size_hint(); - self.front += self.back - self.front - len; + self.front_offset += pre_len - len; Some((index, ch)) } } @@ -241,8 +241,8 @@ impl<'a> DoubleEndedIterator<(uint, char)> for CharOffsets<'a> { None => None, Some(ch) => { let (len, _) = self.iter.iter.size_hint(); - self.back -= self.back - self.front - len; - Some((self.back, ch)) + let index = self.front_offset + len; + Some((index, ch)) } } } @@ -1680,7 +1680,7 @@ impl<'a> StrSlice<'a> for &'a str { #[inline] fn char_indices(&self) -> CharOffsets<'a> { - CharOffsets{front: 0, back: self.len(), iter: self.chars()} + CharOffsets{front_offset: 0, iter: self.chars()} } #[inline]