24template <
typename Allocator>
40 checkf(ElementOffset == 0,
TEXT(
"The element inside the TSparseSetElement is expected to be at the start of the struct"));
62 return Elements ==
Tag;
85 return Elements.
Num();
96 return Elements.
Max();
119 Hash.MoveToEmpty(
Other.Hash);
120 HashSize =
Other.HashSize;
Other.HashSize = 0;
141 for (
int32 I = 0; I < HashSize; ++I)
198 HashSize = Allocator::GetNumberOfHashBuckets(Elements.
Num());
204 for (
int32 HashIndex = 0; HashIndex < HashSize; ++HashIndex)
221 uint32 KeyHash = GetKeyHash(Element);
222 int32 HashIndex = KeyHash & (HashSize - 1);
223 GetHashIndexRef(Element,
Layout) = KeyHash & (HashSize - 1);
226 GetHashNextIdRef(Element,
Layout) = GetTypedHash(HashIndex);
227 GetTypedHash(HashIndex) = ElementId;
240 const int32 HashIndex = KeyHash & (HashSize - 1);
242 uint8* CurrentElement =
nullptr;
245 ElementId = GetHashNextIdRef(CurrentElement,
Layout))
247 CurrentElement = (
uint8*)Elements.
GetData(ElementId.AsInteger(),
Layout.SparseArrayLayout);
250 return ElementId.AsInteger();
281 uint32 KeyHash = GetKeyHash(Element);
288 return AddNewElement(
Layout, GetKeyHash, KeyHash, ConstructFn);
293 uint32 KeyHash = GetKeyHash(Element);
311 AddNewElement(
Layout, GetKeyHash, KeyHash, ConstructFn);
332 int32 HashIndex = KeyHash & (HashSize - 1);
343 class TrackedSparseArrayAllocator
347 using ElementAllocator =
typename Allocator::SparseArrayAllocator::ElementAllocator;
348 using BitArrayAllocator =
typename Allocator::SparseArrayAllocator::BitArrayAllocator;
351 using HashAllocator =
typename Allocator::HashAllocator;
356 ElementArrayType Elements;
376 static void CheckConstraints()
382 static_assert(
sizeof (
ScriptType) ==
sizeof (RealType),
"TScriptSparseSet's size doesn't match TSparseSet");
383 static_assert(
alignof(
ScriptType) ==
alignof(RealType),
"TScriptSparseSet's alignment doesn't match TSparseSet");
403template <
typename AllocatorType>
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define STRUCT_OFFSET(struc, member)
Definition UnrealTemplate.h:218
Definition SetUtilities.h:95
static UE_FORCEINLINE_HINT FSetElementId FromInteger(int32 Integer)
Definition SetUtilities.h:121
UE_FORCEINLINE_HINT bool IsValidId() const
Definition SetUtilities.h:101
Definition StructBuilder.h:14
constexpr int32 AddMember(int32 MemberSize, int32 MemberAlignment)
Definition StructBuilder.h:30
Definition AssetRegistryState.h:50
Definition SparseArray.h:1465
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
bool IsCompact() const
Definition SparseArray.h:1539
int32 GetMaxIndex() const
Definition SparseArray.h:1534
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 IsEmpty() const
Definition SparseArray.h:1512
int32 Max() const
Definition SparseArray.h:1523
void Empty(int32 Slack, const FScriptSparseArrayLayout &Layout)
Definition SparseArray.h:1564
Definition ScriptSparseSet.h:26
static constexpr bool bHasIntrusiveUnsetOptionalState
Definition ScriptSparseSet.h:53
int32 GetMaxIndex() const
Definition ScriptSparseSet.h:99
void MoveAssign(TScriptSparseSet &Other, const FScriptSparseSetLayout &Layout)
Definition ScriptSparseSet.h:114
TScriptSparseSet(FIntrusiveUnsetOptionalState Tag)
Definition ScriptSparseSet.h:56
int32 FindIndexByHash(const void *Element, const FScriptSparseSetLayout &Layout, uint32 KeyHash, TFunctionRef< bool(const void *, const void *)> EqualityFn) const
Definition ScriptSparseSet.h:269
const void * GetData(int32 Index, const FScriptSparseSetLayout &Layout) const
Definition ScriptSparseSet.h:109
void * GetData(int32 Index, const FScriptSparseSetLayout &Layout)
Definition ScriptSparseSet.h:104
void Rehash(const FScriptSparseSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition ScriptSparseSet.h:193
int32 Num() const
Definition ScriptSparseSet.h:83
int32 NumUnchecked() const
Definition ScriptSparseSet.h:88
void Add(const void *Element, const FScriptSparseSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> EqualityFn, TFunctionRef< void(void *)> ConstructFn, TFunctionRef< void(void *)> DestructFn)
Definition ScriptSparseSet.h:291
int32 Max() const
Definition ScriptSparseSet.h:94
TScriptSparseSet()
Definition ScriptSparseSet.h:45
void Empty(int32 Slack, const FScriptSparseSetLayout &Layout)
Definition ScriptSparseSet.h:123
bool IsEmpty() const
Definition ScriptSparseSet.h:73
void CommitLastUninitialized(const FScriptSparseSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition ScriptSparseSet.h:183
static constexpr FScriptSparseSetLayout GetScriptLayout(int32 ElementSize, int32 ElementAlignment)
Definition ScriptSparseSet.h:28
int32 FindIndex(const void *Element, const FScriptSparseSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> EqualityFn) const
Definition ScriptSparseSet.h:258
int32 FindOrAdd(const void *Element, const FScriptSparseSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> EqualityFn, TFunctionRef< void(void *)> ConstructFn)
Definition ScriptSparseSet.h:279
bool IsCompact() const
Definition ScriptSparseSet.h:78
bool operator==(FIntrusiveUnsetOptionalState Tag) const
Definition ScriptSparseSet.h:60
void operator=(const TScriptSparseSet &)
Definition ScriptSparseSet.h:400
void RemoveAt(int32 Index, const FScriptSparseSetLayout &Layout)
Definition ScriptSparseSet.h:147
void RemoveAtUninitialized(const FScriptSparseSetLayout &Layout, int32 Index)
Definition ScriptSparseSet.h:178
TScriptSparseSet(const TScriptSparseSet &)
Definition ScriptSparseSet.h:399
int32 AddUninitialized(const FScriptSparseSetLayout &Layout)
Definition ScriptSparseSet.h:173
bool IsValidIndex(int32 Index) const
Definition ScriptSparseSet.h:68
void CommitAllUninitialized(const FScriptSparseSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition ScriptSparseSet.h:188
static UE_FORCEINLINE_HINT uint32 GetNumberOfHashBuckets(uint32 NumHashedElements)
Definition ContainerAllocationPolicies.h:1529
@ Element
Definition Visu.h:18
U16 Index
Definition radfft.cpp:71
Definition IntrusiveUnsetOptionalState.h:71
static constexpr UE_FORCEINLINE_HINT bool IsPowerOfTwo(T Value)
Definition UnrealMathUtility.h:519
Definition SparseArray.h:1455
Definition ScriptSparseSet.h:13
int32 HashNextIdOffset
Definition ScriptSparseSet.h:15
int32 Size
Definition ScriptSparseSet.h:17
FScriptSparseArrayLayout SparseArrayLayout
Definition ScriptSparseSet.h:19
int32 HashIndexOffset
Definition ScriptSparseSet.h:16
Definition UnrealTypeTraits.h:172