summaryrefslogtreecommitdiff
path: root/src/array.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/array.hpp')
-rw-r--r--src/array.hpp16
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;