diff options
Diffstat (limited to 'src/dynamic-array.cpp')
| -rw-r--r-- | src/dynamic-array.cpp | 21 |
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); +} + |
