struct DynArr(T) { data ^T, len, cap i64 } proc da_fit(da ^DynArr(T), n i64, a ^Arena) { let c = da^.cap if c <= n { if c = 0 { c := 1 } while c <= n { c := c << 1 } da^.data := arena_realloc(a, da^.data, da^.cap * sizeof(T), alignof(T)) da^.cap := c } } proc da_push(da ^DynArr(T), v T, a ^Arena) { da_fit(da, da^.len + 1, a) da^.data[da^.len] := v da^.len := da^.len + 1 } proc main { let a = Arena {} let v = DynArr(i32) {} da_push(&v, 1, &a) da_push(&v, 2, &a) da_push(&v, 3, &a) da_push(&v, 4, &a) da_push(&v, 5, &a) da_push(&v, 6, &a) }