summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynamic-array.cpp1
-rw-r--r--src/dynamic-array.hpp14
2 files changed, 11 insertions, 4 deletions
diff --git a/src/dynamic-array.cpp b/src/dynamic-array.cpp
index 6fb04b9..6b88fd7 100644
--- a/src/dynamic-array.cpp
+++ b/src/dynamic-array.cpp
@@ -2,6 +2,7 @@
#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) {
diff --git a/src/dynamic-array.hpp b/src/dynamic-array.hpp
index 703b5ed..ba48b8a 100644
--- a/src/dynamic-array.hpp
+++ b/src/dynamic-array.hpp
@@ -42,7 +42,7 @@ void DynArrayDestroy(DynArrayBase *arr);
template <typename T> inline DynArray<T>::DynArray(int64_t count) {
this->elementSize = sizeof(T);
- this->Reserve(count);
+ if (count > 0) DynArrayReserve(this, count);
}
template <typename T> inline DynArray<T>::DynArray() {
@@ -76,7 +76,8 @@ template <typename T> inline bool DynArray<T>::Has(const T &val) {
template <typename T> inline void DynArray<T>::Push(const T &val) {
if (this->elementCount + 1 > this->reservedCount) {
- DynArrayReserve(this, int64_t(this->reservedCount * 1.5));
+ auto safeReserveCount = this->reservedCount == 0 ? 1 : this->reservedCount;
+ DynArrayReserve(this, int64_t(safeReserveCount * 1.5));
}
std::memcpy(this->ptr + (sizeof(T) * this->elementCount), &val, sizeof(T));
this->elementCount += 1;
@@ -89,11 +90,16 @@ template <typename T> inline T DynArray<T>::Pop() {
}
template <typename T> inline void DynArray<T>::Reserve(int64_t count) {
- return DynArrayReserve(this, count);
+ if (count > 0) {
+ return DynArrayReserve(this, count);
+ }
+ this->elementCount = this->elementCount > count ? count : this->elementCount;
}
template <typename T> inline void DynArray<T>::Resize(int64_t count) {
- DynArrayReserve(this, count);
+ if (count > 0) {
+ DynArrayReserve(this, count);
+ }
this->elementCount = count;
}