diff options
| author | Kevin Ballard <kevin@sb.org> | 2013-10-16 23:02:46 -0700 | 
|---|---|---|
| committer | Kevin Ballard <kevin@sb.org> | 2013-10-16 23:17:34 -0700 | 
| commit | 87a2d032ff6fe74e97348189f95a3a91fd9e228e (patch) | |
| tree | 4db1f17013b3991d026b3acfcc38cd11bffade64 | |
| parent | 2fcb53493dc80469acf86797c53dacc331629d50 (diff) | |
| download | rust-87a2d032ff6fe74e97348189f95a3a91fd9e228e.tar.gz rust-87a2d032ff6fe74e97348189f95a3a91fd9e228e.zip  | |
Rewrite str.starts_with()/ends_with() to be simpler
| -rw-r--r-- | src/libstd/str.rs | 25 | 
1 files changed, 6 insertions, 19 deletions
diff --git a/src/libstd/str.rs b/src/libstd/str.rs index decfbb0785c..5c6974de17d 100644 --- a/src/libstd/str.rs +++ b/src/libstd/str.rs @@ -828,17 +828,6 @@ pub fn eq(a: &~str, b: &~str) -> bool { } /* -Section: Searching -*/ - -// Utility used by various searching functions -fn match_at<'a,'b>(haystack: &'a str, needle: &'b str, at: uint) -> bool { - let mut i = at; - for c in needle.byte_iter() { if haystack[i] != c { return false; } i += 1u; } - return true; -} - -/* Section: Misc */ @@ -2018,18 +2007,16 @@ impl<'self> StrSlice<'self> for &'self str { } } + #[inline] fn starts_with<'a>(&self, needle: &'a str) -> bool { - let (self_len, needle_len) = (self.len(), needle.len()); - if needle_len == 0u { true } - else if needle_len > self_len { false } - else { match_at(*self, needle, 0u) } + let n = needle.len(); + self.len() >= n && needle == self.slice_to(n) } + #[inline] fn ends_with(&self, needle: &str) -> bool { - let (self_len, needle_len) = (self.len(), needle.len()); - if needle_len == 0u { true } - else if needle_len > self_len { false } - else { match_at(*self, needle, self_len - needle_len) } + let (m, n) = (self.len(), needle.len()); + m >= n && needle == self.slice_from(m - n) } fn escape_default(&self) -> ~str {  | 
