File tree Expand file tree Collapse file tree 2 files changed +20
-0
lines changed Expand file tree Collapse file tree 2 files changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -33,6 +33,16 @@ fn len[T](&T[] v) -> uint {
33
33
ret rusti:: ivec_len ( v) ;
34
34
}
35
35
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 = 0 u;
42
+ while ( i < n_elts) { v += ~[ op ( i) ] ; i += 1 u; }
43
+ ret v;
44
+ }
45
+
36
46
mod unsafe {
37
47
fn copy_from_buf[ T ] ( & mutable T [ ] v, * T ptr, uint count) {
38
48
ret rustrt:: ivec_copy_from_buf ( v, ptr, count) ;
Original file line number Diff line number Diff line change @@ -34,8 +34,18 @@ fn test_unsafe_ptrs() {
34
34
assert ( d. ( 4 ) == 5 ) ;
35
35
}
36
36
37
+ fn test_init_fn ( ) {
38
+ fn square ( uint n) -> uint { ret n * n; }
39
+ auto v = ivec:: init_fn ( square, 3 u) ;
40
+ assert ( ivec:: len ( v) == 3 u) ;
41
+ assert ( v. ( 0 ) == 1 u) ;
42
+ assert ( v. ( 1 ) == 4 u) ;
43
+ assert ( v. ( 2 ) == 9 u) ;
44
+ }
45
+
37
46
fn main ( ) {
38
47
test_reserve_and_on_heap ( ) ;
39
48
//test_unsafe_ptrs();
49
+ //test_init_fn();
40
50
}
41
51
You can’t perform that action at this time.
0 commit comments