about summary refs log tree commit diff
diff options
context:
space:
mode:
authorblake2-ppc <blake2-ppc>2013-08-18 13:57:35 +0200
committerblake2-ppc <blake2-ppc>2013-08-19 11:20:00 +0200
commit595dd843d7e2e38c08b4e03b79a0531d32d778fb (patch)
tree9002dce2430d057d4a1c151465e8e903499269c8
parentdb3eb7291a3af1b88052f8ad87da79d62bd60b81 (diff)
downloadrust-595dd843d7e2e38c08b4e03b79a0531d32d778fb.tar.gz
rust-595dd843d7e2e38c08b4e03b79a0531d32d778fb.zip
std::str: Use CharOffsetIterator in .find() and .rfind()
-rw-r--r--src/libstd/str.rs9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/libstd/str.rs b/src/libstd/str.rs
index ccb7349eefd..0becd8e722e 100644
--- a/src/libstd/str.rs
+++ b/src/libstd/str.rs
@@ -1790,10 +1790,8 @@ impl<'self> StrSlice<'self> for &'self str {
                 if search.matches(b as char) { return Some(i) }
             }
         } else {
-            let mut index = 0;
-            for c in self.iter() {
+            for (index, c) in self.char_offset_iter() {
                 if search.matches(c) { return Some(index); }
-                index += c.len_utf8_bytes();
             }
         }
 
@@ -1807,15 +1805,14 @@ impl<'self> StrSlice<'self> for &'self str {
     /// `Some` containing the byte index of the last matching character
     /// or `None` if there is no match
     fn rfind<C: CharEq>(&self, search: C) -> Option<uint> {
-        let mut index = self.len();
         if search.only_ascii() {
+            let mut index = self.len();
             for b in self.byte_rev_iter() {
                 index -= 1;
                 if search.matches(b as char) { return Some(index); }
             }
         } else {
-            for c in self.rev_iter() {
-                index -= c.len_utf8_bytes();
+            for (index, c) in self.char_offset_rev_iter() {
                 if search.matches(c) { return Some(index); }
             }
         }