diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-21 15:56:40 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-23 11:42:20 -0500 |
| commit | a2e3fea7c7c3efb882e0f48add74857691ef67dc (patch) | |
| tree | 9e3048e21d91a2b501cd12e0b2ed20a258fdeed1 /src | |
| parent | ce30c733ddc187472c6040415c3442d10748c133 (diff) | |
check assignable in PkeArray
Diffstat (limited to 'src')
| -rw-r--r-- | src/array.hpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/array.hpp b/src/array.hpp index 46eab2e..4356e33 100644 --- a/src/array.hpp +++ b/src/array.hpp @@ -3,8 +3,11 @@ #include "macros.hpp" #include "memory-type-defs.hpp" +#include "memory.hpp" #include <cstdint> +#include <cstring> +#include <type_traits> struct PkeArray_Base { uint32_t next = 0; @@ -51,9 +54,12 @@ inline void PkeArray_Add(PkeArray_Base *arrIn, const D &val, MemBucket *bkt = nu } arr->data = newData; } - arr->data[arr->next++] = val; + if constexpr (std::is_assignable<D&, const D&>::value) { + arr->data[arr->next++] = val; + } else { + memcpy(arr->data[arr->next++], val, sizeof(D)); + } } - template<typename D, typename F = bool(const D&)> inline uint32_t PkeArray_FindFirstIndex(PkeArray_Base *arrIn, F fn) { auto *arr = static_cast<PkeArray<D> *>(arrIn); |
