diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-08-12 11:04:42 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-08-12 11:04:42 -0400 |
| commit | 7cd40ea0dd3659ee599dc842739b9e68286ea213 (patch) | |
| tree | 5090387a93ba621efb19ce72326a9739560b8693 /src/dynamic-array.cpp | |
| parent | c379a02e66d0e93a2f0b8e11d828ca9c0513698b (diff) | |
Add DynamicArray
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); +} + |
