Skip to content

Commit d471017

Browse files
committed
stdlib: Sketch out ivec::init_fn, currently segfaulting
1 parent ab7ebb6 commit d471017

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

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);

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)