12#include "Containers/Array.h"
21#include <initializer_list>
23#if UE_BUILD_SHIPPING || UE_BUILD_TEST
24 #define TSPARSEARRAY_RANGED_FOR_CHECKS 0
26 #define TSPARSEARRAY_RANGED_FOR_CHECKS 1
37template<
typename ElementType,
typename Allocator = FDefaultSparseArrayAllocator >
45template<
typename ElementType>
63template<
size_t SizeOfElementType,
size_t AlignOfElementType,
typename Allocator>
107 Result.Index =
Index;
151 LowestFreeIndexSearchStart =
Index + 1;
162 if (DataPtr[
Index].NextFreeIndex >= 0)
167 if (DataPtr[
Index].PrevFreeIndex >= 0)
185 Result.Index =
Index;
186 Result.Pointer = &DataPtr[Result.Index].
ElementData;
276 if (NextFreeIndex != -1)
280 if (PrevFreeIndex != -1)
394 if (PrevFreeIndex != -1)
402 if (NextFreeIndex != -1)
420 bool bResult =
false;
425 int32 TargetIndex = EndIndex - NumFree;
512template <
typename AllocatorType,
typename InDerivedType =
void>
528 template <
typename,
typename>
567 new(Allocation) ElementType(Element);
568 return Allocation.
Index;
575 new(Allocation) ElementType(
MoveTemp(Element));
576 return Allocation.
Index;
592 return Allocation.
Index;
608 return Allocation.
Index;
629 ((ElementType&)
Elem->ElementData).~ElementType();
636 return Allocation.
Index;
652 if constexpr (!std::is_trivially_destructible_v<ElementType>)
669 if constexpr (!std::is_trivially_destructible_v<ElementType>)
685 if constexpr (!std::is_trivially_destructible_v<ElementType>)
725 template<
typename PREDICATE_CLASS>
745 template<
typename PREDICATE_CLASS>
772 template <
typename Predicate>
779 return It.GetIndex();
846 if ((*
this)[ElementIndex] !=
B[ElementIndex])
862 return !(*
this ==
B);
919 FElementOrFreeListLink* DestData = ( FElementOrFreeListLink*)
Data.
GetData();
920 const FElementOrFreeListLink* SrcData = (
const FElementOrFreeListLink*)
InCopy.Data.GetData();
923 if constexpr (!std::is_trivially_copy_constructible_v<ElementType>)
958 for (
const ElementType& Element :
InList)
966 template <
typename SparseArrayType>
970 if constexpr (!std::is_trivially_destructible_v<ElementType>)
972 ToArray.DestroyElements();
978 ToArray.FirstFreeIndex =
FromArray.FirstFreeIndex;
979 ToArray.NumFreeIndices =
FromArray.NumFreeIndices;
986 DestroyElements(0,
Data.
Num());
992 FElementOrFreeListLink* DataPtr = (FElementOrFreeListLink*)
Data.
GetData();
997 ((ElementType&)DataPtr[i].ElementData).~ElementType();
1008 return *(ElementType*)&((FElementOrFreeListLink*)
Data.
GetData())[
Index].ElementData;
1014 return *(ElementType*)&((FElementOrFreeListLink*)
Data.
GetData())[
Index].ElementData;
1044 template<
bool bConst>
1051 typedef std::conditional_t<bConst,const TSparseArray,TSparseArray> ArrayType;
1052 typedef std::conditional_t<bConst,const ElementType,ElementType> ItElementType;
1061 inline TBaseIterator& operator++()
1070 return BitArrayIt.GetIndex();
1075 return BitArrayIt ==
Rhs.BitArrayIt && &
Array == &
Rhs.Array;
1079 return BitArrayIt !=
Rhs.BitArrayIt || &
Array != &
Rhs.Array;
1085 return !!BitArrayIt;
1091 return !(
bool)*
this;
1096 return Array[GetIndex()];
1100 return &
Array[GetIndex()];
1109 BitArrayItType BitArrayIt;
1131 this->
Array.RemoveAt(this->GetIndex());
1150 #if TSPARSEARRAY_RANGED_FOR_CHECKS
1167 ensureMsgf(this->
Array.Num() == InitialNum,
TEXT(
"Container has changed during ranged-for iteration!"));
1190 ensureMsgf(this->
Array.Num() == InitialNum,
TEXT(
"Container has changed during ranged-for iteration!"));
1225 template<
typename SubsetAllocator = FDefaultBitArrayAllocator>
1242 return BitArrayIt.GetIndex();
1248 return !!BitArrayIt;
1253 return !(
bool)*
this;
1288 this->
Add(OtherArray[Idx]);
1298 template <
typename PREDICATE_CLASS>
1299 class FElementCompareClass
1309 [[
nodiscard]]
bool operator()(
const FElementOrFreeListLink&
A,
const FElementOrFreeListLink&
B )
const
1311 return Predicate(*(ElementType*)&
A.ElementData,*(ElementType*)&
B.ElementData);
1331 if (NumElements > 0)
1335 for (
int32 i = 0; i < NumElements; ++i)
1337 const FElementOrFreeListLink&
Elem = ((
const FElementOrFreeListLink*)this->
Data.
GetData())[i];
1348 ArrayWriter.WritePaddingToSize(StartOffset +
sizeof(FElementOrFreeListLink));
1380 const FElementOrFreeListLink&
Elem = ((
const FElementOrFreeListLink*)
this ->
Data.
GetData())[i];
1381 FElementOrFreeListLink&
DstElem = (( FElementOrFreeListLink*)
DstObject->Data.GetData())[i];
1415 template<
typename ElementType,
typename Allocator>
1418 Object.WriteMemoryImage(Writer);
1421 template<
typename ElementType,
typename Allocator>
1428 template<
typename ElementType,
typename Allocator>
1463template <
typename AllocatorType,
typename InDerivedType>
1472 Result.Alignment = FMath::Max(ElementAlignment, (
int32)
alignof(FFreeListLink));
1473 Result.Size = FMath::Max(ElementSize, (
int32)
sizeof (FFreeListLink));
1479 : FirstFreeIndex(-1)
1509 return AllocationFlags[
Index];
1514 return Data.
Num() == NumFreeIndices;
1519 return Data.
Num() - NumFreeIndices;
1541 return NumFreeIndices == 0;
1560 FirstFreeIndex =
Other.FirstFreeIndex;
Other.FirstFreeIndex = 0;
1561 NumFreeIndices =
Other.NumFreeIndices;
Other.NumFreeIndices = 0;
1568 FirstFreeIndex = -1;
1570 AllocationFlags.
Empty(Slack);
1584 Index = FirstFreeIndex;
1585 FirstFreeIndex = GetFreeListLink(FirstFreeIndex,
Layout)->NextFreeIndex;
1589 GetFreeListLink(FirstFreeIndex,
Layout)->PrevFreeIndex = -1;
1596 AllocationFlags.
Add(
false);
1599 AllocationFlags[
Index] =
true;
1614 GetFreeListLink(FirstFreeIndex,
Layout)->PrevFreeIndex =
Index;
1618 IndexData->PrevFreeIndex = -1;
1619 IndexData->NextFreeIndex = NumFreeIndices > 0 ? FirstFreeIndex :
INDEX_NONE;
1620 FirstFreeIndex =
Index;
1622 AllocationFlags[
Index] =
false;
1629 TScriptArray <typename AllocatorType::ElementAllocator> Data;
1631 int32 FirstFreeIndex = -1;
1632 int32 NumFreeIndices = 0;
1635 static void CheckConstraints()
1641 static_assert(
sizeof (
ScriptType) ==
sizeof (RealType),
"TScriptSparseArray's size doesn't match TSparseArray");
1642 static_assert(
alignof(
ScriptType) ==
alignof(RealType),
"TScriptSparseArray's alignment doesn't match TSparseArray");
1646 static_assert(
sizeof(
DeclVal<ScriptType>().AllocationFlags) ==
sizeof(
DeclVal<RealType>().AllocationFlags),
"TScriptSparseArray's AllocationFlags member size does not match TSparseArray's");
1647 static_assert(
sizeof(
DeclVal<ScriptType>().FirstFreeIndex) ==
sizeof(
DeclVal<RealType>().FirstFreeIndex),
"TScriptSparseArray's FirstFreeIndex member size does not match TSparseArray's");
1648 static_assert(
sizeof(
DeclVal<ScriptType>().NumFreeIndices) ==
sizeof(
DeclVal<RealType>().NumFreeIndices),
"TScriptSparseArray's NumFreeIndices member size does not match TSparseArray's");
1652 static_assert(
STRUCT_OFFSET(
ScriptType, AllocationFlags) ==
STRUCT_OFFSET(RealType, AllocationFlags),
"TScriptSparseArray's AllocationFlags member offset does not match TSparseArray's");
1653 static_assert(
STRUCT_OFFSET(
ScriptType, FirstFreeIndex) ==
STRUCT_OFFSET(RealType, FirstFreeIndex),
"TScriptSparseArray's FirstFreeIndex member offset does not match TSparseArray's");
1654 static_assert(
STRUCT_OFFSET(
ScriptType, NumFreeIndices) ==
STRUCT_OFFSET(RealType, NumFreeIndices),
"TScriptSparseArray's NumFreeIndices member offset does not match TSparseArray's");
1657 static_assert(
STRUCT_OFFSET(ScriptType::FFreeListLink, PrevFreeIndex) ==
STRUCT_OFFSET(RealType::FElementOrFreeListLink, PrevFreeIndex),
"TScriptSparseArray's FFreeListLink's PrevFreeIndex member offset does not match TSparseArray's");
1658 static_assert(
STRUCT_OFFSET(ScriptType::FFreeListLink, NextFreeIndex) ==
STRUCT_OFFSET(RealType::FElementOrFreeListLink, NextFreeIndex),
"TScriptSparseArray's FFreeListLink's NextFreeIndex member offset does not match TSparseArray's");
1661 struct FFreeListLink
1664 int32 PrevFreeIndex;
1667 int32 NextFreeIndex;
1683template <
typename AllocatorType,
typename InDerivedType>
1711 return Allocation.Pointer;
1718template<
typename ElementType,
typename Allocator>
1730 Ar << *::new(
Array.AddUninitialized())ElementType;
1747template<
typename ElementType,
typename Allocator>
1777#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define verify(expr)
Definition AssertionMacros.h:319
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_STATIC_ASSERT_WARN(bExpression, Message)
Definition CoreMiscDefines.h:431
EConstEval
Definition CoreMiscDefines.h:161
@ ConstEval
Definition CoreMiscDefines.h:161
AUTORTFM_INFER UE_FORCEINLINE_HINT constexpr auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(((FuncType &&) Func)((ArgTypes &&) Args...))
Definition Invoke.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define DECLARE_TEMPLATE_INTRINSIC_TYPE_LAYOUT(TemplatePrefix, T)
Definition MemoryLayout.h:661
const bool
Definition NetworkReplayStreaming.h:178
FArchive & operator<<(FArchive &Ar, TSparseArray< ElementType, Allocator > &Array)
Definition SparseArray.h:1719
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTempIfPossible(T &&Obj) noexcept
Definition UnrealTemplate.h:538
void Move(T &A, typename TMoveSupportTraits< T >::Copy B)
Definition UnrealTemplate.h:24
UE_REWRITE constexpr void Exchange(T &A, T &B)
Definition UnrealTemplate.h:627
#define STRUCT_OFFSET(struc, member)
Definition UnrealTemplate.h:218
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 Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_FORCEINLINE_HINT bool IsCriticalError() const
Definition Archive.h:373
virtual void CountBytes(SIZE_T InNum, SIZE_T InMax)
Definition Archive.h:125
Definition MemoryImageWriter.h:14
CORE_API uint32 WriteBytes(const void *Data, uint32 Size)
Definition MemoryImage.cpp:2143
CORE_API uint32 WriteNullPointer()
Definition MemoryImage.cpp:2148
CORE_API uint32 WriteAlignment(uint32 Alignment)
Definition MemoryImage.cpp:2133
bool Is32BitTarget() const
Definition MemoryImageWriter.h:26
CORE_API FMemoryImageWriter WritePointer(const FTypeLayoutDesc &StaticTypeDesc, const FTypeLayoutDesc &DerivedTypeDesc, uint32 *OutOffsetToBase=nullptr)
Definition MemoryImage.cpp:2153
Definition MemoryImageWriter.h:78
Definition BitArray.h:281
Definition SecureHash.h:314
Definition SparseArray.h:1690
Definition StructuredArchiveSlots.h:172
Definition StructuredArchiveSlots.h:52
UE_API FStructuredArchiveArray EnterArray(int32 &Num)
Definition StructuredArchiveSlots.h:257
Definition ArrayView.h:139
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void RemoveAt(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2083
UE_FORCEINLINE_HINT void CheckAddress(const ElementType *Addr) const
Definition Array.h:1955
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
UE_REWRITE SizeType Max() const
Definition Array.h:1161
UE_NODEBUG void CountBytes(FArchive &Ar) const
Definition Array.h:1649
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
UE_FORCEINLINE_HINT void Shrink()
Definition Array.h:1278
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition BitArray.h:350
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
int32 Find(bool bValue) const
Definition BitArray.h:1084
int32 FindAndSetFirstZeroBit(int32 StartIndex=0)
Definition BitArray.h:1258
int32 FindLast(bool bValue) const
Definition BitArray.h:1213
uint32 GetAllocatedSize(void) const
Definition BitArray.h:1062
void Reset()
Definition BitArray.h:817
void WriteMemoryImage(FMemoryImageWriter &Writer) const
Definition BitArray.h:1908
UE_FORCEINLINE_HINT void Init(bool bValue, int32 InNumBits)
Definition BitArray.h:828
void CountBytes(FArchive &Ar) const
Definition BitArray.h:1068
void RemoveAt(int32 BaseIndex, int32 NumBitsToRemove=1)
Definition BitArray.h:1004
Definition BitArray.h:2072
Definition BitArray.h:1944
void Empty(int32 Slack, int32 NumBytesPerElement, uint32 AlignmentOfElement)
Definition ScriptArray.h:142
int32 Add(int32 Count, int32 NumBytesPerElement, uint32 AlignmentOfElement)
Definition ScriptArray.h:82
void MoveAssign(TScriptArray &Other, int32 NumBytesPerElement, uint32 AlignmentOfElement)
Definition ScriptArray.h:131
FORCEINLINE int32 Num() const
Definition ScriptArray.h:40
FORCEINLINE int32 Max() const
Definition ScriptArray.h:51
FORCEINLINE int32 NumUnchecked() const
Definition ScriptArray.h:46
FORCEINLINE void * GetData()
Definition ScriptArray.h:24
Definition BitArray.h:2216
void MoveAssign(DerivedType &Other)
Definition BitArray.h:2248
int32 Add(const bool Value)
Definition BitArray.h:2270
void Empty(int32 Slack=0)
Definition BitArray.h:2257
bool IsValidIndex(int32 Index) const
Definition BitArray.h:2231
Definition SparseArray.h:1465
void operator=(const TScriptSparseArray &)
Definition SparseArray.h:1680
static constexpr FScriptSparseArrayLayout GetScriptLayout(int32 ElementSize, int32 ElementAlignment)
Definition SparseArray.h:1469
int32 Num() const
Definition SparseArray.h:1517
int32 AddUninitialized(const FScriptSparseArrayLayout &Layout)
Definition SparseArray.h:1578
void * GetData(int32 Index, const FScriptSparseArrayLayout &Layout)
Definition SparseArray.h:1544
int32 NumUnchecked() const
Definition SparseArray.h:1528
const void * GetData(int32 Index, const FScriptSparseArrayLayout &Layout) const
Definition SparseArray.h:1549
bool IsCompact() const
Definition SparseArray.h:1539
int32 GetMaxIndex() const
Definition SparseArray.h:1534
TScriptSparseArray(FIntrusiveUnsetOptionalState Tag)
Definition SparseArray.h:1490
static constexpr bool bHasIntrusiveUnsetOptionalState
Definition SparseArray.h:1487
TScriptSparseArray(const TScriptSparseArray &)
Definition SparseArray.h:1679
void RemoveAtUninitialized(const FScriptSparseArrayLayout &Layout, int32 Index, int32 Count=1)
Definition SparseArray.h:1605
void MoveAssign(DerivedType &Other, const FScriptSparseArrayLayout &Layout)
Definition SparseArray.h:1554
bool IsValidIndex(int32 Index) const
Definition SparseArray.h:1502
bool operator==(FIntrusiveUnsetOptionalState Tag) const
Definition SparseArray.h:1494
bool IsEmpty() const
Definition SparseArray.h:1512
bool IsAllocated(int32 Index) const
Definition SparseArray.h:1507
int32 Max() const
Definition SparseArray.h:1523
void Empty(int32 Slack, const FScriptSparseArrayLayout &Layout)
Definition SparseArray.h:1564
TScriptSparseArray()
Definition SparseArray.h:1478
Definition SparseArray.h:65
constexpr TSparseArrayBase()
Definition SparseArray.h:73
int32 FirstFreeIndex
Definition SparseArray.h:506
void SortFreeList()
Definition SparseArray.h:322
FSparseArrayAllocationInfo AllocateIndex(int32 Index)
Definition SparseArray.h:96
int32 Num() const
Definition SparseArray.h:470
AllocationBitArrayType AllocationFlags
Definition SparseArray.h:503
TSparseArrayBase(const TSparseArrayBase &InCopy)
Definition SparseArray.h:89
bool Compact()
Definition SparseArray.h:412
int32 NumFreeIndices
Definition SparseArray.h:509
int32 Max() const
Definition SparseArray.h:476
consteval TSparseArrayBase(EConstEval)
Definition SparseArray.h:80
FSparseArrayAllocationInfo AddUninitializedAtLowestFreeIndex(int32 &LowestFreeIndexSearchStart)
Definition SparseArray.h:143
void RemoveAtUninitialized(int32 Index, int32 Count=1)
Definition SparseArray.h:191
FSparseArrayAllocationInfo AddUninitialized()
Definition SparseArray.h:117
TArray< FElementOrFreeListLink, typename Allocator::ElementAllocator > DataType
Definition SparseArray.h:499
DataType Data
Definition SparseArray.h:500
bool IsValidIndex(int32 Index) const
Definition SparseArray.h:481
TSparseArrayBase(FIntrusiveUnsetOptionalState Tag)
Definition SparseArray.h:67
FSparseArrayAllocationInfo InsertUninitialized(int32 Index)
Definition SparseArray.h:356
bool IsAllocated(int32 Index) const
Definition SparseArray.h:486
TSparseArrayElementOrFreeListLink< TAlignedBytes< SizeOfElementType, AlignOfElementType > > FElementOrFreeListLink
Definition SparseArray.h:497
TBitArray< typename Allocator::BitArrayAllocator > AllocationBitArrayType
Definition SparseArray.h:502
void Shrink()
Definition SparseArray.h:256
void Reserve(int32 ExpectedNumElements)
Definition SparseArray.h:219
int32 GetMaxIndex() const
Definition SparseArray.h:460
bool IsEmpty() const
Definition SparseArray.h:465
Definition SparseArray.h:1137
TConstIterator(const TSparseArray &InArray, const typename TBaseIterator< true >::BitArrayItType &InBitArrayIt)
Definition SparseArray.h:1144
TConstIterator(const TSparseArray &InArray)
Definition SparseArray.h:1139
Definition SparseArray.h:1227
TConstSubsetIterator(const TSparseArray &InArray, const TBitArray< SubsetAllocator > &InBitArray)
Definition SparseArray.h:1229
UE_FORCEINLINE_HINT const FRelativeBitReference & GetRelativeBitReference() const
Definition SparseArray.h:1264
UE_FORCEINLINE_HINT bool operator!() const
Definition SparseArray.h:1251
TConstSubsetIterator & operator++()
Definition SparseArray.h:1234
UE_FORCEINLINE_HINT const ElementType & operator*() const
Definition SparseArray.h:1256
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition SparseArray.h:1240
UE_FORCEINLINE_HINT const ElementType * operator->() const
Definition SparseArray.h:1260
Definition SparseArray.h:1116
void RemoveCurrent()
Definition SparseArray.h:1129
TIterator(TSparseArray &InArray, const typename TBaseIterator< false >::BitArrayItType &InBitArrayIt)
Definition SparseArray.h:1123
TIterator(TSparseArray &InArray)
Definition SparseArray.h:1118
Definition SparseArray.h:1175
TRangedForConstIterator(const TSparseArray &InArray, const typename TBaseIterator< true >::BitArrayItType &InBitArrayIt)
Definition SparseArray.h:1177
bool operator!=(const TRangedForConstIterator &Rhs) const
Definition SparseArray.h:1183
Definition SparseArray.h:1152
TRangedForIterator(TSparseArray &InArray, const typename TBaseIterator< false >::BitArrayItType &InBitArrayIt)
Definition SparseArray.h:1154
bool operator!=(const TRangedForIterator &Rhs) const
Definition SparseArray.h:1160
Definition SparseArray.h:524
constexpr TSparseArray()=default
static constexpr bool bHasIntrusiveUnsetOptionalState
Definition SparseArray.h:544
void RemoveAt(int32 Index, int32 Count=1)
Definition SparseArray.h:650
SIZE_T GetAllocatedSize(void) const
Definition SparseArray.h:808
UE_FORCEINLINE_HINT TRangedForConstIterator end() const
Definition SparseArray.h:1221
void StableSort()
Definition SparseArray.h:759
void StableSort(const PREDICATE_CLASS &Predicate)
Definition SparseArray.h:746
int32 Add(const ElementType &Element)
Definition SparseArray.h:564
TSparseArray & operator=(std::initializer_list< ElementType > InList)
Definition SparseArray.h:954
int32 EmplaceAt(int32 Index, ArgsType &&... Args)
Definition SparseArray.h:619
TSparseArray(const TSparseArray &InCopy)
Definition SparseArray.h:880
UE_FORCEINLINE_HINT TRangedForIterator begin()
Definition SparseArray.h:1218
bool operator==(const TSparseArray &B) const
Definition SparseArray.h:829
void CountBytes(FArchive &Ar) const
Definition SparseArray.h:814
TIterator CreateIterator()
Definition SparseArray.h:1202
TSparseArray(FIntrusiveUnsetOptionalState Tag)
Definition SparseArray.h:547
bool IsCompact() const
Definition SparseArray.h:820
int32 PointerToIndex(const ElementType *Ptr) const
Definition SparseArray.h:1016
static void AppendHash(const FPlatformTypeLayoutParameters &LayoutParams, FSHA1 &Hasher)
Definition SparseArray.h:1404
TSparseArray & operator+=(const TArray< ElementType > &OtherArray)
Definition SparseArray.h:1283
ElementType & operator[](int32 Index)
Definition SparseArray.h:1004
TSparseArray & operator=(const TSparseArray &InCopy)
Definition SparseArray.h:904
void WriteMemoryImage(FMemoryImageWriter &Writer) const
Definition SparseArray.h:1324
TSparseArray(TSparseArray &&InCopy)
Definition SparseArray.h:874
void Reset()
Definition SparseArray.h:682
TSparseArray(std::initializer_list< ElementType > InList)
Definition SparseArray.h:887
UE_FORCEINLINE_HINT void CheckAddress(const ElementType *Addr) const
Definition SparseArray.h:1036
int32 Emplace(ArgsType &&... Args)
Definition SparseArray.h:588
const ElementType & operator[](int32 Index) const
Definition SparseArray.h:1010
~TSparseArray()
Definition SparseArray.h:533
void Sort()
Definition SparseArray.h:739
consteval TSparseArray(EConstEval)
Definition SparseArray.h:868
int32 Add(ElementType &&Element)
Definition SparseArray.h:572
int32 EmplaceAtLowestFreeIndex(int32 &LowestFreeIndexSearchStart, ArgsType &&... Args)
Definition SparseArray.h:604
TSparseArray & operator+=(const TSparseArray &OtherArray)
Definition SparseArray.h:1274
UE_FORCEINLINE_HINT TRangedForConstIterator begin() const
Definition SparseArray.h:1219
bool operator==(FIntrusiveUnsetOptionalState Tag) const
Definition SparseArray.h:552
TConstIterator CreateConstIterator() const
Definition SparseArray.h:1208
TSparseArray & operator=(TSparseArray &&InCopy)
Definition SparseArray.h:894
int32 IndexOfByPredicate(Predicate Pred) const
Definition SparseArray.h:773
bool operator!=(const TSparseArray &B) const
Definition SparseArray.h:860
void CopyUnfrozen(const FMemoryUnfreezeContent &Context, void *Dst) const
Definition SparseArray.h:1369
void Sort(const PREDICATE_CLASS &Predicate)
Definition SparseArray.h:726
bool CompactStable()
Definition SparseArray.h:703
void Empty(int32 ExpectedNumElements=0)
Definition SparseArray.h:666
void Insert(int32 Index, typename TTypeTraits< ElementType >::ConstInitType Element)
Definition SparseArray.h:644
UE_FORCEINLINE_HINT TRangedForIterator end()
Definition SparseArray.h:1220
int32 FindArbitraryElementIndex() const
Definition SparseArray.h:791
CORE_API FArchive & GetUnderlyingArchive() const
Definition StructuredArchiveSlots.cpp:7
UE_REWRITE void Sort(RangeType &&Range)
Definition Sort.h:16
UE_REWRITE void StableSort(RangeType &&Range)
Definition StableSort.h:125
UE_NODEBUG void IntrinsicWriteMemoryImage(FMemoryImageWriter &Writer, const TArray< T, AllocatorType > &Object, const FTypeLayoutDesc &)
Definition Array.h:3957
CORE_API uint32 DefaultAppendHash(const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FSHA1 &Hasher)
Definition MemoryImage.cpp:575
CORE_API uint32 AppendHash(const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FSHA1 &Hasher)
Definition MemoryImage.cpp:864
UE_NODEBUG uint32 IntrinsicUnfrozenCopy(const FMemoryUnfreezeContent &Context, const TArray< T, AllocatorType > &Object, void *OutDst)
Definition Array.h:3963
UE_NODEBUG uint32 IntrinsicAppendHash(const TArray< T, AllocatorType > *DummyObject, const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FSHA1 &Hasher)
Definition Array.h:3970
FVector operator*(const FSquareMatrix3 &InMatrix, const FVector &InVector)
Definition ARBlueprintLibrary.cpp:650
bool operator!=(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:506
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
FORCEINLINE UE_STRING_CLASS RhsType && Rhs
Definition String.cpp.inl:718
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition IntrusiveUnsetOptionalState.h:71
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition SparseArray.h:1455
int32 Size
Definition SparseArray.h:1458
int32 Alignment
Definition SparseArray.h:1457
Definition SparseArray.h:31
int32 Index
Definition SparseArray.h:32
void * Pointer
Definition SparseArray.h:33
Definition MemoryLayout.h:108
Definition TypeCompatibleBytes.h:17
Definition ContainerAllocationPolicies.h:256
Definition MemoryLayout.h:626
Definition UnrealTypeTraits.h:172
TCallTraits< T >::ParamType ConstInitType
Definition UnrealTypeTraits.h:336
Definition SparseArray.h:47
int32 PrevFreeIndex
Definition SparseArray.h:54
int32 NextFreeIndex
Definition SparseArray.h:57
ElementType ElementData
Definition SparseArray.h:49