65
65
map,
66
66
bytes_iter,
67
67
chars_iter,
68
+ split_chars_iter,
69
+ splitn_chars_iter,
68
70
words_iter,
69
71
lines_iter,
70
72
@@ -818,8 +820,6 @@ fn map(ss: str, ff: fn(char) -> char) -> str {
818
820
Function: bytes_iter
819
821
820
822
Iterate over the bytes in a string
821
-
822
- FIXME: Should it really include the last byte '\0'?
823
823
*/
824
824
fn bytes_iter ( ss : str , it : fn ( u8 ) ) {
825
825
let pos = 0 u;
@@ -845,6 +845,28 @@ fn chars_iter(s: str, it: fn(char)) {
845
845
}
846
846
}
847
847
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
+
848
870
/*
849
871
Function: words_iter
850
872
@@ -863,9 +885,6 @@ fn lines_iter(ss: str, ff: fn(&&str)) {
863
885
vec:: iter ( lines ( ss) , ff)
864
886
}
865
887
866
- // FIXME: ADD split_char_iter
867
- // FIXME: ADD splitn_char_iter
868
-
869
888
/*
870
889
Section: Searching
871
890
*/
@@ -1862,6 +1881,41 @@ mod tests {
1862
1881
bytes_iter ( "" ) { |bb| assert bb == 0u8 ; }
1863
1882
}
1864
1883
1884
+ #[ test]
1885
+ fn test_split_chars_iter ( ) {
1886
+ let data = "\n Mary had a little lamb\n Little lamb\n " ;
1887
+
1888
+ let ii = 0 ;
1889
+
1890
+ split_chars_iter ( data, ' ' ) { |xx|
1891
+ alt ii {
1892
+ 0 { assert "\n Mary" == 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 = "\n Mary had a little lamb\n Little lamb\n " ;
1905
+
1906
+ let ii = 0 ;
1907
+
1908
+ splitn_chars_iter ( data, ' ' as u8 , 2 u) { |xx|
1909
+ alt ii {
1910
+ 0 { assert "\n Mary" == xx; }
1911
+ 1 { assert "had" == xx; }
1912
+ 2 { assert "a little lamb\n Little lamb\n " == xx; }
1913
+ _ { ( ) }
1914
+ }
1915
+ ii += 1 ;
1916
+ }
1917
+ }
1918
+
1865
1919
#[ test]
1866
1920
fn test_words_iter ( ) {
1867
1921
let data = "\n Mary had a little lamb\n Little lamb\n " ;
0 commit comments