49 lines
1.1 KiB
Plaintext
49 lines
1.1 KiB
Plaintext
ArrayOfName :: struct {
|
|
data: *Name;
|
|
len: int;
|
|
cap: int;
|
|
}
|
|
|
|
TryGrowingNameArray :: proc(arr: *ArrayOfName) {
|
|
if (arr.len + 1 > arr.cap) {
|
|
cap := arr.cap * 2;
|
|
if (cap == 0) cap = 16;
|
|
|
|
arr.data = libc.realloc(arr.data, sizeof(arr.data[0]) * :libc.size_t(cap));
|
|
arr.cap = cap;
|
|
}
|
|
}
|
|
|
|
AddName :: proc(arr: *ArrayOfName, item: Name) {
|
|
TryGrowingNameArray(arr);
|
|
arr.data[arr.len] = item;
|
|
arr.len += 1;
|
|
}
|
|
|
|
InsertName :: proc(a: *ArrayOfName, item: Name, index: int) {
|
|
if index == a.len {
|
|
AddName(a, item);
|
|
return;
|
|
}
|
|
|
|
libc.assert(index < a.len);
|
|
libc.assert(index >= 0);
|
|
|
|
TryGrowingNameArray(a);
|
|
right_len := :libc.size_t(a.len - index);
|
|
libc.memmove(&a.data[index + 1], &a.data[index], sizeof(a.data[0]) * right_len);
|
|
a.data[index] = item;
|
|
a.len += 1;
|
|
}
|
|
|
|
GetLastName :: proc(a: ArrayOfName): *Name {
|
|
libc.assert(a.len > 0);
|
|
result := &a.data[a.len - 1];
|
|
return result;
|
|
}
|
|
|
|
PopName :: proc(a: *ArrayOfName): Name {
|
|
a.len -= 1;
|
|
result := a.data[a.len];
|
|
return result;
|
|
} |