From 6b95584df5c878f716743eb9c60ad5df77af8b18 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 19 May 2011 16:05:35 -0700 Subject: [PATCH] stdlib: Add vec growth functions that use a thunk to initialize elements --- src/lib/vec.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lib/vec.rs b/src/lib/vec.rs index f251225a3e94..ba6040738564 100644 --- a/src/lib/vec.rs +++ b/src/lib/vec.rs @@ -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) {