diff options
Diffstat (limited to 'src/array.hpp')
| -rw-r--r-- | src/array.hpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/array.hpp b/src/array.hpp index a1fa69f..c8a9cb6 100644 --- a/src/array.hpp +++ b/src/array.hpp @@ -45,9 +45,21 @@ inline void PkeArray_Add(PkeArray_Base *arrIn, const D &val, struct pk_membucket diff = arr->reserved - originalCount; } auto *newData = pk_new<D>(arr->reserved, bkt); - memset(newData + (sizeof(D) * originalCount), 0xFF, sizeof(D) * diff); + if constexpr (std::is_trivial<D>::value) { + memset(newData + (sizeof(D) * originalCount), 0x00, sizeof(D) * diff); + } else { + for (int64_t i = originalCount; i < arr->reserved; ++i) { + newData[i] = {}; + } + } if (arr->data != nullptr && arr->data != CAFE_BABE(D)) { - memcpy(newData, arr->data, sizeof(D) * originalCount); + if constexpr (std::is_trivial<D>::value) { + memcpy(newData, arr->data, sizeof(D) * originalCount); + } else { + for (int64_t i = 0; i < diff; ++i) { + newData[i] = arr->data[i]; + } + } pk_delete<D>(arr->data, originalCount, bkt); } arr->data = newData; |
