summaryrefslogtreecommitdiff
path: root/doc/generics.txt
blob: 22745c149eca5686734ba1deed07bc034961cc48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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)
}