stdlib: Add vec growth functions that use a thunk to initialize elements

This commit is contained in:
Patrick Walton 2011-05-19 16:05:35 -07:00
parent a4dd57705c
commit 6b95584df5

View file

@ -206,6 +206,20 @@ fn grow_set[T](&vec[mutable T] v, uint index, &T initval, &T val) {
v.(index) = val;
}
fn grow_init_fn[T](&array[T] v, uint n, fn()->T init_fn) {
let uint i = n;
while (i > 0u) {
i -= 1u;
v += [init_fn()];
}
}
fn grow_init_fn_set[T](&array[T] v, uint index, fn()->T init_fn, &T val) {
auto length = vec::len(v);
if (index >= length) { grow_init_fn(v, index - length + 1u, init_fn); }
v.(index) = val;
}
fn map[T, U](&option::operator[T,U] f, &array[T] v) -> vec[U] {
let vec[U] u = alloc[U](len[T](v));
for (T ve in v) {