@@ -24,7 +24,7 @@ use container::{Container, Mutable};
24
24
use num:: Times ;
25
25
use iterator:: { Iterator , FromIterator , Extendable } ;
26
26
use iterator:: { Filter , AdditiveIterator , Map } ;
27
- use iterator:: { Invert , DoubleEndedIterator } ;
27
+ use iterator:: { Invert , DoubleEndedIterator , ExactSizeDoubleEndedIterator } ;
28
28
use libc;
29
29
use num:: { Saturating } ;
30
30
use option:: { None , Option , Some } ;
@@ -484,9 +484,8 @@ for CharSplitIterator<'self, Sep> {
484
484
let mut next_split = None ;
485
485
486
486
if self . only_ascii {
487
- for ( j , byte) in self . string . byte_rev_iter ( ) . enumerate ( ) {
487
+ for ( idx , byte) in self . string . byte_iter ( ) . enumerate ( ) . invert ( ) {
488
488
if self . sep . matches ( byte as char ) && byte < 128u8 {
489
- let idx = len - j - 1 ;
490
489
next_split = Some ( ( idx, idx + 1 ) ) ;
491
490
break ;
492
491
}
@@ -2008,16 +2007,13 @@ impl<'self> StrSlice<'self> for &'self str {
2008
2007
/// or `None` if there is no match
2009
2008
fn find<C: CharEq>(&self, search: C) -> Option<uint> {
2010
2009
if search.only_ascii() {
2011
- for (i, b) in self.byte_iter().enumerate() {
2012
- if search.matches(b as char) { return Some(i) }
2013
- }
2010
+ self.byte_iter().position(|b| search.matches(b as char))
2014
2011
} else {
2015
2012
for (index, c) in self.char_offset_iter() {
2016
2013
if search.matches(c) { return Some(index); }
2017
2014
}
2015
+ None
2018
2016
}
2019
-
2020
- None
2021
2017
}
2022
2018
2023
2019
/// Returns the byte index of the last character of `self` that matches `search`
@@ -2028,18 +2024,13 @@ impl<'self> StrSlice<'self> for &'self str {
2028
2024
/// or `None` if there is no match
2029
2025
fn rfind<C: CharEq>(&self, search: C) -> Option<uint> {
2030
2026
if search.only_ascii() {
2031
- let mut index = self.len();
2032
- for b in self.byte_rev_iter() {
2033
- index -= 1;
2034
- if search.matches(b as char) { return Some(index); }
2035
- }
2027
+ self.byte_iter().rposition(|b| search.matches(b as char))
2036
2028
} else {
2037
2029
for (index, c) in self.char_offset_rev_iter() {
2038
2030
if search.matches(c) { return Some(index); }
2039
2031
}
2032
+ None
2040
2033
}
2041
-
2042
- None
2043
2034
}
2044
2035
2045
2036
/// Returns the byte index of the first matching substring
0 commit comments