summaryrefslogtreecommitdiff
path: root/src/dynamic-array.cpp
blob: 6b88fd759e8171de5661536dd477b13c5cf61ad3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#include "dynamic-array.hpp"

void DynArrayReserve(DynArrayBase *arr, int64_t count) {
	assert(count != 0);
	if (arr->reservedCount >= count) return;
	char *a = pke::PkeNew<char>(arr->elementSize * count);
	if (arr->ptr != nullptr) {
		std::memcpy(a, arr->ptr, arr->elementSize * arr->reservedCount);
		pke::PkeDelete<char>(arr->ptr, arr->elementSize * arr->reservedCount);
	}
	arr->reservedCount = count;
	arr->ptr = a;
}

void DynArrayDestroy(DynArrayBase *arr) {
	if (arr->ptr == nullptr) return;
	if (arr->ptr == CAFE_BABE(char)) return;
	pke::PkeDelete<char>(arr->ptr, arr->elementSize * arr->reservedCount);
	arr->ptr = CAFE_BABE(char);
}