Skip to content

Commit bc05364

Browse files
committed
---
yaml --- r: 5997 b: refs/heads/master c: 7a7940d h: refs/heads/master i: 5995: f706af7 v: v3
1 parent b06f571 commit bc05364

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: f1f0e6c06c9a208bbcbe48292b7a0ee31edbb114
2+
refs/heads/master: 7a7940daca560d4471f5afa901579e1bd65dcaa6

trunk/src/lib/vec.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,35 @@ fn iter2<T>(v: [mutable? T], f: block(uint, T)) {
663663
for x in v { f(i, x); i += 1u; }
664664
}
665665

666+
/*
667+
Function: riter
668+
669+
Iterates over a vector in reverse
670+
671+
Iterates over vector `v` and, for each element, calls function `f` with the
672+
element's value.
673+
674+
*/
675+
fn riter<T>(v: [mutable? T], f: block(T)) {
676+
riter2(v) { |_i, v| f(v) }
677+
}
678+
679+
/*
680+
Function: riter2
681+
682+
Iterates over a vector's elements and indexes in reverse
683+
684+
Iterates over vector `v` and, for each element, calls function `f` with the
685+
element's value and index.
686+
*/
687+
fn riter2<T>(v: [mutable? T], f: block(uint, T)) {
688+
let i = len(v);
689+
while 0u < i {
690+
i -= 1u;
691+
f(i, v[i]);
692+
};
693+
}
694+
666695
/*
667696
Function: to_ptr
668697

trunk/src/test/stdtest/vec.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,34 @@ fn iter_nonempty() {
316316
assert i == 6;
317317
}
318318

319+
#[test]
320+
fn riter_empty() {
321+
let i = 0;
322+
vec::riter::<int>([], { |_v| i += 1 });
323+
assert i == 0;
324+
}
325+
326+
#[test]
327+
fn riter_nonempty() {
328+
let i = 0;
329+
vec::riter([1, 2, 3], { |v|
330+
if i == 0 { assert v == 3; }
331+
i += v
332+
});
333+
assert i == 6;
334+
}
335+
336+
#[test]
337+
fn riter2() {
338+
let i = 0;
339+
vec::riter2([0, 1, 2], { |j, v|
340+
if i == 0 { assert v == 2; }
341+
assert j == v as uint;
342+
i += v;
343+
});
344+
assert i == 3;
345+
}
346+
319347
#[test]
320348
fn test_any_and_all() {
321349
assert (vec::any(is_three, [1u, 2u, 3u]));

0 commit comments

Comments
 (0)