libcore: Change each_val
to follow new for-loop protocol
This commit is contained in:
parent
8ca64a423b
commit
82f963e347
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user