summaryrefslogtreecommitdiff
path: root/src/dynamic-array.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynamic-array.cpp')
-rw-r--r--src/dynamic-array.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/dynamic-array.cpp b/src/dynamic-array.cpp
new file mode 100644
index 0000000..2ec35dd
--- /dev/null
+++ b/src/dynamic-array.cpp
@@ -0,0 +1,21 @@
+
+#include "dynamic-array.hpp"
+
+void inline DynArrayReserve(DynArrayBase *arr, int64_t count) {
+ if (arr->reservedSize >= count) return;
+ char *a = pke::PkeNew<char>(arr->elementSize * count);
+ if (arr->ptr != nullptr) {
+ std::memcpy(a, arr->ptr, arr->elementSize * arr->reservedSize);
+ pke::PkeDelete<char>(arr->ptr, arr->elementSize * arr->reservedSize);
+ }
+ arr->reservedSize = count;
+ arr->ptr = a;
+}
+
+void inline DynArrayDestroy(DynArrayBase *arr) {
+ if (arr->ptr == nullptr) return;
+ if (arr->ptr == reinterpret_cast<char *>(0xCAFEBABE)) return;
+ pke::PkeDelete<char>(arr->ptr, arr->elementSize * arr->reservedSize);
+ arr->ptr = reinterpret_cast<char *>(0xCAFEBABE);
+}
+