2#include "gaia/config/config.h"
4#include "gaia/core/utility.h"
5#include "gaia/mem/mem_utils.h"
10 enum class ResizePolicy : uint8_t {
29 template <
typename SizeType>
30 GAIA_NODISCARD
constexpr SizeType resize_capacity(ResizePolicy policy, SizeType cap, SizeType count)
noexcept {
31 return policy == ResizePolicy::Scale ? core::get_max(count, (SizeType)((cap * 3 + 1) / 2)) : count;
45 template <
bool SOA,
typename Array,
typename Func>
46 uint32_t retain_array(Array& arr, uint32_t& count, Func&& func) {
47 using T =
typename Array::value_type;
52 while (idxSrc < count) {
53 if (func(arr[idxSrc])) {
54 if (idxDst < idxSrc) {
55 auto* ptr = (uint8_t*)arr.data();
56 mem::move_element<T, SOA>(ptr, ptr, idxDst, idxSrc, arr.capacity(), arr.capacity());
68 core::call_dtor_n(arr.data() + idxDst, erased);