diff options
Diffstat (limited to 'src/array.hpp')
| -rw-r--r-- | src/array.hpp | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/src/array.hpp b/src/array.hpp deleted file mode 100644 index 883d512..0000000 --- a/src/array.hpp +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef PKE_ARRAY_HPP -#define PKE_ARRAY_HPP - -#include "pk.h" - -#include <cstdint> -#include <cstring> -#include <type_traits> - -typedef uint32_t PkeArray_Count_T; - -struct PkeArray_Base { - PkeArray_Count_T next = 0; - PkeArray_Count_T reserved = 0; - struct pk_membucket *bkt; -}; - -template<typename D> -struct PkeArray : PkeArray_Base { - using PkeArray_Base::next; - using PkeArray_Base::reserved; - using PkeArray_Base::bkt; - D *data = nullptr; -}; - -template<typename D> -void PkeArray_HardReset(PkeArray_Base *arrIn) { - auto *arr = static_cast<PkeArray<D> *>(arrIn); - arr->next = 0; - arr->reserved = 0; - arr->data = CAFE_BABE(D); -} - -inline void PkeArray_SoftReset(PkeArray_Base *arrIn) { - arrIn->next = 0; -} - -template<typename D> -inline void PkeArray_Add(PkeArray_Base *arrIn, const D &val) { - auto *arr = static_cast<PkeArray<D> *>(arrIn); - if (arr->reserved == arr->next) { - long originalCount = arr->reserved; - long diff = 0; - if (arr->reserved == 0) { - diff = 16; - arr->reserved = 16; - } else { - arr->reserved *= 2.5; - diff = arr->reserved - originalCount; - } - auto *newData = pk_new<D>(arr->reserved, arr->bkt); - 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)) { - 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, arr->bkt); - } - arr->data = newData; - } - 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 D2, typename F = bool(const D&, const D2&)> -inline int64_t PkeArray_FindFirstIndex(PkeArray_Base *arrIn, F fn, const D2 &d2) { - auto *arr = static_cast<PkeArray<D> *>(arrIn); - for (int64_t i = 0; i < arr->next; ++i) { - if (fn(arr->data[i], d2)) { - return i; - } - } - return -1; -} - -#endif /* PKE_ARRAY_HPP */ |
