diff options
| author | Graydon Hoare <[email protected]> | 2011-01-03 20:39:33 -0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-01-03 20:39:33 -0800 |
| commit | 001d7bfa174dc8097268bf41368c84474aafcd3a (patch) | |
| tree | 78723f9f97fcdecda130629620727a94e533c7c2 /src | |
| parent | Typecheck expr_bind. (diff) | |
| download | rust-001d7bfa174dc8097268bf41368c84474aafcd3a.tar.xz rust-001d7bfa174dc8097268bf41368c84474aafcd3a.zip | |
Add _str.starts_with and ends_with.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/_str.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/_str.rs b/src/lib/_str.rs index 55fe1142..6b7ac018 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; |