Skip to content

Commit 6b95584

Browse files
committed
stdlib: Add vec growth functions that use a thunk to initialize elements
1 parent a4dd577 commit 6b95584

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/lib/vec.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,20 @@ fn grow_set[T](&vec[mutable T] v, uint index, &T initval, &T val) {
206206
v.(index) = val;
207207
}
208208

209+
fn grow_init_fn[T](&array[T] v, uint n, fn()->T init_fn) {
210+
let uint i = n;
211+
while (i > 0u) {
212+
i -= 1u;
213+
v += [init_fn()];
214+
}
215+
}
216+
217+
fn grow_init_fn_set[T](&array[T] v, uint index, fn()->T init_fn, &T val) {
218+
auto length = vec::len(v);
219+
if (index >= length) { grow_init_fn(v, index - length + 1u, init_fn); }
220+
v.(index) = val;
221+
}
222+
209223
fn map[T, U](&option::operator[T,U] f, &array[T] v) -> vec[U] {
210224
let vec[U] u = alloc[U](len[T](v));
211225
for (T ve in v) {

0 commit comments

Comments
 (0)