Skip to content

Commit a8b6573

Browse files
killerswanbrson
authored andcommitted
Add str::split_chars_iter and str::splitn_chars_iter
1 parent ebf14cb commit a8b6573

File tree

1 file changed

+59
-5
lines changed

1 file changed

+59
-5
lines changed

src/libcore/str.rs

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ export
6565
map,
6666
bytes_iter,
6767
chars_iter,
68+
split_chars_iter,
69+
splitn_chars_iter,
6870
words_iter,
6971
lines_iter,
7072

@@ -818,8 +820,6 @@ fn map(ss: str, ff: fn(char) -> char) -> str {
818820
Function: bytes_iter
819821
820822
Iterate over the bytes in a string
821-
822-
FIXME: Should it really include the last byte '\0'?
823823
*/
824824
fn bytes_iter(ss: str, it: fn(u8)) {
825825
let pos = 0u;
@@ -845,6 +845,28 @@ fn chars_iter(s: str, it: fn(char)) {
845845
}
846846
}
847847

848+
/*
849+
Function: split_chars_iter
850+
851+
Apply a function to each substring after splitting
852+
by character
853+
*/
854+
fn split_chars_iter(ss: str, cc: char, ff: fn(&&str)) {
855+
vec::iter(split_char(ss, cc), ff)
856+
}
857+
858+
/*
859+
Function: splitn_chars_iter
860+
861+
Apply a function to each substring after splitting
862+
by character, up to nn times
863+
864+
FIXME: make this use chars when splitn/splitn_char is fixed
865+
*/
866+
fn splitn_chars_iter(ss: str, sep: u8, count: uint, ff: fn(&&str)) {
867+
vec::iter(splitn(ss, sep, count), ff)
868+
}
869+
848870
/*
849871
Function: words_iter
850872
@@ -863,9 +885,6 @@ fn lines_iter(ss: str, ff: fn(&&str)) {
863885
vec::iter(lines(ss), ff)
864886
}
865887

866-
// FIXME: ADD split_char_iter
867-
// FIXME: ADD splitn_char_iter
868-
869888
/*
870889
Section: Searching
871890
*/
@@ -1862,6 +1881,41 @@ mod tests {
18621881
bytes_iter("") {|bb| assert bb == 0u8; }
18631882
}
18641883

1884+
#[test]
1885+
fn test_split_chars_iter() {
1886+
let data = "\nMary had a little lamb\nLittle lamb\n";
1887+
1888+
let ii = 0;
1889+
1890+
split_chars_iter(data, ' ') {|xx|
1891+
alt ii {
1892+
0 { assert "\nMary" == xx; }
1893+
1 { assert "had" == xx; }
1894+
2 { assert "a" == xx; }
1895+
3 { assert "little" == xx; }
1896+
_ { () }
1897+
}
1898+
ii += 1;
1899+
}
1900+
}
1901+
1902+
#[test]
1903+
fn test_splitn_chars_iter() {
1904+
let data = "\nMary had a little lamb\nLittle lamb\n";
1905+
1906+
let ii = 0;
1907+
1908+
splitn_chars_iter(data, ' ' as u8, 2u) {|xx|
1909+
alt ii {
1910+
0 { assert "\nMary" == xx; }
1911+
1 { assert "had" == xx; }
1912+
2 { assert "a little lamb\nLittle lamb\n" == xx; }
1913+
_ { () }
1914+
}
1915+
ii += 1;
1916+
}
1917+
}
1918+
18651919
#[test]
18661920
fn test_words_iter() {
18671921
let data = "\nMary had a little lamb\nLittle lamb\n";

0 commit comments

Comments
 (0)