@@ -827,17 +827,6 @@ pub fn eq(a: &~str, b: &~str) -> bool {
827
827
eq_slice ( * a, * b)
828
828
}
829
829
830
- /*
831
- Section: Searching
832
- */
833
-
834
- // Utility used by various searching functions
835
- fn match_at < ' a , ' b > ( haystack : & ' a str , needle : & ' b str , at : uint ) -> bool {
836
- let mut i = at;
837
- for c in needle. byte_iter ( ) { if haystack[ i] != c { return false ; } i += 1 u; }
838
- return true ;
839
- }
840
-
841
830
/*
842
831
Section: Misc
843
832
*/
@@ -2018,18 +2007,16 @@ impl<'self> StrSlice<'self> for &'self str {
2018
2007
}
2019
2008
}
2020
2009
2010
+ #[inline]
2021
2011
fn starts_with<'a>(&self, needle: &'a str) -> bool {
2022
- let (self_len, needle_len) = (self.len(), needle.len());
2023
- if needle_len == 0u { true }
2024
- else if needle_len > self_len { false }
2025
- else { match_at(*self, needle, 0u) }
2012
+ let n = needle.len();
2013
+ self.len() >= n && needle == self.slice_to(n)
2026
2014
}
2027
2015
2016
+ #[inline]
2028
2017
fn ends_with(&self, needle: &str) -> bool {
2029
- let (self_len, needle_len) = (self.len(), needle.len());
2030
- if needle_len == 0u { true }
2031
- else if needle_len > self_len { false }
2032
- else { match_at(*self, needle, self_len - needle_len) }
2018
+ let (m, n) = (self.len(), needle.len());
2019
+ m >= n && needle == self.slice_from(m - n)
2033
2020
}
2034
2021
2035
2022
fn escape_default(&self) -> ~str {
0 commit comments