about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-01-03 20:39:33 -0800
committerGraydon Hoare <graydon@mozilla.com>2011-01-03 20:39:33 -0800
commit001d7bfa174dc8097268bf41368c84474aafcd3a (patch)
tree78723f9f97fcdecda130629620727a94e533c7c2
parent546f1e98cb0da4a4f72b9f64afd0e38e6ea45c08 (diff)
downloadrust-001d7bfa174dc8097268bf41368c84474aafcd3a.tar.gz
rust-001d7bfa174dc8097268bf41368c84474aafcd3a.zip
Add _str.starts_with and ends_with.
-rw-r--r--src/lib/_str.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/_str.rs b/src/lib/_str.rs
index 55fe11424fa..6b7ac018e57 100644
--- a/src/lib/_str.rs
+++ b/src/lib/_str.rs
@@ -188,6 +188,35 @@ fn find(str haystack, str needle) -> int {
     ret  -1;
 }
 
+fn starts_with(str haystack, str needle) -> bool {
+    let uint haystack_len = byte_len(haystack);
+    let uint needle_len = byte_len(needle);
+    if (needle_len == 0u) {
+        ret true;
+    }
+    if (needle_len > haystack_len) {
+        ret false;
+    }
+    ret eq(substr(haystack, 0u, needle_len), needle);
+}
+
+
+fn ends_with(str haystack, str needle) -> bool {
+    let uint haystack_len = byte_len(haystack);
+    let uint needle_len = byte_len(needle);
+    if (needle_len == 0u) {
+        ret true;
+    }
+    if (needle_len > haystack_len) {
+        ret false;
+    }
+    ret eq(substr(haystack,
+                  haystack_len - needle_len,
+                  needle_len),
+           needle);
+}
+
+
 fn substr(str s, uint begin, uint len) -> str {
     let str accum = "";
     let uint i = begin;