16template<
typename T, u
int32 MinSize = 16, u
int32 MaxSize = 16777216>
44 std::atomic<uint32> Size;
52template<
typename T, u
int32 MinSize, u
int32 MaxSize>
58template<
typename T, u
int32 MinSize, u
int32 MaxSize>
62 for (
uint32 BucketIndex=0;
Left; ++BucketIndex)
64 T* Elements =
reinterpret_cast<T*
>(Buckets[BucketIndex]);
66 if (!std::is_trivially_destructible_v<T>)
78template<
typename T, u
int32 MinSize, u
int32 MaxSize>
81 return *
new (AddUninitialized(OutIndex)) T(
Value);
84template<
typename T, u
int32 MinSize, u
int32 MaxSize>
88 return *
new (AddUninitialized(OutIndex)) T(
Value);
91template<
typename T, u
int32 MinSize, u
int32 MaxSize>
98template<
typename T, u
int32 MinSize, u
int32 MaxSize>
101 return GetElementAt(
Index);
104template<
typename T, u
int32 MinSize, u
int32 MaxSize>
107 return const_cast<T&
>(GetElementAt(
Index));
110template<
typename T, u
int32 MinSize, u
int32 MaxSize>
116template<
typename T, u
int32 MinSize, u
int32 MaxSize>
123 return reinterpret_cast<const T*
>(Buckets[BucketIndex])[
BucketOffset];
126template<
typename T, u
int32 MinSize, u
int32 MaxSize>
137 void*
NewPtr = FMemory::Malloc(GetBucketSize(BucketIndex) *
sizeof(T),
alignof(T));
157template<
typename T, u
int32 MinSize, u
int32 MaxSize>
160 return uint32(FPlatformMath::FloorLog2(
Index / 16 + 1));
163template<
typename T, u
int32 MinSize, u
int32 MaxSize>
166 return BucketIndex ? 16 * ((1 << BucketIndex) - 1) : 0;
169template<
typename T, u
int32 MinSize, u
int32 MaxSize>
172 return FPlatformMath::Max(
MinSize, 1u << (BucketIndex + SkipCount));
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
Definition Pow2ChunkedArray.h:18
uint32 GetBucketSize(uint32 BucketIndex) const
Definition Pow2ChunkedArray.h:170
uint32 GetBucketStart(uint32 BucketIndex) const
Definition Pow2ChunkedArray.h:164
~FPow2ChunkedArray()
Definition Pow2ChunkedArray.h:59
T & operator[](uint32 Index)
Definition Pow2ChunkedArray.h:105
const T & GetElementAt(uint32 Index) const
Definition Pow2ChunkedArray.h:117
T & Add(const T &Value)
Definition Pow2ChunkedArray.h:85
FPow2ChunkedArray()
Definition Pow2ChunkedArray.h:53
T & Add(T &&Value)
Definition Pow2ChunkedArray.h:92
@ BucketCount
Definition Pow2ChunkedArray.h:21
@ SkipCount
Definition Pow2ChunkedArray.h:20
const T & operator[](uint32 Index) const
Definition Pow2ChunkedArray.h:99
uint32 Num() const
Definition Pow2ChunkedArray.h:111
void * AddUninitialized(uint32 &OutIndex)
Definition Pow2ChunkedArray.h:127
T & Add(const T &Value, uint32 &OutIndex)
Definition Pow2ChunkedArray.h:79
uint32 GetBucketIndex(uint32 Index) const
Definition Pow2ChunkedArray.h:158
U16 Index
Definition radfft.cpp:71
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119