UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AssetDataTagMap.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
11
16
17namespace FixedTagPrivate { class FMarshalledText; }
18namespace FixedTagPrivate { class FStoreBuilder; }
19
27{
28PRAGMA_DISABLE_DEPRECATION_WARNINGS // Compilers can complain about deprecated members in compiler generated code
35
38
40 UE_DEPRECATED(5.1, "Class names are now represented by path names. Please use ClassPath member")
44
45 COREUOBJECT_API FString ToString() const;
48 COREUOBJECT_API FString ToPath() const;
54 bool IsEmpty() const { return ClassPath.IsNull() & Package.IsNone() & Object.IsNone(); } //-V792
55 explicit operator bool() const { return !IsEmpty(); }
56
59};
60
61namespace FixedTagPrivate
62{
63 // Compact FAssetRegistryExportPath equivalent for when all FNames are numberless
75
78
79 enum class EValueType : uint32;
80
81 struct FValueId
82 {
83 static constexpr uint32 TypeBits = 3;
84 static constexpr uint32 IndexBits = 32 - TypeBits;
85
88
89 uint32 ToInt() const
90 {
91 return static_cast<uint32>(Type) | (Index << TypeBits);
92 }
93
95 {
96 return { static_cast<EValueType>((Int << IndexBits) >> IndexBits), Int >> TypeBits };
97 }
98 };
99
105
111
112 // Handle to a tag value owned by a managed FStore
114 {
117
118 COREUOBJECT_API FString AsDisplayString() const;
119 COREUOBJECT_API FString AsStorageString() const;
122 COREUOBJECT_API bool AsText(FText& Out) const;
124 COREUOBJECT_API bool Equals(FStringView Str) const;
125 COREUOBJECT_API bool Contains(const TCHAR* Str) const;
127
128 private:
129 template <bool bForStorage>
130 FString AsString() const;
131 };
132
133 // Handle to a tag map owned by a managed FStore
135 {
136 static constexpr uint32 StoreIndexBits = 14;
137
138 uint16 IsValid : 1;
140 uint16 StoreIndex : StoreIndexBits; // @see FStoreManager
141 uint16 Num;
143
144 const FValueId* FindValue(FName Key) const;
145
148
149 // Get numbered pair at an index regardless if numberless keys are used
150 FNumberedPair At(uint32 Index) const;
151
152 friend bool operator==(FMapHandle A, FMapHandle B);
153
154 template<typename Func>
155 void ForEachPair(Func Fn) const
156 {
157 if (HasNumberlessKeys != 0)
158 {
160 {
161 Fn(FNumberedPair{Pair.Key.ToName(NAME_NO_NUMBER_INTERNAL), Pair.Value});
162 }
163 }
164 else
165 {
166 for (FNumberedPair Pair : GetNumberedView())
167 {
168 Fn(Pair);
169 }
170 }
171 }
172 };
173} // end namespace FixedTagPrivate
174
182{
184
185 class FFixedTagValue
186 {
187 static constexpr uint64 FixedMask = uint64(1) << FPlatformMemory::KernelAddressBit;
188 static_assert(FixedTagPrivate::FMapHandle::StoreIndexBits <= (FPlatformMemory::KernelAddressBit - 32),
189 "Too few bits remain for the StoreIndex. Consider using other high bits but note that ARM64 use the top byte for HWASAN & MTE.)");
190
191 uint64 Bits;
192
193 public:
194 uint64 IsFixed() const { return Bits & FixedMask; }
195 uint32 GetStoreIndex() const { return static_cast<uint32>((Bits & ~FixedMask) >> 32); }
196 uint32 GetValueId() const { return static_cast<uint32>(Bits); }
197
198 FFixedTagValue() = default;
199 FFixedTagValue(uint32 StoreIndex, uint32 ValueId)
200 : Bits(FixedMask | (uint64(StoreIndex) << 32) | uint64(ValueId))
201 {}
202 };
203
204#if PLATFORM_32BITS
205 class FStringPointer
206 {
207 uint64 Ptr;
208
209 public:
210 FStringPointer() = default;
211 explicit FStringPointer(const FString* InPtr) : Ptr(reinterpret_cast<uint64>(InPtr)) {}
212 FStringPointer& operator=(const FString* InPtr) { Ptr = reinterpret_cast<uint64>(InPtr); return *this; }
213
214 const FString* operator->() const { return reinterpret_cast<const FString*>(Ptr); }
215 operator const FString*() const { return reinterpret_cast<const FString*>(Ptr); }
216 };
217#else
218 using FStringPointer = const FString*;
219#endif
220
221 union
222 {
223 FStringPointer Loose;
224 FFixedTagValue Fixed;
226 };
227
228 uint64 IsFixed() const { return Fixed.IsFixed(); }
229 FixedTagPrivate::FValueHandle AsFixed() const;
230 const FString& AsLoose() const;
231
232public:
233 FAssetTagValueRef() = default;
236 explicit FAssetTagValueRef(const FString* Str) : Loose(Str) {}
238
241
242 bool IsSet() const { return Bits != 0; }
243
244 COREUOBJECT_API FString AsString() const;
248 COREUOBJECT_API bool TryGetAsText(FText& Out) const; // @return false if value isn't a localized string
249
250 FString GetValue() const { return AsString(); }
252 FString GetStorageString() const { return ToLoose(); }
258
259 COREUOBJECT_API bool Equals(FStringView Str) const;
260
261private:
263 bool TryGetAsMarshalledText(FixedTagPrivate::FMarshalledText& Out) const;
268 COREUOBJECT_API FString ToLoose() const;
269
271 friend FAssetRegistryState;
272
273 friend inline bool operator==(FAssetTagValueRef A, FStringView B) { return A.Equals(B); }
274 friend inline bool operator!=(FAssetTagValueRef A, FStringView B) { return !A.Equals(B); }
275 friend inline bool operator==(FStringView A, FAssetTagValueRef B) { return B.Equals(A); }
276 friend inline bool operator!=(FStringView A, FAssetTagValueRef B) { return !B.Equals(A); }
277
278 // These overloads can be removed when the deprecated implicit operator FString is removed
279 friend inline bool operator==(FAssetTagValueRef A, const FString& B) { return A.Equals(B); }
280 friend inline bool operator!=(FAssetTagValueRef A, const FString& B) { return !A.Equals(B); }
281 friend inline bool operator==(const FString& A, FAssetTagValueRef B) { return B.Equals(A); }
282 friend inline bool operator!=(const FString& A, FAssetTagValueRef B) { return !B.Equals(A); }
283};
284
286
300
303{
304 union
305 {
306 FixedTagPrivate::FMapHandle Fixed;
309 };
310
311 bool IsFixed() const
312 {
313 return Fixed.IsValid;
314 }
315
316 bool IsLoose() const
317 {
318 return (!Fixed.IsValid) & (Loose != nullptr);
319 }
320
321 FAssetTagValueRef FindFixedValue(FName Key) const
322 {
323 checkSlow(IsFixed());
324 const FixedTagPrivate::FValueId* Value = Fixed.FindValue(Key);
325 return Value ? FAssetTagValueRef(Fixed.StoreIndex, *Value) : FAssetTagValueRef();
326 }
327
329 {
330 return MakeTuple(FixedPair.Key, FAssetTagValueRef(StoreIndex, FixedPair.Value));
331 }
332
334 {
335 return MakeTuple(LoosePair.Key, FAssetTagValueRef(&LoosePair.Value));
336 }
337
338public:
342 COREUOBJECT_API explicit FAssetDataTagMapSharedView(FixedTagPrivate::FMapHandle InFixed);
344
347
349
351
354 {
355 if (IsFixed())
356 {
357 return FindFixedValue(Tag);
358 }
359
360 return Loose != nullptr ? FAssetTagValueRef(Loose->Find(Tag)) : FAssetTagValueRef();
361 }
362
364 bool ContainsKeyValue(FName Tag, const FString& Value) const
365 {
366 return FindTag(Tag).Equals(Value);
367 }
368
370 bool Contains(FName Key) const
371 {
372 return FindTag(Key).IsSet();
373 }
374
376 int32 Num() const
377 {
378 if (IsFixed())
379 {
380 return Fixed.Num;
381 }
382
383 return Loose != nullptr ? Loose->Num() : 0;
384 }
385
388
389 template<typename Func>
390 void ForEach(Func Fn) const
391 {
392 if (IsFixed())
393 {
394 Fixed.ForEachPair([&](FixedTagPrivate::FNumberedPair Pair) { Fn(MakePair(Pair, Fixed.StoreIndex)); });
395 }
396 else if (Loose != nullptr)
397 {
398 for (const FAssetDataTagMap::ElementType& Pair : *Loose)
399 {
400 Fn(MakePair(Pair));
401 }
402 }
403 }
404
405 // Note that FAssetDataTagMap isn't sorted and that order matters
408
410 COREUOBJECT_API void Shrink();
411
413 {
414 public:
419
421 {
422 check(View.Bits != 0);
423 return View.IsFixed() ? MakePair(View.Fixed.At(Index), View.Fixed.StoreIndex)
424 : MakePair((&*View.Loose->begin())[Index]);
425 }
426
428 {
429 ++Index;
430 return *this;
431 }
432
433 bool operator!=(TConstIterator Rhs) const { return Index != Rhs.Index; }
434
435 protected:
438 };
439
441 {
442 public:
447
448 explicit operator bool() const { return Index != EndIndex; }
449 FName Key() const { return operator*().Key; }
450 FAssetTagValueRef Value() const { return operator*().Value; }
451
452 private:
453 const uint32 EndIndex;
454 };
455
457 {
458 return TConstIteratorWithEnd(*this, 0, Num());
459 }
460
463 {
464 return TConstIterator(*this, 0);
465 }
466
469 {
470 return TConstIterator(*this, Num());
471 }
472
475 {
476 TSet<uint32> FixedStoreIndices;
477 SIZE_T LooseBytes = 0;
478 public:
480 SIZE_T GetLooseSize() const { return LooseBytes; }
483 };
484
485 friend inline bool operator==(const FAssetDataTagMap& A, const FAssetDataTagMapSharedView& B) { return B == A; }
486 friend inline bool operator!=(const FAssetDataTagMap& A, const FAssetDataTagMapSharedView& B) { return !(B == A); }
487 friend inline bool operator!=(const FAssetDataTagMapSharedView& A, const FAssetDataTagMap& B) { return !(A == B); }
488 friend inline bool operator!=(const FAssetDataTagMapSharedView& A, const FAssetDataTagMapSharedView& B) { return !(A == B); }
489};
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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::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
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
@ Num
Definition MetalRHIPrivate.h:234
#define NAME_NO_NUMBER_INTERNAL
Definition NameTypes.h:157
const bool
Definition NetworkReplayStreaming.h:178
constexpr TTuple< std::decay_t< Types >... > MakeTuple(Types &&... Args)
Definition Tuple.h:794
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 AssetDataTagMap.h:475
COREUOBJECT_API SIZE_T GetFixedSize() const
Definition AssetDataTagMap.cpp:1702
COREUOBJECT_API void ReportFixedStoreBreakdown() const
Definition AssetDataTagMap.cpp:1714
SIZE_T GetLooseSize() const
Definition AssetDataTagMap.h:480
TConstIteratorWithEnd(const FAssetDataTagMapSharedView &InView, uint32 InBeginIndex, uint32 InEndIndex)
Definition AssetDataTagMap.h:443
FAssetTagValueRef Value() const
Definition AssetDataTagMap.h:450
FName Key() const
Definition AssetDataTagMap.h:449
Definition AssetDataTagMap.h:413
uint32 Index
Definition AssetDataTagMap.h:437
const FAssetDataTagMapSharedView & View
Definition AssetDataTagMap.h:436
TPair< FName, FAssetTagValueRef > operator*() const
Definition AssetDataTagMap.h:420
TConstIterator & operator++()
Definition AssetDataTagMap.h:427
TConstIterator(const FAssetDataTagMapSharedView &InView, uint32 InIndex)
Definition AssetDataTagMap.h:415
bool operator!=(TConstIterator Rhs) const
Definition AssetDataTagMap.h:433
Definition AssetDataTagMap.h:303
int32 Num() const
Definition AssetDataTagMap.h:376
friend bool operator==(const FAssetDataTagMap &A, const FAssetDataTagMapSharedView &B)
Definition AssetDataTagMap.h:485
TConstIterator end() const
Definition AssetDataTagMap.h:468
COREUOBJECT_API friend bool operator==(const FAssetDataTagMapSharedView &A, const FAssetDataTagMap &B)
Definition AssetDataTagMap.cpp:1640
FixedTagPrivate::FMapHandle Fixed
Definition AssetDataTagMap.h:306
COREUOBJECT_API ~FAssetDataTagMapSharedView()
Definition AssetDataTagMap.cpp:1562
uint64 Bits
Definition AssetDataTagMap.h:308
FAssetTagValueRef FindTag(FName Tag) const
Definition AssetDataTagMap.h:353
void ForEach(Func Fn) const
Definition AssetDataTagMap.h:390
TConstIterator begin() const
Definition AssetDataTagMap.h:462
FAssetDataTagMapSharedView()=default
bool ContainsKeyValue(FName Tag, const FString &Value) const
Definition AssetDataTagMap.h:364
COREUOBJECT_API void Shrink()
‍** Shrinks the contained map *‍/
Definition AssetDataTagMap.cpp:1599
friend bool operator!=(const FAssetDataTagMapSharedView &A, const FAssetDataTagMapSharedView &B)
Definition AssetDataTagMap.h:488
COREUOBJECT_API FAssetDataTagMapSharedView & operator=(const FAssetDataTagMapSharedView &)
Definition AssetDataTagMap.cpp:1548
TConstIteratorWithEnd CreateConstIterator() const
Definition AssetDataTagMap.h:456
bool Contains(FName Key) const
Definition AssetDataTagMap.h:370
friend bool operator!=(const FAssetDataTagMapSharedView &A, const FAssetDataTagMap &B)
Definition AssetDataTagMap.h:487
friend bool operator!=(const FAssetDataTagMap &A, const FAssetDataTagMapSharedView &B)
Definition AssetDataTagMap.h:486
FAssetDataTagMap * Loose
Definition AssetDataTagMap.h:307
COREUOBJECT_API FAssetDataTagMap CopyMap() const
Definition AssetDataTagMap.cpp:1584
Definition AssetDataTagMap.h:289
FAssetDataTagMap(const FAssetDataTagMap &O)
Definition AssetDataTagMap.h:295
FAssetDataTagMap()=default
FAssetDataTagMap & operator=(FAssetDataTagMap &&O)
Definition AssetDataTagMap.h:298
FAssetDataTagMap & operator=(const FAssetDataTagMap &O)
Definition AssetDataTagMap.h:297
FAssetDataTagMap(FAssetDataTagMap &&O)
Definition AssetDataTagMap.h:296
Definition AssetRegistryState.h:158
Definition AssetDataTagMap.h:182
friend bool operator==(FAssetTagValueRef A, const FString &B)
Definition AssetDataTagMap.h:279
FString GetValue() const
Definition AssetDataTagMap.h:250
friend bool operator==(FStringView A, FAssetTagValueRef B)
Definition AssetDataTagMap.h:275
COREUOBJECT_API FString AsString() const
Definition AssetDataTagMap.cpp:1419
FAssetTagValueRef & operator=(const FAssetTagValueRef &)=default
COREUOBJECT_API bool Equals(FStringView Str) const
Definition AssetDataTagMap.cpp:1473
FAssetTagValueRef(const FAssetTagValueRef &)=default
friend bool operator==(FAssetTagValueRef A, FStringView B)
Definition AssetDataTagMap.h:273
uint64 Bits
Definition AssetDataTagMap.h:225
bool IsSet() const
Definition AssetDataTagMap.h:242
friend bool operator!=(FStringView A, FAssetTagValueRef B)
Definition AssetDataTagMap.h:276
friend bool operator!=(const FString &A, FAssetTagValueRef B)
Definition AssetDataTagMap.h:282
COREUOBJECT_API FAssetRegistryExportPath AsExportPath() const
Definition AssetDataTagMap.cpp:1429
friend bool operator!=(FAssetTagValueRef A, FStringView B)
Definition AssetDataTagMap.h:274
COREUOBJECT_API bool TryGetAsText(FText &Out) const
Definition AssetDataTagMap.cpp:1434
FStringPointer Loose
Definition AssetDataTagMap.h:223
FAssetTagValueRef(FAssetTagValueRef &&)=default
friend bool operator==(const FString &A, FAssetTagValueRef B)
Definition AssetDataTagMap.h:281
COREUOBJECT_API int64 GetResourceSize() const
Definition AssetDataTagMap.cpp:1450
FFixedTagValue Fixed
Definition AssetDataTagMap.h:224
FAssetTagValueRef(uint32 StoreIndex, FixedTagPrivate::FValueId ValueId)
Definition AssetDataTagMap.h:237
FString GetStorageString() const
Definition AssetDataTagMap.h:252
friend bool operator!=(FAssetTagValueRef A, const FString &B)
Definition AssetDataTagMap.h:280
FAssetTagValueRef(const FString *Str)
Definition AssetDataTagMap.h:236
COREUOBJECT_API FText AsText() const
Definition AssetDataTagMap.cpp:1439
FAssetTagValueRef()=default
COREUOBJECT_API FName AsName() const
Definition AssetDataTagMap.cpp:1424
FAssetTagValueRef & operator=(FAssetTagValueRef &&)=default
Definition NameTypes.h:1855
Definition NameTypes.h:617
FORCEINLINE bool IsNone() const
Definition NameTypes.h:827
Definition Text.h:385
Definition ThreadSafeCounter.h:14
Definition AssetDataTagMapSerializationDetails.h:28
Definition AssetDataTagMapSerializationDetails.h:141
Definition ArrayView.h:139
Definition SortedMap.h:20
TSortedMap & operator=(TSortedMap &&)=default
ValueType * Find(KeyConstPointerType Key)
Definition SortedMap.h:285
UE_FORCEINLINE_HINT RangedForIteratorType begin()
Definition SortedMap.h:914
UE_FORCEINLINE_HINT int32 Num() const
Definition SortedMap.h:159
Definition StringView.h:107
@ Bits
Definition PacketView.h:34
Definition AssetDataTagMap.cpp:170
EValueType
Definition AssetDataTagMap.cpp:362
uint32 GetTypeHash(const FNumberlessExportPath &Export)
bool operator==(FMapHandle A, FMapHandle B)
Definition AssetDataTagMap.cpp:701
struct COREUOBJECT_API alignas(uint64) FMapHandle
Definition AssetDataTagMap.h:134
U16 Index
Definition radfft.cpp:71
Definition AssetDataTagMap.h:27
COREUOBJECT_API FString ToPath() const
Definition AssetDataTagMap.cpp:94
PRAGMA_DISABLE_DEPRECATION_WARNINGS FAssetRegistryExportPath()=default
friend uint32 GetTypeHash(const FAssetRegistryExportPath &Export)
Definition AssetDataTagMap.cpp:134
FName Package
Definition AssetDataTagMap.h:42
FAssetRegistryExportPath & operator=(FAssetRegistryExportPath &&)=default
bool IsEmpty() const
Definition AssetDataTagMap.h:54
FAssetRegistryExportPath & operator=(const FAssetRegistryExportPath &)=default
COREUOBJECT_API FString ToString() const
Definition AssetDataTagMap.cpp:58
FName Object
Definition AssetDataTagMap.h:43
FAssetRegistryExportPath(const FAssetRegistryExportPath &)=default
friend bool operator==(const FAssetRegistryExportPath &A, const FAssetRegistryExportPath &B)
Definition AssetDataTagMap.cpp:129
FTopLevelAssetPath ToTopLevelAssetPath() const
Definition AssetDataTagMap.h:50
FName Class
Definition AssetDataTagMap.h:41
FTopLevelAssetPath ClassPath
Definition AssetDataTagMap.h:39
FAssetRegistryExportPath(FAssetRegistryExportPath &&)=default
COREUOBJECT_API FName ToName() const
Definition AssetDataTagMap.cpp:65
Definition AssetRegistryState.h:58
Definition NameTypes.h:69
Definition TopLevelAssetPath.h:38
bool IsNull() const
Definition TopLevelAssetPath.h:121
Definition AssetDataTagMap.h:101
FName Key
Definition AssetDataTagMap.h:102
FValueId Value
Definition AssetDataTagMap.h:103
Definition AssetDataTagMap.h:65
FString ToString() const
Definition AssetDataTagMap.cpp:344
FNameEntryId ClassObject
Definition AssetDataTagMap.h:67
FNameEntryId Package
Definition AssetDataTagMap.h:68
FNameEntryId Object
Definition AssetDataTagMap.h:69
FNameEntryId ClassPackage
Definition AssetDataTagMap.h:66
FName ToName() const
Definition AssetDataTagMap.cpp:349
Definition AssetDataTagMap.h:107
FValueId Value
Definition AssetDataTagMap.h:109
FDisplayNameEntryId Key
Definition AssetDataTagMap.h:108
Definition AssetDataTagMap.h:114
COREUOBJECT_API FString AsDisplayString() const
Definition AssetDataTagMap.cpp:473
COREUOBJECT_API FString AsStorageString() const
Definition AssetDataTagMap.cpp:478
COREUOBJECT_API int64 GetResourceSize() const
Definition AssetDataTagMap.cpp:452
COREUOBJECT_API FName AsName() const
Definition AssetDataTagMap.cpp:483
FValueId Id
Definition AssetDataTagMap.h:116
COREUOBJECT_API bool Contains(const TCHAR *Str) const
COREUOBJECT_API FAssetRegistryExportPath AsExportPath() const
Definition AssetDataTagMap.cpp:505
uint32 StoreIndex
Definition AssetDataTagMap.h:115
COREUOBJECT_API bool AsMarshalledText(FMarshalledText &Out) const
Definition AssetDataTagMap.cpp:538
COREUOBJECT_API bool AsText(FText &Out) const
Definition AssetDataTagMap.cpp:527
Definition AssetDataTagMap.h:82
uint32 ToInt() const
Definition AssetDataTagMap.h:89
uint32 Index
Definition AssetDataTagMap.h:87
static constexpr uint32 TypeBits
Definition AssetDataTagMap.h:83
EValueType Type
Definition AssetDataTagMap.h:86
static FValueId FromInt(uint32 Int)
Definition AssetDataTagMap.h:94
static constexpr uint32 IndexBits
Definition AssetDataTagMap.h:84
Definition Tuple.h:652