11 template<
typename ElementType, u
int32 IndexW
idth, u
int32 GenerationW
idth>
14 template<
typename ElementType, u
int32 IndexW
idth, u
int32 GenerationW
idth>
17 template<
typename ElementType, u
int32 IndexW
idth, u
int32 GenerationW
idth>
20 template<u
int32 IndexW
idth, u
int32 GenerationW
idth>
91 template<
typename ElementType, u
int32 IndexW
idth, u
int32 GenerationW
idth>
118 template<
typename ElementType, u
int32 IndexW
idth, u
int32 GenerationW
idth>
150 template<
typename ElementType, u
int32 IndexW
idth = 24, u
int32 GenerationW
idth = 8>
202 NumData = Capacity = InitialNum;
212 Validity.
Add(
false, NumData);
229 const FHandleEntry& Entry = HandleEntries[
InHandle.Index];
230 return Entry.Generation ==
InHandle.Generation ? &(Data[
InHandle.Index]) :
nullptr;
249 const FHandleEntry& Entry = HandleEntries[
InHandle.Index];
250 return Entry.Generation ==
InHandle.Generation ? &(Data[
InHandle.Index]) :
nullptr;
285 FHandleEntry&
ReusedEntry = HandleEntries[FreeList];
286 Validity[FreeList] =
true;
293 if(NumData == Capacity)
317 FHandleEntry& Entry = HandleEntries[
InHandle.Index];
319 if(Entry.Generation !=
InHandle.Generation)
322 ensureMsgf(
false,
TEXT(
"Attempting to destroy with an invalid handle."));
334 if(Entry.Generation == 0)
344 HandleEntries[
InHandle.Index].NextFree = FreeList;
371 return Num() - NumActive;
399 template<
bool bConst>
402 typedef std::conditional_t<bConst, const THandleArray, THandleArray>
ArrayType;
403 typedef std::conditional_t<bConst, const ElementType, ElementType>
ItElementType;
420 return It == Rhs.It && &
Array == &Rhs.Array;
425 return It != Rhs.It || &
Array != &Rhs.Array;
503 HandleEntries.
Reset();
510 Capacity =
Other.Capacity;
511 HandleEntries =
Other.HandleEntries;
512 Validity =
Other.Validity;
513 FreeList =
Other.FreeList;
519 NumData =
Other.NumData;
520 NumActive =
Other.NumActive;
536 Capacity =
Other.Capacity;
542 NumData =
Other.NumData;
543 NumActive =
Other.NumActive;
549 FreeList =
Other.FreeList;
556 Other.Data =
nullptr;
597 template<
typename ElementType, u
int32 IndexW
idth = 24, u
int32 GenerationW
idth = 8>
605 using FConstHandle = TConstHandle < ElementType, IndexWidth, GenerationWidth>;
650 FHandleEntry& Entry = HandleEntries[
InHandle.Index];
651 return (Entry.Generation ==
InHandle.Generation && Validity[
InHandle.Index]) ? Entry.Ptr :
nullptr;
656 const FHandleEntry& Entry = HandleEntries[
InHandle.Index];
657 return (Entry.Generation ==
InHandle.Generation && Validity[
InHandle.Index]) ? Entry.Ptr :
nullptr;
683 FHandleEntry&
ReusedEntry = HandleEntries[FreeList];
685 Validity[FreeList] =
true;
694 FHandleEntry& NewEntry = HandleEntries.
Last();
696 NewIndex = HandleEntries.
Num() - 1;
707 FHandleEntry& Entry = HandleEntries[
InHandle.Index];
709 if(Entry.Generation !=
InHandle.Generation)
712 ensureMsgf(
false,
TEXT(
"Attempting to destroy with an invalid handle."));
729 if(Entry.Generation == 0)
739 HandleEntries[
InHandle.Index].NextFree = FreeList;
751 return HandleEntries.
Num();
778 const int32 NumEntries =
Array.HandleEntries.Num();
788 FHandleEntry& Entry =
Array.HandleEntries[
Index];
789 Entry.Ptr =
new ElementType();
802 FHandleEntry& Entry =
Array.HandleEntries[
Index];
816 FreeList =
Other.FreeList;
817 NumActive =
Other.NumActive;
818 Validity =
Other.Validity;
821 for(
const FHandleEntry& Entry :
Other.HandleEntries)
824 FHandleEntry& NewEntry = HandleEntries.
Last();
825 NewEntry.NextFree = Entry.NextFree;
826 NewEntry.Generation = Entry.Generation;
827 NewEntry.Ptr = Entry.Ptr ?
new ElementType(*Entry.Ptr) : nullptr;
831 void MoveFrom(THandleHeap<ElementType, IndexWidth, GenerationWidth>&
Other)
835 FreeList =
Other.FreeList;
836 NumActive =
Other.NumActive;
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define CHAOS_ENSURE_MSG(InExpression, InFormat,...)
Definition ChaosCheck.h:23
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FORCEINLINE constexpr void DestructItem(ElementType *Element)
Definition MemoryOps.h:56
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
Definition ChaosArchive.h:167
TConstHandle(const THandle< ElementType, IndexWidth, GenerationWidth > &InNonConstHandle)
Definition Handles.h:132
friend FArchive & operator<<(FArchive &Ar, TConstHandle< ElementType, IndexWidth, GenerationWidth > &InHandle)
Definition Handles.h:143
TConstHandle(uint32 InIndex, uint32 InGeneration)
Definition Handles.h:126
friend bool operator==(const TConstHandle< ElementType, IndexWidth, GenerationWidth > &A, const TConstHandle< ElementType, IndexWidth, GenerationWidth > &B)
Definition Handles.h:138
static constexpr uint32 InvalidFreeIndex
Definition Handles.h:162
TRangedForConstIterator begin() const
Definition Handles.h:465
uint32 Num() const
Definition Handles.h:354
void Destroy(FHandle InHandle)
Definition Handles.h:312
~THandleArray()
Definition Handles.h:216
FHandle GetHandle(uint32 InIndex) const
Definition Handles.h:261
TRangedForIterator end()
Definition Handles.h:470
TRangedForConstIterator end() const
Definition Handles.h:475
TRangedForIterator begin()
Definition Handles.h:460
uint32 GetNumActive() const
Definition Handles.h:364
TIterator< true > TRangedForConstIterator
Definition Handles.h:458
THandleArray(int32 InitialNum)
Definition Handles.h:192
uint32 GetCapacity() const
Definition Handles.h:359
TConstHandle< ElementType, IndexWidth, GenerationWidth > FConstHandle
Definition Handles.h:156
TIterator< false > TRangedForIterator
Definition Handles.h:457
THandleArray(const THandleArray< ElementType, IndexWidth, GenerationWidth > &Other)
Definition Handles.h:164
THandleArray()
Definition Handles.h:188
THandleArray(THandleArray< ElementType, IndexWidth, GenerationWidth > &&Other)
Definition Handles.h:170
FConstHandle GetConstHandle(uint32 InIndex) const
Definition Handles.h:272
static constexpr uint32 ElementAlign
Definition Handles.h:158
friend FChaosArchive & operator<<(FChaosArchive &Ar, THandleArray &Array)
Definition Handles.h:374
static constexpr SIZE_T ElementSize
Definition Handles.h:159
THandle< ElementType, IndexWidth, GenerationWidth > FHandle
Definition Handles.h:155
static constexpr uint32 ElementGrowth
Definition Handles.h:160
FHandle Create(ConstructionArgs &&... InConstructionArgs)
Definition Handles.h:278
ElementType * Get(FHandle InHandle) const
Definition Handles.h:221
const ElementType * Get(FConstHandle InHandle) const
Definition Handles.h:241
THandleArray & operator=(const THandleArray< ElementType, IndexWidth, GenerationWidth > &Other)
Definition Handles.h:176
uint32 GetNumFree() const
Definition Handles.h:369
uint32 Generation
Definition Handles.h:88
uint32 GetIndex() const
Definition Handles.h:61
THandleData(uint32 InIndex, uint32 InGeneration)
Definition Handles.h:34
uint32 Index
Definition Handles.h:87
bool IsValid() const
Definition Handles.h:49
uint32 AsUint() const
Definition Handles.h:55
THandleData()
Definition Handles.h:27
void FromUint(uint32 InUint)
Definition Handles.h:66
friend FArchive & operator<<(FArchive &Ar, THandleData< IndexWidth, GenerationWidth > &InHandle)
Definition Handles.h:74
THandleData(uint32 FullHandle)
Definition Handles.h:42
TConstHandle< ElementType, IndexWidth, GenerationWidth > FConstHandle
Definition Handles.h:605
void Empty(bool bShrink=true)
Definition Handles.h:759
FHandle Create(ConstructionArgs... Args)
Definition Handles.h:677
const ElementType * Get(FConstHandle InHandle) const
Definition Handles.h:654
THandleHeap(const THandleHeap< ElementType, IndexWidth, GenerationWidth > &Other)
Definition Handles.h:616
friend FArchive & operator<<(FArchive &Ar, THandleHeap &Array)
Definition Handles.h:773
THandleHeap & operator=(const THandleHeap< ElementType, IndexWidth, GenerationWidth > &Other)
Definition Handles.h:627
THandleHeap(THandleHeap< ElementType, IndexWidth, GenerationWidth > &&Other)
Definition Handles.h:622
FConstHandle GetConstHandle(uint32 InIndex)
Definition Handles.h:671
THandleHeap()
Definition Handles.h:639
FHandle GetHandle(uint32 InIndex)
Definition Handles.h:660
~THandleHeap()
Definition Handles.h:643
ElementType * Get(FHandle InHandle)
Definition Handles.h:648
void Destroy(FHandle InHandle)
Definition Handles.h:703
static constexpr uint32 InvalidFreeIndex
Definition Handles.h:607
int32 GetNumActive() const
Definition Handles.h:754
THandle< ElementType, IndexWidth, GenerationWidth > FHandle
Definition Handles.h:604
THandleHeap(int32 ReserveNum)
Definition Handles.h:609
int32 Num() const
Definition Handles.h:749
THandle(uint32 InIndex, uint32 InGeneration)
Definition Handles.h:100
friend FArchive & operator<<(FArchive &Ar, THandle< ElementType, IndexWidth, GenerationWidth > &InHandle)
Definition Handles.h:111
friend bool operator==(const THandle< ElementType, IndexWidth, GenerationWidth > &A, const THandle< ElementType, IndexWidth, GenerationWidth > &B)
Definition Handles.h:106
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Last(SizeType IndexFromTheEnd=0) UE_LIFETIMEBOUND
Definition Array.h:1263
void Reset(SizeType NewSize=0)
Definition Array.h:2246
SizeType AddDefaulted()
Definition Array.h:2795
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
UE_FORCEINLINE_HINT bool IsValidIndex(int32 InIndex) const
Definition BitArray.h:1450
int32 Add(const bool Value)
Definition BitArray.h:615
void Empty(int32 ExpectedNumBits=0)
Definition BitArray.h:779
void Reset()
Definition BitArray.h:817
Definition BitArray.h:1944
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:2011
Definition SkeletalMeshComponent.h:307
U16 Index
Definition radfft.cpp:71
FORCEINLINE TIterator & operator++()
Definition Handles.h:411
FConstHandle GetConstHandle() const
Definition Handles.h:428
TConstSetBitIterator It
Definition Handles.h:454
TIterator(ArrayType &InArray, int32 InIndex)
Definition Handles.h:405
FORCEINLINE ItElementType & operator*() const
Definition Handles.h:440
FHandle GetHandle() const
Definition Handles.h:434
std::conditional_t< bConst, const ElementType, ElementType > ItElementType
Definition Handles.h:403
ArrayType & Array
Definition Handles.h:453
FORCEINLINE bool operator!=(const TIterator &Rhs) const
Definition Handles.h:423
std::conditional_t< bConst, const THandleArray, THandleArray > ArrayType
Definition Handles.h:402
FORCEINLINE bool operator==(const TIterator &Rhs) const
Definition Handles.h:418
FORCEINLINE ItElementType * operator->() const
Definition Handles.h:447
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition IsTrivial.h:15
Definition NumericLimits.h:41