UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AssetDataTagMapSerializationDetails.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "Async/Async.h"
8#include "AutoRTFM.h"
10
12
13namespace FixedTagPrivate
14{
15 // Legacy version of FAssetRegistryExportPath (before FAssetRegistryVersion::ClassPaths)
22
45
47 struct FStore
48 {
49 // Pairs for all unsorted maps that uses this store
52
53 // Values for all maps in this store
63
65 void* Data = nullptr;
66
67 void AddRef() const
68 {
70 {
71 RefCount.Increment();
72 };
73
75 {
76 RefCount.Decrement();
77 };
78 }
79
80 COREUOBJECT_API void Release() const;
81
82 const ANSICHAR* GetAnsiString(uint32 Idx) const { return &AnsiStrings[AnsiStringOffsets[Idx]]; }
83 const WIDECHAR* GetWideString(uint32 Idx) const { return &WideStrings[WideStringOffsets[Idx]]; }
84
85 private:
86 friend class FStoreManager;
87
88 explicit FStore(uint32 InIndex) : Index(InIndex)
89 {
90 checkf(!AutoRTFM::IsClosed() || !AutoRTFM::IsOnCurrentTransactionStack(this), TEXT("Not allowed to construct a stack local within a transaction."));
91 }
92
93 ~FStore();
94
95 mutable FThreadSafeCounter RefCount;
96 };
97
103
104 // Incomplete handle to a map in an unspecified FStore.
105 // Used for serialization where the store index is implicit.
107 {
108 bool bHasNumberlessKeys = false;
109 uint16 Num = 0;
110 uint32 PairBegin = 0;
111
112 FMapHandle MakeFullHandle(uint32 StoreIndex) const;
113 uint64 ToInt() const;
114 static FPartialMapHandle FromInt(uint64 Int);
115 };
116
117 // Note: Can be changed to a single allocation and array views to improve cooker performance
133
134 uint32 HashCaseSensitive(const TCHAR* Str, int32 Len);
135 uint32 HashCaseSensitive(const UTF8CHAR* Str, int32 Len);
138
139 // Helper class for saving or constructing an FStore
141 {
142 public:
143 explicit FStoreBuilder(const FOptions& InOptions) : Options(InOptions) {}
145
147
148 // Call once after all tag maps have been added
150
151 private:
152
153 template <typename ValueType>
154 struct FCaseSensitiveFuncs : BaseKeyFuncs<ValueType, FString, /*bInAllowDuplicateKeys*/ false>
155 {
156 template<typename KeyType>
157 static const KeyType& GetSetKey(const TPair<KeyType, ValueType>& Element)
158 {
159 return Element.Key;
160 }
161
162 static bool Matches(const FString& A, const FString& B)
163 {
164 return A.Equals(B, ESearchCase::CaseSensitive);
165 }
166 static bool Matches(const FUtf8String& A, const FUtf8String& B)
167 {
168 return A.Equals(B, ESearchCase::CaseSensitive);
169 }
170 static uint32 GetKeyHash(const FString& Key)
171 {
172 return HashCaseSensitive(&Key[0], Key.Len());
173 }
174 static uint32 GetKeyHash(const FUtf8String& Key)
175 {
176 return HashCaseSensitive(&Key[0], Key.Len());
177 }
178
179 static bool Matches(FNameEntryId A, FNameEntryId B)
180 {
181 return A == B;
182 }
183 static uint32 GetKeyHash(FNameEntryId Key)
184 {
185 return GetTypeHash(Key);
186 }
187
188 static bool Matches(FName A, FName B)
189 {
190 return (A.GetDisplayIndex() == B.GetDisplayIndex()) & (A.GetNumber() == B.GetNumber());
191 }
192 static uint32 GetKeyHash(FName Key)
193 {
194 return HashCombineQuick(GetTypeHash(Key.GetDisplayIndex()), Key.GetNumber());
195 }
196
197 static bool Matches(const FNumberlessExportPath& A, const FNumberlessExportPath& B)
198 {
199 return Matches(A.ClassPackage, B.ClassPackage) & Matches(A.ClassObject, B.ClassObject) & Matches(A.Package, B.Package) & Matches(A.Object, B.Object); //-V792
200 }
202 {
203 return Matches(A.ClassPath.GetPackageName(), B.ClassPath.GetPackageName()) & Matches(A.ClassPath.GetAssetName(), B.ClassPath.GetAssetName()) & Matches(A.Package, B.Package) & Matches(A.Object, B.Object); //-V792
204 }
205
206 static uint32 GetKeyHash(const FNumberlessExportPath& Key)
207 {
208 return HashCombineQuick(HashCombineQuick(GetKeyHash(Key.ClassPackage), GetKeyHash(Key.ClassObject)), GetKeyHash(Key.Package), GetKeyHash(Key.Object));
209 }
210 static uint32 GetKeyHash(const FAssetRegistryExportPath& Key)
211 {
212 return HashCombineQuick(HashCombineQuick(GetKeyHash(Key.ClassPath.GetPackageName()), GetKeyHash(Key.ClassPath.GetAssetName())), GetKeyHash(Key.Package), GetKeyHash(Key.Object));
213 }
214
215 static bool Matches(const FMarshalledText& A, const FMarshalledText& B)
216 {
217 return Matches(A.GetAsComplexString(), B.GetAsComplexString());
218 }
219
220 static uint32 GetKeyHash(const FMarshalledText& Key)
221 {
222 return GetKeyHash(Key.GetAsComplexString());
223 }
224 };
225
226 struct FStringIndexer
227 {
228 uint32 NumCharacters = 0;
230 TArray<uint32> Offsets;
231
232 uint32 Index(FString&& String);
233
234 TArray<ANSICHAR> FlattenAsAnsi() const;
235 TArray<WIDECHAR> FlattenAsWide() const;
236 };
237
238 const FOptions Options;
239 FStringIndexer AnsiStrings;
240 FStringIndexer WideStrings;
241 TMap<FDisplayNameEntryId, uint32> NumberlessNameIndices;
246
247 TArray<FNumberedPair> NumberedPairs;
248 TArray<FNumberedPair> NumberlessPairs; // Stored as numbered for convenience
249
250 bool bFinalized = false;
251
252 FValueId IndexValue(FName Key, FAssetTagValueRef Value);
253 };
254
255 enum class ELoadOrder { Member, TextFirst };
256
257 COREUOBJECT_API void SaveStore(const FStoreData& Store, FArchive& Ar);
259
287
288 // Initializes a managed FStore from an unfinalized builder.
290
291} // end namespace FixedTagPrivate
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::WIDECHAR WIDECHAR
A wide character. Normally a signed type.
Definition Platform.h:1133
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UTF8CHAR UTF8CHAR
An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
Definition Platform.h:1137
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ Num
Definition MetalRHIPrivate.h:234
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition AssetDataTagMap.h:303
Definition AssetDataTagMap.h:182
Definition NameTypes.h:617
Definition Text.h:385
Definition ThreadSafeCounter.h:14
int32 Increment()
Definition ThreadSafeCounter.h:52
int32 Decrement()
Definition ThreadSafeCounter.h:75
Definition AssetDataTagMapSerializationDetails.h:267
COREUOBJECT_API TRefCountPtr< const FStore > LoadFinalData(FArchive &Ar, FAssetRegistryVersion::Type HeaderVersion)
Definition AssetDataTagMap.cpp:1376
COREUOBJECT_API FAsyncStoreLoader()
Definition AssetDataTagMap.cpp:1349
COREUOBJECT_API TFuture< void > ReadInitialDataAndKickLoad(FArchive &Ar, uint32 MaxWorkerTasks, FAssetRegistryVersion::Type HeaderVersion)
Definition AssetDataTagMap.cpp:1353
Definition AssetDataTagMapSerializationDetails.h:28
COREUOBJECT_API int32 CompareToCaseIgnored(const FMarshalledText &Other) const
Definition AssetDataTagMap.cpp:207
COREUOBJECT_API FText GetAsText() const
Definition AssetDataTagMap.cpp:197
COREUOBJECT_API const FUtf8String & GetAsComplexString() const
Definition AssetDataTagMap.cpp:192
COREUOBJECT_API int64 GetResourceSize() const
Definition AssetDataTagMap.cpp:202
Definition AssetDataTagMapSerializationDetails.h:141
COREUOBJECT_API FStoreData Finalize()
Definition AssetDataTagMap.cpp:853
COREUOBJECT_API FPartialMapHandle AddTagMap(const FAssetDataTagMapSharedView &Map)
Definition AssetDataTagMap.cpp:754
FStoreBuilder(const FOptions &InOptions)
Definition AssetDataTagMapSerializationDetails.h:143
FStoreBuilder(FOptions &&InOptions)
Definition AssetDataTagMapSerializationDetails.h:144
Definition AssetDataTagMap.cpp:378
Definition ArrayView.h:139
Definition Array.h:670
Definition Future.h:393
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
@ CaseSensitive
Definition CString.h:23
Definition AssetDataTagMap.cpp:170
uint32 HashCaseSensitive(const TCHAR *Str, int32 Len)
Definition AssetDataTagMap.cpp:217
void SaveStore(const FStoreData &Store, FArchive &Ar)
Definition AssetDataTagMap.cpp:1312
uint32 HashCombineQuick(uint32 A, uint32 B)
Definition AssetDataTagMap.cpp:227
@ Member
Definition AssetDataTagMap.cpp:938
@ TextFirst
Definition AssetDataTagMap.cpp:938
TRefCountPtr< const FStore > LoadStore(FArchive &Ar, FAssetRegistryVersion::Type Version)
Definition AssetDataTagMap.cpp:1318
uint32 GetTypeHash(const FNumberlessExportPath &Export)
struct COREUOBJECT_API alignas(uint64) FMapHandle
Definition AssetDataTagMap.h:134
ELoadOrder
Definition AssetDataTagMapSerializationDetails.h:255
TRefCountPtr< const FStore > InitializeFromBuilder(FStoreBuilder &InBuilder)
Definition AssetDataTagMap.cpp:1390
VERSECOMPILER_API bool Matches(const CTypeBase *PositiveType1, const CTypeBase *NegativeType2, const uint32_t UploadedAtFnVersion)
Determine if argument PositiveType1 is a match for parameter NegativeType2
Definition SemanticTypes.cpp:2971
U16 Index
Definition radfft.cpp:71
Definition SetUtilities.h:23
FString KeyType
Definition SetUtilities.h:24
Definition AssetDataTagMap.h:27
Definition AssetRegistryState.h:58
Type
Definition AssetData.h:73
@ LatestVersion
Definition AssetData.h:111
Definition NameTypes.h:69
Definition AssetDataTagMapSerializationDetails.h:17
FName Class
Definition AssetDataTagMapSerializationDetails.h:18
FName Object
Definition AssetDataTagMapSerializationDetails.h:20
FName Package
Definition AssetDataTagMapSerializationDetails.h:19
Definition AssetDataTagMapSerializationDetails.h:99
TSet< FName > StoreAsPath
Definition AssetDataTagMapSerializationDetails.h:101
TSet< FName > StoreAsName
Definition AssetDataTagMapSerializationDetails.h:100
Definition AssetDataTagMapSerializationDetails.h:119
TArray< FNumberlessPair > NumberlessPairs
Definition AssetDataTagMapSerializationDetails.h:121
TArray< FName > Names
Definition AssetDataTagMapSerializationDetails.h:128
TArray< uint32 > WideStringOffsets
Definition AssetDataTagMapSerializationDetails.h:125
TArray< FDisplayNameEntryId > NumberlessNames
Definition AssetDataTagMapSerializationDetails.h:127
TArray< FNumberlessExportPath > NumberlessExportPaths
Definition AssetDataTagMapSerializationDetails.h:129
TArray< FMarshalledText > Texts
Definition AssetDataTagMapSerializationDetails.h:131
TArray< ANSICHAR > AnsiStrings
Definition AssetDataTagMapSerializationDetails.h:124
TArray< FNumberedPair > Pairs
Definition AssetDataTagMapSerializationDetails.h:120
TArray< FAssetRegistryExportPath > ExportPaths
Definition AssetDataTagMapSerializationDetails.h:130
TArray< WIDECHAR > WideStrings
Definition AssetDataTagMapSerializationDetails.h:126
TArray< uint32 > AnsiStringOffsets
Definition AssetDataTagMapSerializationDetails.h:123
Stores a fixed set of values and all the key-values maps used for lookup.
Definition AssetDataTagMapSerializationDetails.h:48
TArrayView< FName > Names
Definition AssetDataTagMapSerializationDetails.h:59
const WIDECHAR * GetWideString(uint32 Idx) const
Definition AssetDataTagMapSerializationDetails.h:83
TArrayView< uint32 > AnsiStringOffsets
Definition AssetDataTagMapSerializationDetails.h:54
TArrayView< FMarshalledText > Texts
Definition AssetDataTagMapSerializationDetails.h:62
TArrayView< FDisplayNameEntryId > NumberlessNames
Definition AssetDataTagMapSerializationDetails.h:58
TArrayView< FNumberedPair > Pairs
Definition AssetDataTagMapSerializationDetails.h:50
COREUOBJECT_API void Release() const
Definition AssetDataTagMap.cpp:980
const uint32 Index
Definition AssetDataTagMapSerializationDetails.h:64
void * Data
Definition AssetDataTagMapSerializationDetails.h:65
TArrayView< ANSICHAR > AnsiStrings
Definition AssetDataTagMapSerializationDetails.h:55
const ANSICHAR * GetAnsiString(uint32 Idx) const
Definition AssetDataTagMapSerializationDetails.h:82
TArrayView< FNumberlessPair > NumberlessPairs
Definition AssetDataTagMapSerializationDetails.h:51
TArrayView< uint32 > WideStringOffsets
Definition AssetDataTagMapSerializationDetails.h:56
TArrayView< WIDECHAR > WideStrings
Definition AssetDataTagMapSerializationDetails.h:57
TArrayView< FAssetRegistryExportPath > ExportPaths
Definition AssetDataTagMapSerializationDetails.h:61
TArrayView< FNumberlessExportPath > NumberlessExportPaths
Definition AssetDataTagMapSerializationDetails.h:60
void AddRef() const
Definition AssetDataTagMapSerializationDetails.h:67
Definition Optional.h:131
Definition Tuple.h:652