diff options
Diffstat (limited to 'doc/generics.txt')
| -rw-r--r-- | doc/generics.txt | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/doc/generics.txt b/doc/generics.txt new file mode 100644 index 0000000..22745c1 --- /dev/null +++ b/doc/generics.txt @@ -0,0 +1,33 @@ +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) +} |
