9#include "Containers/Set.h"
14#include "Templates/Sorting.h"
21#define ExchangeB(A,B) {bool T=A; A=B; B=T;}
24template <
typename KeyInitType,
typename ValueInitType>
28 std::conditional_t<std::is_rvalue_reference_v<KeyInitType>, KeyInitType&, KeyInitType>
Key;
29 std::conditional_t<std::is_rvalue_reference_v<ValueInitType>, ValueInitType&, ValueInitType>
Value;
39 template <
typename KeyType,
typename ValueType>
46 template <
typename KeyType,
typename ValueType>
55template <
typename KeyInitType>
59 std::conditional_t<std::is_rvalue_reference_v<KeyInitType>, KeyInitType&, KeyInitType>
Key;
67 template <
typename KeyType,
typename ValueType>
75template<
typename KeyType,
typename ValueType,
bool bInAllowDuplicateKeys>
91 template<
typename ComparableKey>
99 return GetTypeHash(Key);
102 template<
typename ComparableKey>
105 return GetTypeHash(Key);
109template<
typename KeyType,
typename ValueType,
bool bInAllowDuplicateKeys>
119template <
typename AllocatorType,
typename InDerivedType =
void>
127#define UE_TMAP_PREFIX T
131#define UE_TMAP_PREFIX TSparse
135#define UE_TMAP_PREFIX TCompact
150template <
typename AllocatorType,
typename InDerivedType>
166 checkf(KeyOffset == 0,
TEXT(
"The key inside the TPair is expected to be at the start of the struct"));
195 return Pairs.IsValidIndex(
Index);
200 return Pairs.IsEmpty();
216 return Pairs.NumUnchecked();
222 return Pairs.GetMaxIndex();
246 Pairs.Empty(Slack,
Layout.SetLayout);
249#if UE_USE_COMPACT_SET_AS_DEFAULT
269 return Pairs.AddUninitialized(
Layout.SetLayout);
274 Pairs.RemoveAtUninitialized(
Layout.SetLayout,
Index);
279 Pairs.CommitLastUninitialized(
Layout.SetLayout, GetKeyHash);
284 Pairs.CommitAllUninitialized(
Layout.SetLayout, GetKeyHash);
289 Pairs.Rehash(
Layout.SetLayout, GetKeyHash);
300 return Pairs.FindIndex(
306 return KeyEqualityFn(InKey, (uint8*)InPair);
347 KeyConstructAndAssignFn((uint8*)NewPair);
348 ValueConstructAndAssignFn((uint8*)NewPair + Layout.ValueOffset);
352 DestructValueFn((uint8*)NewPair + Layout.ValueOffset);
353 DestructKeyFn((uint8*)NewPair);
380 ConstructPairFn(NewPair, (uint8*)NewPair + ValueOffset);
390 static void CheckConstraints()
396 static_assert(
sizeof(
ScriptType) ==
sizeof(RealType),
"TScriptMap's size doesn't match TMap");
397 static_assert(
alignof(
ScriptType) ==
alignof(RealType),
"TScriptMap's alignment doesn't match TMap");
414template <
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
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
#define STRUCT_OFFSET(struc, member)
Definition UnrealTemplate.h:218
Definition StructBuilder.h:14
constexpr int32 AddMember(int32 MemberSize, int32 MemberAlignment)
Definition StructBuilder.h:30
Definition AssetRegistryState.h:50
std::conditional_t< std::is_rvalue_reference_v< KeyInitType >, KeyInitType &, KeyInitType > Key
Definition Map.h:59
UE_FORCEINLINE_HINT TKeyInitializer(KeyInitType InKey)
Definition Map.h:62
Definition UnrealString.h.inl:34
TPairInitializer(KeyInitType InKey, ValueInitType InValue)
Definition Map.h:32
std::conditional_t< std::is_rvalue_reference_v< ValueInitType >, ValueInitType &, ValueInitType > Value
Definition Map.h:29
TPairInitializer(const TPair< KeyType, ValueType > &Pair)
Definition Map.h:40
std::conditional_t< std::is_rvalue_reference_v< KeyInitType >, KeyInitType &, KeyInitType > Key
Definition Map.h:28
TScriptMap(const TScriptMap &)
Definition Map.h:409
bool IsEmpty() const
Definition Map.h:198
void CommitAllUninitialized(const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition Map.h:282
void MoveAssign(DerivedType &Other, const FScriptMapLayout &Layout)
Definition Map.h:235
bool IsValidIndex(int32 Index) const
Definition Map.h:193
void * FindOrAdd(const void *Key, const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn, TFunctionRef< void(void *, void *)> ConstructPairFn)
Definition Map.h:365
int32 Max() const
Definition Map.h:209
int32 Num() const
Definition Map.h:203
void RemoveAtUninitialized(const FScriptMapLayout &Layout, int32 Index)
Definition Map.h:272
static constexpr bool bHasIntrusiveUnsetOptionalState
Definition Map.h:178
const void * GetData(int32 Index, const FScriptMapLayout &Layout) const
Definition Map.h:230
void Empty(int32 Slack, const FScriptMapLayout &Layout)
Definition Map.h:244
TScriptMap(FIntrusiveUnsetOptionalState Tag)
Definition Map.h:181
int32 FindPairIndex(const void *Key, const FScriptMapLayout &MapLayout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn) const
Definition Map.h:293
void RemoveAt(int32 Index, const FScriptMapLayout &Layout)
Definition Map.h:255
void operator=(const TScriptMap &)
Definition Map.h:410
void Add(const void *Key, const void *Value, const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn, TFunctionRef< void(void *)> KeyConstructAndAssignFn, TFunctionRef< void(void *)> ValueConstructAndAssignFn, TFunctionRef< void(void *)> ValueAssignFn, TFunctionRef< void(void *)> DestructKeyFn, TFunctionRef< void(void *)> DestructValueFn)
Definition Map.h:328
TScriptMap()
Definition Map.h:171
void * GetData(int32 Index, const FScriptMapLayout &Layout)
Definition Map.h:225
int32 NumUnchecked() const
Definition Map.h:214
int32 GetMaxIndex() const
Definition Map.h:220
int32 AddUninitialized(const FScriptMapLayout &Layout)
Definition Map.h:267
void Rehash(const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition Map.h:287
uint8 * FindValue(const void *Key, const FScriptMapLayout &MapLayout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn)
Definition Map.h:315
void CommitLastUninitialized(const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition Map.h:277
bool operator==(FIntrusiveUnsetOptionalState Tag) const
Definition Map.h:185
static constexpr FScriptMapLayout GetScriptLayout(int32 KeySize, int32 KeyAlignment, int32 ValueSize, int32 ValueAlignment)
Definition Map.h:156
Definition ScriptSparseSet.h:26
static constexpr FScriptSparseSetLayout GetScriptLayout(int32 ElementSize, int32 ElementAlignment)
Definition ScriptSparseSet.h:28
U16 Index
Definition radfft.cpp:71
Definition SetUtilities.h:23
Definition IntrusiveUnsetOptionalState.h:71
FScriptSetLayout SetLayout
Definition Map.h:144
int32 ValueOffset
Definition Map.h:142
Definition ScriptSparseSet.h:13
decltype(GetTypeHash(DeclVal< const KeyType >())) HashabilityCheck
Definition Map.h:116
TTypeTraits< KeyType >::ConstPointerType KeyInitType
Definition Map.h:78
static UE_FORCEINLINE_HINT bool Matches(KeyInitType A, ComparableKey B)
Definition Map.h:92
static UE_FORCEINLINE_HINT uint32 GetKeyHash(ComparableKey Key)
Definition Map.h:103
static UE_FORCEINLINE_HINT bool Matches(KeyInitType A, KeyInitType B)
Definition Map.h:86
const TPairInitializer< typename TTypeTraits< KeyType >::ConstInitType, typename TTypeTraits< ValueType >::ConstInitType > & ElementInitType
Definition Map.h:79
static UE_FORCEINLINE_HINT KeyInitType GetSetKey(ElementInitType Element)
Definition Map.h:81
static UE_FORCEINLINE_HINT uint32 GetKeyHash(KeyInitType Key)
Definition Map.h:97
@ Value
Definition Map.h:125
Definition UnrealTypeTraits.h:172
TCallTraits< T >::ParamType ConstInitType
Definition UnrealTypeTraits.h:336
TCallTraits< T >::ConstPointerType ConstPointerType
Definition UnrealTypeTraits.h:337