diff options
| author | gifnksm <makoto.nksm+github@gmail.com> | 2013-05-12 07:56:08 +0900 |
|---|---|---|
| committer | gifnksm <makoto.nksm+github@gmail.com> | 2013-05-12 08:06:31 +0900 |
| commit | 82f963e347fa16ac3824e81c53f5d15155fe319b (patch) | |
| tree | ac37842eaa85aafa4b1dc0ce77a77201206486aa | |
| parent | 8ca64a423bea5dd9f4149fe343f7cec87e25316c (diff) | |
| download | rust-82f963e347fa16ac3824e81c53f5d15155fe319b.tar.gz rust-82f963e347fa16ac3824e81c53f5d15155fe319b.zip | |
libcore: Change `each_val` to follow new for-loop protocol
| -rw-r--r-- | src/libcore/old_iter.rs | 2 | ||||
| -rw-r--r-- | src/libcore/vec.rs | 25 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/libcore/old_iter.rs b/src/libcore/old_iter.rs index 8e31bbfd878..a596b07dc78 100644 --- a/src/libcore/old_iter.rs +++ b/src/libcore/old_iter.rs @@ -93,7 +93,7 @@ pub trait CopyableNonstrictIter<A:Copy> { // Like "each", but copies out the value. If the receiver is mutated while // iterating over it, the semantics must not be memory-unsafe but are // otherwise undefined. - fn each_val(&const self, f: &fn(A) -> bool); + fn each_val(&const self, f: &fn(A) -> bool) -> bool; } // A trait for sequences that can be built by imperatively pushing elements diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 741644af4aa..604f0297b64 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -2945,34 +2945,37 @@ impl<A:Copy + Ord> old_iter::CopyableOrderedIter<A> for @[A] { } impl<'self,A:Copy> old_iter::CopyableNonstrictIter<A> for &'self [A] { - fn each_val(&const self, f: &fn(A) -> bool) { + fn each_val(&const self, f: &fn(A) -> bool) -> bool { let mut i = 0; while i < self.len() { - if !f(copy self[i]) { break; } + if !f(copy self[i]) { return false; } i += 1; } + return true; } } // FIXME(#4148): This should be redundant impl<A:Copy> old_iter::CopyableNonstrictIter<A> for ~[A] { - fn each_val(&const self, f: &fn(A) -> bool) { + fn each_val(&const self, f: &fn(A) -> bool) -> bool { let mut i = 0; while i < uniq_len(self) { - if !f(copy self[i]) { break; } + if !f(copy self[i]) { return false; } i += 1; } + return true; } } // FIXME(#4148): This should be redundant impl<A:Copy> old_iter::CopyableNonstrictIter<A> for @[A] { - fn each_val(&const self, f: &fn(A) -> bool) { + fn each_val(&const self, f: &fn(A) -> bool) -> bool { let mut i = 0; while i < self.len() { - if !f(copy self[i]) { break; } + if !f(copy self[i]) { return false; } i += 1; } + return true; } } @@ -4688,4 +4691,14 @@ mod tests { i += 1; } } + + #[test] + fn test_each_val() { + use old_iter::CopyableNonstrictIter; + let mut i = 0; + for [1, 2, 3].each_val |v| { + i += v; + } + assert!(i == 6); + } } |
