Skip to content

Commit 8b6b69a

Browse files
committed
---
yaml --- r: 12234 b: refs/heads/master c: 8641c95 h: refs/heads/master v: v3
1 parent 073d248 commit 8b6b69a

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 9bff2f25455ac781afecf09afe8d26653460601b
2+
refs/heads/master: 8641c95221786d13c5e91f1d78c9d0158c376438
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
55
refs/heads/try: 2898dcc5d97da9427ac367542382b6239d9c0bbf

trunk/src/libcore/str.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export
5555
all_between, any_between,
5656
map,
5757
each,
58+
each_char,
5859
bytes_iter,
5960
chars_iter,
6061
split_char_iter,
@@ -635,6 +636,18 @@ fn each(s: str, it: fn(u8) -> bool) {
635636
}
636637
}
637638

639+
#[doc = "Iterates over the chars in a string"]
640+
#[inline(always)]
641+
fn each_char(s: str, it: fn(char) -> bool) {
642+
let mut pos = 0u;
643+
let len = len(s);
644+
while pos < len {
645+
let {ch, next} = char_range_at(s, pos);
646+
pos = next;
647+
if !it(ch) { break; }
648+
}
649+
}
650+
638651
#[doc = "Iterate over the characters in a string"]
639652
fn chars_iter(s: str, it: fn(char)) {
640653
let mut pos = 0u;
@@ -2669,4 +2682,17 @@ mod tests {
26692682
assert to_utf16(from_utf16(u)) == u;
26702683
}
26712684
}
2685+
2686+
#[test]
2687+
fn test_each_char() {
2688+
let s = "abc";
2689+
let mut found_b = false;
2690+
for each_char(s) {|ch|
2691+
if ch == 'b' {
2692+
found_b = true;
2693+
break;
2694+
}
2695+
}
2696+
assert found_b;
2697+
}
26722698
}

0 commit comments

Comments
 (0)