64 lines
1.2 KiB
Plaintext
64 lines
1.2 KiB
Plaintext
import "libc";
|
|
|
|
try_growing_array :: proc(arrp: *void, element_size: size_t) {
|
|
arr: *ArrayOfvoid = arrp;
|
|
if (arr.len + 1 > arr.cap) {
|
|
cap := arr.cap * 2;
|
|
if (cap == 0) cap = 16;
|
|
|
|
arr.data = realloc(arr.data, element_size * :size_t(cap));
|
|
arr.cap = cap;
|
|
}
|
|
}
|
|
|
|
init_array_base :: proc(arrp: *void, size: int, element_size: size_t) {
|
|
arr: *ArrayOfvoid = arrp;
|
|
arr.data = malloc(element_size * :size_t(size * 2));
|
|
arr.len = size * 2;
|
|
}
|
|
|
|
main :: proc(): int {
|
|
{
|
|
arr: ArrayOfint;
|
|
init_array(&arr, {0, 1, 2, 3, 4, 6, 7, 9, 10});
|
|
for i := 0; i < 10; i += 1 {
|
|
assert(arr.data[i] == i);
|
|
}
|
|
|
|
|
|
|
|
for it := &arr.data[0]; it < &arr.data[arr.len]; it = &it[1] {
|
|
|
|
}
|
|
}
|
|
|
|
{
|
|
arr: ArrayOfint;
|
|
|
|
for i := 0; i < 128; i += 1 {
|
|
add(&arr, i);
|
|
}
|
|
|
|
for i := 0; i < 128; i += 1 {
|
|
assert(arr.data[i] == i);
|
|
}
|
|
}
|
|
|
|
|
|
{
|
|
arr: ArrayOffloat;
|
|
|
|
for i: float = 0; i < 128; i += 1 {
|
|
add(&arr, i);
|
|
}
|
|
|
|
for i := 0; i < 128; i += 1 {
|
|
i0 := :int(arr.data[i]);
|
|
assert(i0 == i);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
} |