summaryrefslogtreecommitdiff
path: root/doc/generics.txt
diff options
context:
space:
mode:
authorWormHeamer2025-08-05 04:58:40 -0400
committerWormHeamer2025-08-05 04:58:40 -0400
commit457d70acda9b9c02ddb297fcb36ed1fa5b57f92a (patch)
treea9254683bb8ffd1076821eb9cfdd2128dfcfda41 /doc/generics.txt
parent98bf590247c281137fdc62478699c66bb35ff29f (diff)
write some stuff about language goals
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)
+}