summaryrefslogtreecommitdiff
path: root/doc/generics.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/generics.txt')
-rw-r--r--doc/generics.txt33
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)
+}