UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AttributeStorage.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
8#include "Containers/Map.h"
10#include "HAL/CriticalSection.h"
12#include "Math/Box.h"
13#include "Math/Box2D.h"
15#include "Math/Color.h"
16#include "Math/Float16.h"
17#include "Math/IntPoint.h"
18#include "Math/IntRect.h"
19#include "Math/IntVector.h"
20#include "Math/MathFwd.h"
21#include "Math/Matrix.h"
22#include "Math/OrientedBox.h"
23#include "Math/Plane.h"
24#include "Math/Quat.h"
25#include "Math/RandomStream.h"
26#include "Math/Rotator.h"
27#include "Math/Sphere.h"
28#include "Math/Sphere.h"
29#include "Math/Transform.h"
30#include "Math/TwoVectors.h"
31#include "Math/Vector.h"
32#include "Math/Vector2D.h"
33#include "Math/Vector2DHalf.h"
34#include "Math/Vector4.h"
35#include "Misc/DateTime.h"
36#include "Misc/EnumClassFlags.h"
37#include "Misc/FrameNumber.h"
38#include "Misc/FrameRate.h"
39#include "Misc/FrameTime.h"
40#include "Misc/Guid.h"
41#include "Misc/Timespan.h"
44#include "UObject/NameTypes.h"
46
48
49//Interchange namespace
50namespace UE
51{
52 namespace Interchange
53 {
54 namespace Private
55 {
56 template <typename T, typename Enable = void>
57 struct UE_DEPRECATED(5.7, "No longer used.") TUnderlyingType {};
58
59 template <typename T>
60 struct UE_DEPRECATED(5.7, "No longer used.") TUnderlyingType<T, typename std::enable_if<std::is_enum<T>::value>::type>
61 {
62 using type = typename std::underlying_type<T>::type;
63 };
64 }
65
67 {
68 FString Key;
69
70 FAttributeKey() = default;
71
76
77 explicit FAttributeKey(const FName& Other)
78 {
79 Key = Other.ToString();
80 }
81
83 {
84 Key = Other;
85 }
86
87 explicit FAttributeKey(const FString& Other)
88 {
89 Key = Other;
90 }
91
92 explicit FAttributeKey(FString&& Other)
93 {
95 }
96
97 explicit FAttributeKey(const FText& Other)
98 {
99 Key = Other.ToString();
100 }
101
102 explicit FAttributeKey(const TCHAR* Other)
103 {
104 Key = Other;
105 }
106
108 {
109 Key = Other.ToString();
110 return *this;
111 }
112
113 inline FAttributeKey& operator=(const FString& Other)
114 {
115 Key = Other;
116 return *this;
117 }
118
119 inline FAttributeKey& operator=(FString&& Other)
120 {
121 Key = MoveTemp(Other);
122 return *this;
123 }
124
126 {
127 Key = Other.ToString();
128 return *this;
129 }
130
132 {
133 Key = Other;
134 return *this;
135 }
136
137 inline bool operator==(const FAttributeKey& Other) const
138 {
139 return Key.Equals(Other.Key);
140 }
141
142 inline bool operator!=(const FAttributeKey& Other) const
143 {
144 return !Key.Equals(Other.Key);
145 }
146
147 inline bool operator<(const FAttributeKey& Other) const
148 {
149 return Key.Compare(Other.Key) < 0;
150 }
151
152 inline bool operator<=(const FAttributeKey& Other) const
153 {
154 return Key.Compare(Other.Key) <= 0;
155 }
156
157 inline bool operator>(const FAttributeKey& Other) const
158 {
159 return Key.Compare(Other.Key) > 0;
160 }
161
162 inline bool operator>=(const FAttributeKey& Other) const
163 {
164 return Key.Compare(Other.Key) >= 0;
165 }
166
168 {
169 Ar << AttributeKey.Key;
170 return Ar;
171 }
172
173 inline const FString& ToString() const
174 {
175 return Key;
176 }
177
178 inline FName ToName() const
179 {
180 return FName(*Key);
181 }
182 };
183
184 using ::GetTypeHash;
186 {
187 return GetTypeHash(AttributeKey.Key);
188 }
189
190
196 {
197 None = 0,
198
199 Bool = 1,
200 Color = 4,
201 DateTime = 5,
202 Double = 6,
203 Enum = 7,
204 Float = 8,
205 Guid = 9,
206 Int8 = 10,
207 Int16 = 11,
208 Int32 = 12,
209 Int64 = 13,
210 IntRect = 14,
211 LinearColor = 15,
212 Name = 16,
213 RandomStream = 17,
214 String = 18,
215 Timespan = 19,
216 TwoVectors = 20,
217 UInt8 = 21,
218 UInt16 = 22,
219 UInt32 = 23,
220 UInt64 = 24,
221 Vector2d = 25,
222 IntPoint = 26,
223 IntVector = 27,
224 Vector2DHalf = 28,
225 Float16 = 29,
226 OrientedBox = 30,
227 FrameNumber = 31,
228 FrameRate = 32,
229 FrameTime = 33,
230 SoftObjectPath = 34,
231 Matrix44f = 35,
232 Matrix44d = 36,
233 Plane4f = 37,
234 Plane4d = 38,
235 Quat4f = 39,
236 Quat4d = 40,
237 Rotator3f = 41,
238 Rotator3d = 42,
239 Transform3f = 43,
240 Transform3d = 44,
241 Vector3f = 45,
242 Vector3d = 46,
243 Vector2f = 47,
244 Vector4f = 48,
245 Vector4d = 49,
246 Box2f = 50,
247 Box2D = 51,
248 Box3f = 52,
249 Box3d = 53,
252 Sphere3f = 56,
253 Sphere3d = 57,
254
255 BoolArray = 58,
256 ColorArray = 59,
257 DateTimeArray = 60,
258 DoubleArray = 61,
259 EnumArray = 62,
260 FloatArray = 63,
261 GuidArray = 64,
262 Int8Array = 65,
263 Int16Array = 66,
264 Int32Array = 67,
265 Int64Array = 68,
266 IntRectArray = 69,
267 LinearColorArray = 70,
268 NameArray = 71,
270 StringArray = 73,
271 TimespanArray = 74,
272 TwoVectorsArray = 75,
273 ByteArray = 2,
274 ByteArray64 = 3,
275 UInt16Array = 76,
276 UInt32Array = 77,
277 UInt64Array = 78,
278 Vector2dArray = 79,
279 IntPointArray = 80,
280 IntVectorArray = 81,
282 Float16Array = 83,
283 OrientedBoxArray = 84,
284 FrameNumberArray = 85,
285 FrameRateArray = 86,
286 FrameTimeArray = 87,
288 Matrix44fArray = 89,
289 Matrix44dArray = 90,
290 Plane4fArray = 91,
291 Plane4dArray = 92,
292 Quat4fArray = 93,
293 Quat4dArray = 94,
294 Rotator3fArray = 95,
295 Rotator3dArray = 96,
296 Transform3fArray = 97,
297 Transform3dArray = 98,
298 Vector3fArray = 99,
299 Vector3dArray = 100,
300 Vector2fArray = 101,
301 Vector4fArray = 102,
302 Vector4dArray = 103,
303 Box2fArray = 104,
304 Box2DArray = 105,
305 Box3fArray = 106,
306 Box3dArray = 107,
309 Sphere3fArray = 110,
310 Sphere3dArray = 111,
311
312 //Max should always be updated if we add a new supported type
313 Max = 112
314 };
315
320
326
327 template<typename T, typename Enable = void>
328 struct UE_DEPRECATED(5.7, "No longer used: The AttributeStorage handles all supported type traits internally now.") TAttributeTypeTraits
329 {
330 static constexpr EAttributeTypes GetType()
331 {
333 }
334
335 template<typename ValueType>
336 static FString ToString(const ValueType& Value)
337 {
338 return TEXT("Unknown type");
339 }
340 };
341
342 template<typename ValueType>
343 INTERCHANGECORE_API FString AttributeValueToString(const ValueType& Value);
344
351 {
352 None = 0x0,
353 //Success result.
354 Operation_Success = 0x1,
355
356
357 //Operation error results from here.
358
359 //The type of the value was not matching the existing type. We cannot change the type of an existing attribute.
360 Operation_Error_WrongType = (0x1 << 20),
361 //The size of the value is different from the existing size. We cannot have a different size.
362 Operation_Error_WrongSize = (0x1 << 21),
363 //The AttributeAllocationTable has an attribute whose offset is not valid in the storage.
365 //We cannot find the specified key.
366 Operation_Error_CannotFoundKey = (0x1 << 23),
367 //There was an error when removing an attribute from the AttributeAllocationTable. The TArray remove has failed.
369 //We try to override an attribute but the specified options do not allow override.
371 //The storage is invalid (nullptr).
372 Operation_Error_InvalidStorage = (0x1 << 26),
373 //Cannot get a valid value data pointer.
375 };
376
378
379
387
396
404
405
410 {
411 None = 0x0,
412 Option_Override = 0x1,
413 //allow the AddAttribute to override the value if it exists.
414 };
415
417
418
425
430 {
431 None = 0x0,
432 NoHash = 0x1, /* No hash attribute will not be part of the hash result when calling GetStorageHash. */
433 };
434
436
437
444
445 template<typename T>
446 struct UE_DEPRECATED(5.7, "No longer used.") TSpecializeType
447 {
448 typedef T Type;
449 };
450
451 template<typename T>
453 {
454 static constexpr bool bIsArrayOfStringType = false;
455 static constexpr bool bIsArrayOfEnumType = false;
456 static constexpr bool bIsArrayOfEnumAsByteType = false;
457 };
458
459 template<typename T>
460 inline constexpr bool TIsStringType = std::is_same_v<T, FString> || std::is_same_v<T, FName> || std::is_same_v<T, FSoftObjectPath>;
461
462 template<typename T>
464
465 template<typename T>
467
468 template<typename T>
470
471 template<typename T>
473
474 template<typename T>
483
494 {
495 public:
496 template<typename T, typename Enable = void>
498
502 template<typename T>
527
528 // Redirect enum instantiations to underlying type
529 template<typename E>
530 class TAttributeHandle<E, std::enable_if_t<TIsEnum<E>::Value>>
531 : public TAttributeHandle<std::underlying_type_t<E>>
532 {
533 public:
534 using UnderlyingType = std::underlying_type_t<E>;
536
537 using Base::Base;
538
543
544 // Note: Since we derive TAttributeHandle<std::underlying_type_t<E>> we also get the
545 // base class overloads for free, and can Get()/Set() with the underlying type directly!
547 {
548 return Base::Get((UnderlyingType&)Value);
549 }
550
552 {
553 return Base::Set((const UnderlyingType&)Value);
554 }
555
556 protected:
558 };
559
560 // Redirect TEnumAsByte<T> instantiations to uint8
561 template<typename B>
562 class TAttributeHandle<B, std::enable_if_t<TIsTEnumAsByte<B>::Value>>
563 : public TAttributeHandle<uint8>
564 {
565 public:
568
569 using Base::Base;
570
575
577 {
578 return Base::Get((UnderlyingType&)Value);
579 }
580
582 {
583 return Base::Set((const UnderlyingType&)Value);
584 }
585
586 protected:
588 };
589
590 // Redirect TArray<enum> instantiations to TArray<underlying type>
591 template<typename T>
592 class TAttributeHandle<T, std::enable_if_t<TIsArrayOfEnumType<T>>>
593 : public TAttributeHandle<TArray<std::underlying_type_t<typename T::ElementType>>>
594 {
595 public:
596 using UnderlyingType = std::underlying_type_t<typename T::ElementType>;
598
599 using Base::Base;
600
605
607 {
608 return Base::Get((TArray<UnderlyingType>&)Value);
609 }
610
612 {
613 return Base::Set((const TArray<UnderlyingType>&)Value);
614 }
615
616 protected:
618 };
619
620 // Redirect TArray<TEnumAsByte<T>> instantiations to TArray<uint8>
621 template<typename T>
622 class TAttributeHandle<T, std::enable_if_t<TIsArrayOfEnumAsByteType<T>>>
623 : public TAttributeHandle<TArray<uint8>>
624 {
625 public:
628
629 using Base::Base;
630
635
637 {
638 return Base::Get((TArray<UnderlyingType>&)Value);
639 }
640
642 {
643 return Base::Set((const TArray<UnderlyingType>&)Value);
644 }
645
646 protected:
648 };
649
650 FAttributeStorage() = default;
651
653
655
667 template<typename T, typename = std::enable_if_t<TIsNonEnumType<T>>>
669
670 // Redirect enum instantiations to underlying type
673 {
674 using UnderlyingType = std::underlying_type_t<E>;
675 return RegisterAttribute<UnderlyingType>(ElementAttributeKey, (const UnderlyingType&)DefaultValue, AttributeProperty);
676 }
677
678 // Redirect TEnumAsByte instantiations to underlying type
685
686 // Redirect TArray<enum> instantiations to TArray<underlying type>
687 template<typename T, typename = std::enable_if_t<TIsArrayOfEnumType<T>>, int = 0, int = 0, int = 0>
689 {
690 using UnderlyingType = std::underlying_type_t<typename T::ElementType>;
692 }
693
694 // Redirect TArray<TEnumAsByte> instantiations to TArray<underlying type>
695 template<typename T, typename = std::enable_if_t<TIsArrayOfEnumAsByteType<T>>, int = 0, int = 0, int = 0, int = 0>
701
712
724 template<typename T, typename = std::enable_if_t<TIsNonEnumType<T>>>
726
727 // Redirect enum instantiations to underlying type
730 {
731 using UnderlyingType = std::underlying_type_t<E>;
733 }
734
735 // Redirect TEnumAsByte instantiations to underlying type
742
743 // Redirect TArray<enum> instantiations to TArray<underlying type>
744 template<typename ArrayOfE, typename = std::enable_if_t<TIsArrayOfEnumType<ArrayOfE>>, int = 0, int = 0, int = 0>
746 {
747 using UnderlyingType = std::underlying_type_t<typename ArrayOfE::ElementType>;
749 }
750
751 // Redirect TArray<TEnumAsByte> instantiations to TArray<uint8>
752 template<typename ArrayOfB, typename = std::enable_if_t<TIsArrayOfEnumAsByteType<ArrayOfB>>, int = 0, int = 0, int = 0, int = 0>
758
765 template<typename T, typename = std::enable_if_t<TIsNonEnumType<T>>>
767
768 // Redirect enum instantiations to underlying type
771 {
772 using UnderlyingType = std::underlying_type_t<E>;
774 }
775
776 // Redirect TEnumAsByte instantiations to underlying type
783
784 // Redirect TArray<enum> instantiations to TArray<underlying type>
785 template<typename ArrayOfE, typename = std::enable_if_t<TIsArrayOfEnumType<ArrayOfE>>, int = 0, int = 0, int = 0>
787 {
788 using UnderlyingType = std::underlying_type_t<typename ArrayOfE::ElementType>;
790 }
791
792 // Redirect TArray<TEnumAsByte> instantiations to TArray<uint8>
793 template<typename ArrayOfB, typename = std::enable_if_t<TIsArrayOfEnumAsByteType<ArrayOfB>>, int = 0, int = 0, int = 0, int = 0>
799
807
815
821
829
838
847
859
870
881
887 inline float GetDefragRatio() const
888 {
889 return DefragRatio;
890 }
891
894
896 {
897 Ar << Storage.FragmentedMemoryCost;
898 Ar << Storage.DefragRatio;
899 Ar << Storage.AttributeAllocationTable;
900 Ar << Storage.AttributeStorage;
901
902 if (Ar.IsLoading())
903 {
904 Storage.UpdateAllocationCount();
905 }
906
907 return Ar;
908 }
909
917
918 protected:
921 {
922 // clang fix for std::is_default_constructible_v
923 // returning false in inlined code of outer class
925
926 //The offsets of our allocations in the storage
928 //The sizes of our allocations in the storage, in bytes
930 //The real type of the attribute
932 //The attribute properties
934 //128 bit Attribute hash
936
938 {
939 //Offset is a unique key
940 return Offsets == Other.Offsets
941 && Sizes == Other.Sizes
942 && Type == Other.Type
943 && Property == Other.Property
944 && Hash == Other.Hash;
945 }
946
947 //Serialization
949 {
951
952 if (Ar.IsLoading()
954 {
956 Ar << OldOffset;
958
959 uint64 OldSize;
960 Ar << OldSize;
961 AttributeAllocationInfo.Sizes = {OldSize};
962 }
963 else
964 {
965 Ar << AttributeAllocationInfo.Offsets;
966 Ar << AttributeAllocationInfo.Sizes;
967 }
968
969 Ar << AttributeAllocationInfo.Type;
970 Ar << AttributeAllocationInfo.Property;
971 Ar << AttributeAllocationInfo.Hash;
972 return Ar;
973 }
974 };
975
985 INTERCHANGECORE_API bool AreAllocationInfosEqual(const FAttributeKey& BaseKey, const FAttributeAllocationInfo& BaseInfo, const FAttributeStorage& VersionStorage, const FAttributeAllocationInfo& VersionInfo) const;
986
997 template<typename T>
999
1000 template<typename T>
1001 EAttributeStorageResult SetAttribute(FAttributeAllocationInfo* AttributeAllocationInfo, const T& Value);
1002
1004 void DefragInternal();
1005
1006 template<typename T>
1007 UE_DEPRECATED(5.7, "No longer used.")
1009 {
1010 return 1;
1011 }
1012
1013 const FStringView GetFStringViewAttributeFromStorage(const uint8* StorageData, const FAttributeAllocationInfo* AttributeAllocationInfo, int32 ElementIndex = 0) const;
1014
1015 template<typename MultiSizeType>
1017
1018 template<typename ArrayType>
1020
1021 template<typename T>
1023
1024 void UpdateAllocationInfoHash(FAttributeAllocationInfo& AllocationInfo);
1025
1026 void UpdateAllocationCount();
1027
1030
1033
1039
1044 float DefragRatio = 0.1f;
1045
1051
1056 };
1057 } //ns interchange
1058}
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#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::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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
Definition NameTypes.h:617
Definition Text.h:385
Definition Array.h:670
Definition UnrealString.h.inl:34
TAttributeHandle(const TAttributeHandle< UnderlyingType > &Other)
Definition AttributeStorage.h:571
EAttributeStorageResult Get(B &Value) const
Definition AttributeStorage.h:576
EAttributeStorageResult Set(const B &Value)
Definition AttributeStorage.h:581
EAttributeStorageResult Set(const E &Value)
Definition AttributeStorage.h:551
TAttributeHandle(const TAttributeHandle< UnderlyingType > &Other)
Definition AttributeStorage.h:539
EAttributeStorageResult Get(E &Value) const
Definition AttributeStorage.h:546
EAttributeStorageResult Set(const T &Value)
Definition AttributeStorage.h:641
TAttributeHandle(const TAttributeHandle< TArray< UnderlyingType > > &Other)
Definition AttributeStorage.h:631
EAttributeStorageResult Get(T &Value) const
Definition AttributeStorage.h:636
EAttributeStorageResult Set(const T &Value)
Definition AttributeStorage.h:611
EAttributeStorageResult Get(T &Value) const
Definition AttributeStorage.h:606
TAttributeHandle(const TAttributeHandle< TArray< UnderlyingType > > &Other)
Definition AttributeStorage.h:601
std::underlying_type_t< typename T::ElementType > UnderlyingType
Definition AttributeStorage.h:596
Definition AttributeStorage.h:494
EAttributeStorageResult SetAttribute(const FAttributeKey &ElementAttributeKey, const T &Value)
Definition AttributeStorage.cpp:1955
TArray64< uint8 > AttributeStorage
Definition AttributeStorage.h:1032
EAttributeStorageResult RegisterAttribute(const FAttributeKey &ElementAttributeKey, const B &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
Definition AttributeStorage.h:680
INTERCHANGECORE_API void SetDefragRatio(const float InDefragRatio)
Definition AttributeStorage.cpp:1933
INTERCHANGECORE_API FGuid GetStorageHash() const
Definition AttributeStorage.cpp:1405
EAttributeStorageResult MultiSizeSetAttribute(FAttributeAllocationInfo *AttributeAllocationInfo, int32 TargetAllocationIndex, const MultiSizeType &Value, const uint8 *SourceDataPtr, bool &bOutNeedsDefrag)
Definition AttributeStorage.cpp:1988
EAttributeStorageResult GetAttribute(const FAttributeKey &ElementAttributeKey, E &OutValue) const
Definition AttributeStorage.h:729
INTERCHANGECORE_API EAttributeStorageResult UnregisterAttribute(const FAttributeKey &ElementAttributeKey)
Definition AttributeStorage.cpp:1256
INTERCHANGECORE_API void Reserve(int64 NewAttributeCount, int64 NewStorageSize)
Definition AttributeStorage.cpp:1940
INTERCHANGECORE_API EAttributeTypes GetAttributeType(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.cpp:1358
void UpdateAllocationInfoHash(FAttributeAllocationInfo &AllocationInfo)
Definition AttributeStorage.cpp:2398
friend void CopyStorageAttributesInternal(const FAttributeStorage &SourceStorage, FAttributeStorage &DestinationStorage, const TArray< T > &AttributeKeys)
Definition AttributeStorage.cpp:1796
static uint64 GetValueSize(const T &Value)
Definition AttributeStorage.h:1008
void DefragInternal()
Definition AttributeStorage.cpp:2155
EAttributeStorageResult GetAttribute(const FAttributeKey &ElementAttributeKey, ArrayOfE &OutValue) const
Definition AttributeStorage.h:745
const FStringView GetFStringViewAttributeFromStorage(const uint8 *StorageData, const FAttributeAllocationInfo *AttributeAllocationInfo, int32 ElementIndex=0) const
Definition AttributeStorage.cpp:1961
INTERCHANGECORE_API void GetAttributeKeys(TArray< FAttributeKey > &AttributeKeys) const
Definition AttributeStorage.cpp:1378
INTERCHANGECORE_API FAttributeStorage & operator=(const FAttributeStorage &Other)
Definition AttributeStorage.cpp:1099
EAttributeStorageResult GetAttribute(const FAttributeKey &ElementAttributeKey, B &OutValue) const
Definition AttributeStorage.h:737
TAttributeHandle< ArrayOfE > GetAttributeHandle(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.h:786
void UpdateAllocationCount()
Definition AttributeStorage.cpp:2420
uint64 FragmentedMemoryCost
Definition AttributeStorage.h:1038
static INTERCHANGECORE_API void CompareStorage(const FAttributeStorage &BaseStorage, const FAttributeStorage &VersionStorage, TArray< FAttributeKey > &RemovedAttributes, TArray< FAttributeKey > &AddedAttributes, TArray< FAttributeKey > &ModifiedAttributes)
Definition AttributeStorage.cpp:1760
INTERCHANGECORE_API FGuid GetAttributeHash(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.cpp:1384
TAttributeHandle< ArrayOfB > GetAttributeHandle(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.h:794
float DefragRatio
Definition AttributeStorage.h:1044
EAttributeStorageResult RegisterAttribute(const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
Definition AttributeStorage.h:688
INTERCHANGECORE_API EAttributeStorageResult RegisterAttribute(const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
INTERCHANGECORE_API bool ContainAttribute(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.cpp:1370
INTERCHANGECORE_API EAttributeStorageResult GetAttribute(const FAttributeKey &ElementAttributeKey, T &OutValue) const
Definition AttributeStorage.cpp:1284
static INTERCHANGECORE_API void CopyStorageAttributes(const FAttributeStorage &SourceStorage, FAttributeStorage &DestinationStorage, const TArray< FAttributeKey > &AttributeKeys)
Definition AttributeStorage.cpp:1928
TAttributeHandle< E > GetAttributeHandle(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.h:770
EAttributeStorageResult RegisterAttribute(const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
Definition AttributeStorage.h:696
EAttributeStorageResult GetAttribute(const FAttributeKey &ElementAttributeKey, ArrayOfB &OutValue) const
Definition AttributeStorage.h:753
EAttributeStorageResult GenericArrayGetAttribute(const FAttributeKey &ElementAttributeKey, ArrayType &OutValue) const
Definition AttributeStorage.cpp:2075
friend FArchive & operator<<(FArchive &Ar, FAttributeStorage &Storage)
Definition AttributeStorage.h:895
INTERCHANGECORE_API TAttributeHandle< T > GetAttributeHandle(const FAttributeKey &ElementAttributeKey) const
EAttributeStorageResult RegisterAttribute(const FAttributeKey &ElementAttributeKey, const E &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
Definition AttributeStorage.h:672
TAttributeHandle< B > GetAttributeHandle(const FAttributeKey &ElementAttributeKey) const
Definition AttributeStorage.h:778
INTERCHANGECORE_API bool AreAllocationInfosEqual(const FAttributeKey &BaseKey, const FAttributeAllocationInfo &BaseInfo, const FAttributeStorage &VersionStorage, const FAttributeAllocationInfo &VersionInfo) const
Definition AttributeStorage.cpp:1475
float GetDefragRatio() const
Definition AttributeStorage.h:887
FCriticalSection StorageMutex
Definition AttributeStorage.h:1055
TMap< FAttributeKey, FAttributeAllocationInfo > AttributeAllocationTable
Definition AttributeStorage.h:1029
uint32 AllocationCount
Definition AttributeStorage.h:1050
Definition OverriddenPropertySet.cpp:45
Definition SoftObjectPath.cpp:24
type
Definition TestServer.py:515
bool HasAttributeStorageAddOption(const EAttributeStorageAddOptions Options, const EAttributeStorageAddOptions RefOptions)
Definition AttributeStorage.h:421
bool IsAttributeStorageResultSuccess(const EAttributeStorageResult Result)
Definition AttributeStorage.h:392
EAttributeTypes
Definition AttributeStorage.h:196
constexpr bool TIsArrayOfEnumAsByteType
Definition AttributeStorage.h:469
constexpr bool TIsStringType
Definition AttributeStorage.h:460
EAttributeStorageAddOptions
Definition AttributeStorage.h:410
void LogAttributeStorageErrors(const EAttributeStorageResult Result, const FString OperationName, const FAttributeKey AttributeKey)
Definition AttributeStorage.cpp:1038
uint32 GetTypeHash(const FAttributeKey &AttributeKey)
Definition AttributeStorage.h:185
constexpr bool TIsNonEnumType
Definition AttributeStorage.h:472
FString AttributeTypeToString(EAttributeTypes AttributeType)
Definition AttributeStorage.cpp:859
EAttributeStorageResult
Definition AttributeStorage.h:351
EAttributeTypes StringToAttributeType(const FString &AttributeTypeString)
Definition AttributeStorage.cpp:986
EAttributeProperty
Definition AttributeStorage.h:430
constexpr bool TIsArrayOfStringType
Definition AttributeStorage.h:463
FString AttributeValueToString(const ValueType &Value)
Definition AttributeStorage.cpp:1001
constexpr bool TIsArrayOfEnumType
Definition AttributeStorage.h:466
bool HasAttributeProperty(const EAttributeProperty PropertyA, const EAttributeProperty PropertyB)
Definition AttributeStorage.h:440
bool HasAttributeStorageResult(const EAttributeStorageResult Result, const EAttributeStorageResult RefResult)
Definition AttributeStorage.h:383
Definition AdvancedWidgetsModule.cpp:13
Definition AttributeCurve.h:23
Definition Guid.h:109
INTERCHANGECORE_API static const FGuid GUID
Definition InterchangeCustomVersion.h:28
@ MultipleAllocationsPerAttributeInStorageFixed
Definition InterchangeCustomVersion.h:20
Definition IsEnum.h:7
Definition IsTEnumAsByte.h:20
Definition Tuple.h:652
Definition AttributeStorage.h:67
FAttributeKey(FAttributeKey &&Other)=default
FAttributeKey & operator=(FAttributeKey &&)=default
FAttributeKey & operator=(const FText &Other)
Definition AttributeStorage.h:125
FAttributeKey & operator=(const TCHAR *Other)
Definition AttributeStorage.h:131
FAttributeKey & operator=(FString &&Other)
Definition AttributeStorage.h:119
FAttributeKey & operator=(const FString &Other)
Definition AttributeStorage.h:113
bool operator==(const FAttributeKey &Other) const
Definition AttributeStorage.h:137
FAttributeKey(const FStringView &Other)
Definition AttributeStorage.h:82
FAttributeKey(FString &&Other)
Definition AttributeStorage.h:92
friend FArchive & operator<<(FArchive &Ar, FAttributeKey &AttributeKey)
Definition AttributeStorage.h:167
const FString & ToString() const
Definition AttributeStorage.h:173
FAttributeKey(const FText &Other)
Definition AttributeStorage.h:97
bool operator<=(const FAttributeKey &Other) const
Definition AttributeStorage.h:152
FAttributeKey(const FAttributeKey &Other)=default
bool operator>=(const FAttributeKey &Other) const
Definition AttributeStorage.h:162
FAttributeKey(const TCHAR *Other)
Definition AttributeStorage.h:102
bool operator<(const FAttributeKey &Other) const
Definition AttributeStorage.h:147
FName ToName() const
Definition AttributeStorage.h:178
FAttributeKey(const FString &Other)
Definition AttributeStorage.h:87
bool operator>(const FAttributeKey &Other) const
Definition AttributeStorage.h:157
bool operator!=(const FAttributeKey &Other) const
Definition AttributeStorage.h:142
FAttributeKey & operator=(const FName &Other)
Definition AttributeStorage.h:107
FAttributeKey(const FName &Other)
Definition AttributeStorage.h:77
FString Key
Definition AttributeStorage.h:68
FAttributeKey & operator=(const FAttributeKey &)=default
bool operator==(const FAttributeAllocationInfo &Other) const
Definition AttributeStorage.h:937
FAttributeAllocationInfo()
Definition AttributeStorage.h:924
friend FArchive & operator<<(FArchive &Ar, FAttributeAllocationInfo &AttributeAllocationInfo)
Definition AttributeStorage.h:948
TArray< uint64 > Offsets
Definition AttributeStorage.h:927
EAttributeTypes Type
Definition AttributeStorage.h:931
EAttributeProperty Property
Definition AttributeStorage.h:933
TArray< uint64 > Sizes
Definition AttributeStorage.h:929
Definition AttributeStorage.h:453
static constexpr bool bIsArrayOfEnumAsByteType
Definition AttributeStorage.h:456
static constexpr bool bIsArrayOfStringType
Definition AttributeStorage.h:454
static constexpr bool bIsArrayOfEnumType
Definition AttributeStorage.h:455
Definition WindowsRedistributableValidation.h:9