summary refs log tree commit diff
path: root/src/libcore/str.rs
diff options
context:
space:
mode:
authorKevin Cantu <me@kevincantu.org>2012-01-30 22:14:07 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-31 14:29:11 -0800
commita8b657397aa9cd4b85ef68cc11b5ce48ee99d3ce (patch)
tree72c266454af359fb602fcfbbf97a2b8445522172 /src/libcore/str.rs
parentebf14cb3a95a872e1973074ed0b915e873fddf41 (diff)
downloadrust-a8b657397aa9cd4b85ef68cc11b5ce48ee99d3ce.tar.gz
rust-a8b657397aa9cd4b85ef68cc11b5ce48ee99d3ce.zip
Add str::split_chars_iter and str::splitn_chars_iter
Diffstat (limited to 'src/libcore/str.rs')
-rw-r--r--src/libcore/str.rs64
1 files changed, 59 insertions, 5 deletions
diff --git a/src/libcore/str.rs b/src/libcore/str.rs
index cc5de8e91f9..1c7fe1a9ced 100644
--- a/src/libcore/str.rs
+++ b/src/libcore/str.rs
@@ -65,6 +65,8 @@ export
    map,
    bytes_iter,
    chars_iter,
+   split_chars_iter,
+   splitn_chars_iter,
    words_iter,
    lines_iter,
 
@@ -818,8 +820,6 @@ fn map(ss: str, ff: fn(char) -> char) -> str {
 Function: bytes_iter
 
 Iterate over the bytes in a string
-
-FIXME: Should it really include the last byte '\0'?
 */
 fn bytes_iter(ss: str, it: fn(u8)) {
     let pos = 0u;
@@ -846,6 +846,28 @@ fn chars_iter(s: str, it: fn(char)) {
 }
 
 /*
+Function: split_chars_iter
+
+Apply a function to each substring after splitting
+by character
+*/
+fn split_chars_iter(ss: str, cc: char, ff: fn(&&str)) {
+   vec::iter(split_char(ss, cc), ff)
+}
+
+/*
+Function: splitn_chars_iter
+
+Apply a function to each substring after splitting
+by character, up to nn times
+
+FIXME: make this use chars when splitn/splitn_char is fixed
+*/
+fn splitn_chars_iter(ss: str, sep: u8, count: uint, ff: fn(&&str)) {
+   vec::iter(splitn(ss, sep, count), ff)
+}
+
+/*
 Function: words_iter
 
 Apply a function to each word
@@ -863,9 +885,6 @@ fn lines_iter(ss: str, ff: fn(&&str)) {
     vec::iter(lines(ss), ff)
 }
 
-// FIXME: ADD split_char_iter
-// FIXME: ADD splitn_char_iter
-
 /*
 Section: Searching
 */
@@ -1863,6 +1882,41 @@ mod tests {
     }
 
     #[test]
+    fn test_split_chars_iter() {
+        let data = "\nMary had a little lamb\nLittle lamb\n";
+
+        let ii = 0;
+
+        split_chars_iter(data, ' ') {|xx|
+            alt ii {
+              0 { assert "\nMary" == xx; }
+              1 { assert "had"    == xx; }
+              2 { assert "a"      == xx; }
+              3 { assert "little" == xx; }
+              _ { () }
+            }
+            ii += 1;
+        }
+    }
+
+    #[test]
+    fn test_splitn_chars_iter() {
+        let data = "\nMary had a little lamb\nLittle lamb\n";
+
+        let ii = 0;
+
+        splitn_chars_iter(data, ' ' as u8, 2u) {|xx|
+            alt ii {
+              0 { assert "\nMary" == xx; }
+              1 { assert "had"    == xx; }
+              2 { assert "a little lamb\nLittle lamb\n" == xx; }
+              _ { () }
+            }
+            ii += 1;
+        }
+    }
+
+    #[test]
     fn test_words_iter() {
         let data = "\nMary had a little lamb\nLittle lamb\n";