diff options
| -rw-r--r-- | src/array.hpp | 10 | ||||
| -rw-r--r-- | src/dynamic-array.hpp | 8 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/array.hpp b/src/array.hpp index 1fd6266..db8c564 100644 --- a/src/array.hpp +++ b/src/array.hpp @@ -50,5 +50,15 @@ inline void PkeArray_Add(PkeArray_Base *arrIn, const D &val, MemBucket *bkt = nu arr->data[arr->next++] = val; } +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); + for (uint32_t i = 0; i < arr->next; ++i) { + if (fn(arr->data[i])) { + return i; + } + } + return -1; +} #endif /* PKE_ARRAY_HPP */ diff --git a/src/dynamic-array.hpp b/src/dynamic-array.hpp index 876f71d..bcc0d43 100644 --- a/src/dynamic-array.hpp +++ b/src/dynamic-array.hpp @@ -32,6 +32,7 @@ struct DynArray: DynArrayBase { T *GetPtr(); const int64_t Count(); bool Has(const T &val); + int64_t FindFirstIndex(bool fn(const T&)); T& Push(); void Push(const T &val); T Pop(); @@ -135,6 +136,13 @@ template <typename T> inline bool DynArray<T>::Has(const T &val) { return false; } +template <typename T> inline int64_t DynArray<T>::FindFirstIndex(bool Fn(const T&)) { + for (long i = 0; i < this->elementCount; ++i) { + if (Fn(*this)[i]) return i; + } + return -1; +} + template <typename T> inline T &DynArray<T>::Push() { if (this->elementCount + 1 > this->reservedCount) { auto safeReserveCount = this->reservedCount < 2 ? 2 : this->reservedCount; |
