Skip to content

Commit 5a99a73

Browse files
committed
---
yaml --- r: 3573 b: refs/heads/master c: f71c8dd h: refs/heads/master i: 3571: f2aafd1 v: v3
1 parent cf0be66 commit 5a99a73

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: d3a4102bc177e23d4a7a6dfb44bcad4e4c81eca1
2+
refs/heads/master: f71c8dd91873d3983a21b85f5c86651b1a5cefed

trunk/src/lib/ivec.rs

+14
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,20 @@ fn grow_set[T](&mutable T[mutable] v, uint index, &T initval, &T val) {
158158
v.(index) = val;
159159
}
160160

161+
162+
// Functional utilities
163+
164+
fn map[T,U](fn(&T)->U f, &mutable T[mutable?] v) -> U[] {
165+
auto result = ~[];
166+
reserve(result, len(v));
167+
for (T elem in v) {
168+
auto elem2 = elem; // satisfies alias checker
169+
result += ~[f(elem2)];
170+
}
171+
ret result;
172+
}
173+
174+
161175
mod unsafe {
162176
fn copy_from_buf[T](&mutable T[] v, *T ptr, uint count) {
163177
ret rustrt::ivec_copy_from_buf(v, ptr, count);

trunk/src/test/run-pass/lib-ivec.rs

+23
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,26 @@ fn test_grow_set() {
164164
assert (v.(4) == 5);
165165
}
166166

167+
fn test_map() {
168+
// Test on-stack map.
169+
auto v = ~[ 1u, 2u, 3u ];
170+
auto w = ivec::map(square, v);
171+
assert (ivec::len(w) == 3u);
172+
assert (w.(0) == 1u);
173+
assert (w.(1) == 4u);
174+
assert (w.(2) == 9u);
175+
176+
// Test on-heap map.
177+
v = ~[ 1u, 2u, 3u, 4u, 5u ];
178+
w = ivec::map(square, v);
179+
assert (ivec::len(w) == 5u);
180+
assert (w.(0) == 1u);
181+
assert (w.(1) == 4u);
182+
assert (w.(2) == 9u);
183+
assert (w.(3) == 16u);
184+
assert (w.(4) == 25u);
185+
}
186+
167187
fn main() {
168188
test_reserve_and_on_heap();
169189
test_unsafe_ptrs();
@@ -181,5 +201,8 @@ fn main() {
181201
test_grow();
182202
test_grow_fn();
183203
test_grow_set();
204+
205+
// Functional utilities
206+
test_map();
184207
}
185208

0 commit comments

Comments
 (0)