Skip to content

Commit 58d0d6e

Browse files
committed
---
yaml --- r: 3193 b: refs/heads/master c: d471017 h: refs/heads/master i: 3191: 7ffce30 v: v3
1 parent 6830796 commit 58d0d6e

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-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: ab7ebb608a818f4437a2bec2ef42d9ee2048c86a
2+
refs/heads/master: d47101703e94fcce76c05d2713d44d0ecb65b16e

trunk/src/lib/ivec.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ fn len[T](&T[] v) -> uint {
3333
ret rusti::ivec_len(v);
3434
}
3535

36+
type init_op[T] = fn(uint) -> T;
37+
38+
fn init_fn[T](&init_op[T] op, uint n_elts) -> T[] {
39+
auto v = ~[];
40+
reserve(v, n_elts);
41+
let uint i = 0u;
42+
while (i < n_elts) { v += ~[op(i)]; i += 1u; }
43+
ret v;
44+
}
45+
3646
mod unsafe {
3747
fn copy_from_buf[T](&mutable T[] v, *T ptr, uint count) {
3848
ret rustrt::ivec_copy_from_buf(v, ptr, count);

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,18 @@ fn test_unsafe_ptrs() {
3434
assert (d.(4) == 5);
3535
}
3636

37+
fn test_init_fn() {
38+
fn square(uint n) -> uint { ret n * n; }
39+
auto v = ivec::init_fn(square, 3u);
40+
assert (ivec::len(v) == 3u);
41+
assert (v.(0) == 1u);
42+
assert (v.(1) == 4u);
43+
assert (v.(2) == 9u);
44+
}
45+
3746
fn main() {
3847
test_reserve_and_on_heap();
3948
//test_unsafe_ptrs();
49+
//test_init_fn();
4050
}
4151

0 commit comments

Comments
 (0)