summaryrefslogtreecommitdiff
path: root/src/dynamic-array.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-08-12 11:04:42 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-08-12 11:04:42 -0400
commit7cd40ea0dd3659ee599dc842739b9e68286ea213 (patch)
tree5090387a93ba621efb19ce72326a9739560b8693 /src/dynamic-array.cpp
parentc379a02e66d0e93a2f0b8e11d828ca9c0513698b (diff)
Add DynamicArray
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);
+}
+