UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SharedStruct.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "StructUtils.h"
10#include <type_traits>
11
12#include "SharedStruct.generated.h"
13
14#define UE_API COREUOBJECT_API
15
16struct FInstancedStruct;
17template<typename BaseStructT> struct TInstancedStruct;
18template<typename BaseStructT> struct TStructView;
19struct FConstStructView;
20template<typename BaseStructT> struct TConstStructView;
21
23
39{
41 {
42 ScriptStruct->DestroyStruct(GetMutableMemory());
43 }
44
49
51 {
53 {
54 checkf(StructSharedMemory != nullptr
55 , TEXT("FStructSharedMemoryDeleter is expected to be used only with a valid FStructSharedMemory. "
56 "See FStructSharedMemory::Create/CreateArgs"));
57
58 StructSharedMemory->~FStructSharedMemory();
60 }
61 };
62
64 {
65 checkf(InScriptStruct, TEXT("FStructSharedMemory::Create - script struct cannot be null"));
66
67 FStructSharedMemory* const StructMemory = CreateImpl(InScriptStruct, InStructMemory);
68 checkf(StructMemory != nullptr, TEXT("CreateImpl is expected to always return a valid pointer to FStructSharedMemory."));
69
70 return MakeShareable(StructMemory, FStructSharedMemoryDeleter());
71 }
72
73 UE_DEPRECATED(5.6, "FStructSharedMemory::Create should be passed a pointer.")
78
79 template<typename T, typename... TArgs>
81 {
82 UE::StructUtils::CheckStructType<T>();
83
84 FStructSharedMemory* const StructMemory = CreateImpl(TBaseStructure<T>::Get());
85 checkf(StructMemory != nullptr, TEXT("CreateImpl is expected to always return a valid pointer to FStructSharedMemory."));
86
87 new (StructMemory->GetMutableMemory()) T(Forward<TArgs>(InArgs)...);
88 return MakeShareable(StructMemory, FStructSharedMemoryDeleter());
89 }
90
92 const uint8* GetMemory() const
93 {
94 return Align((uint8*)StructMemory, ScriptStruct->GetMinAlignment());
95 }
96
99 {
100 return Align((uint8*)StructMemory, ScriptStruct->GetMinAlignment());
101 }
102
105 {
106 return *ObjectPtrDecay(ScriptStruct);
107 }
108
110 {
111 return ScriptStruct;
112 }
113
114private:
115 explicit FStructSharedMemory(const UScriptStruct* InScriptStruct, const uint8* InStructMemory = nullptr)
116 : ScriptStruct(InScriptStruct)
117 {
118 ScriptStruct->InitializeStruct(GetMutableMemory());
119
120 if (InStructMemory)
121 {
123 }
124 }
125
126 static FStructSharedMemory* CreateImpl(const UScriptStruct* InScriptStruct, const uint8* InStructMemory = nullptr)
127 {
128 // Align RequiredSize to InScriptStruct's alignment to effectively add padding in between ScriptStruct and
129 // StructMemory. GetMemory will then round &StructMemory up past this 'padding' to the nearest aligned address.
130 const int32 RequiredSize = static_cast<int32>(Align(sizeof(FStructSharedMemory), InScriptStruct->GetMinAlignment())) + InScriptStruct->GetStructureSize();
131 // Code analysis is unable to understand correctly what we are doing here, so disabling the warning C6386: Buffer overrun while writing to...
132 CA_SUPPRESS( 6386 )
134 return StructMemory;
135 }
136
137 TObjectPtr<const UScriptStruct> ScriptStruct;
138
143 uint8 StructMemory[0];
144};
145
147
159USTRUCT()
161{
163
164 friend struct FConstSharedStruct;
165
166 FSharedStruct() = default;
167
169 {
170 }
171
175
179
181 UE_API bool Identical(const FSharedStruct* Other, uint32 PortFlags) const;
182 UE_API void AddStructReferencedObjects(class FReferenceCollector& Collector) const;
183
186 {
187 return StructMemoryPtr ? &(StructMemoryPtr.Get()->GetScriptStruct()) : nullptr;
188 }
189
191 {
192 return StructMemoryPtr ? &StructMemoryPtr.Get()->GetScriptStructPtr() : nullptr;
193 }
194
197 {
198 return StructMemoryPtr ? StructMemoryPtr.Get()->GetMutableMemory() : nullptr;
199 }
200
202 void Reset()
203 {
204 StructMemoryPtr.Reset();
205 }
206
208 template<typename T>
210 {
211 UE::StructUtils::CheckStructType<T>();
212
213 InitializeAs(TBaseStructure<T>::Get(), nullptr);
214 }
215
217 template <typename T>
218 void InitializeAs(const T& Struct)
219 {
220 if constexpr (UE::StructUtils::TIsSharedInstancedOrViewStruct_V<T>)
221 {
222 InitializeAs(Struct.GetScriptStruct(), Struct.GetMemory());
223 }
224 else
225 {
226 InitializeAs(TBaseStructure<T>::Get(), reinterpret_cast<const uint8*>(&Struct));
227 }
228 }
229
232 {
233 if (InScriptStruct)
234 {
236 }
237 else
238 {
239 Reset();
240 }
241 }
242
244 template<typename T, typename... TArgs>
245 void InitializeAs(TArgs&&... InArgs)
246 {
247 UE::StructUtils::CheckStructType<T>();
248
249 StructMemoryPtr = FStructSharedMemory::CreateArgs<T>(Forward<TArgs>(InArgs)...);
250 }
251
253 template<typename T>
255 {
256 FSharedStruct SharedStruct;
257 SharedStruct.InitializeAs<T>();
258 return SharedStruct;
259 }
260
262 template<typename T>
263 static FSharedStruct Make(const T& Struct)
264 {
265 FSharedStruct SharedStruct;
266 SharedStruct.InitializeAs(Struct);
267 return SharedStruct;
268 }
269
272 {
273 FSharedStruct SharedStruct;
275 return SharedStruct;
276 }
277
279 template<typename T, typename... TArgs>
280 static FSharedStruct Make(TArgs&&... InArgs)
281 {
282 FSharedStruct SharedStruct;
283 SharedStruct.InitializeAs<T>(Forward<TArgs>(InArgs)...);
284 return SharedStruct;
285 }
286
288 template<typename T>
289 T& Get() const
290 {
291 return UE::StructUtils::GetStructRef<T>(GetScriptStruct(), GetMemory());
292 }
293
295 template<typename T>
296 T* GetPtr() const
297 {
298 return UE::StructUtils::GetStructPtr<T>(GetScriptStruct(), GetMemory());
299 }
300
302 bool IsValid() const
303 {
304 return GetMemory() != nullptr && GetScriptStruct() != nullptr;
305 }
306
308 template <typename OtherType>
309 bool operator==(const OtherType& Other) const
310 {
311 return ((GetScriptStruct() == Other.GetScriptStruct()) && (GetMemory() == Other.GetMemory()));
312 }
313
314 template <typename OtherType>
315 bool operator!=(const OtherType& Other) const
316 {
317 return !operator==(Other);
318 }
319
324 template <typename OtherType>
325 bool CompareStructValues(const OtherType& Other, uint32 PortFlags = 0) const
326 {
327 UE::StructUtils::CheckWrapperType<OtherType>();
328 const UScriptStruct* ScriptStruct = GetScriptStruct();
329 return (ScriptStruct == Other.GetScriptStruct())
330 && (!ScriptStruct || ScriptStruct->CompareScriptStruct(GetMemory(), Other.GetMemory(), PortFlags));
331 }
332
333protected:
335};
336
347template<typename BaseStructT>
349{
350 explicit TSharedStruct() = default;
351
353 template<typename T = BaseStructT>
354 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
356 : SharedStruct(InOther.SharedStruct)
357 {
358 }
359
360 template<typename T = BaseStructT>
361 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
363 : SharedStruct(MoveTemp(InOther.SharedStruct))
364 {
365 }
366
368 template<typename T = BaseStructT>
369 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
371 {
372 if (this != &InOther)
373 {
374 SharedStruct = InOther.SharedStruct;
375 }
376 return *this;
377 }
378
379 template<typename T = BaseStructT>
380 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
382 {
383 if (this != &InOther)
384 {
385 SharedStruct = MoveTemp(InOther.SharedStruct);
386 }
387 return *this;
388 }
389
392 {
393 return SharedStruct.GetScriptStruct();
394 }
395
397 {
398 return SharedStruct.GetScriptStructPtr();
399 }
400
403 {
404 return SharedStruct.GetMemory();
405 }
406
408 void Reset()
409 {
410 SharedStruct.Reset();
411 }
412
414 template<typename T = BaseStructT>
415 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
417 {
418 SharedStruct.InitializeAs<T>();
419 }
420
422 template<typename T = BaseStructT>
423 requires(
424 std::is_base_of_v<BaseStructT, std::decay_t<T>>
425 && !(std::is_same_v<TStructView<T>, T>
426 || std::is_same_v<TConstStructView<T>, T>
427 || std::is_same_v<TSharedStruct<T>, T>
428 || std::is_same_v<TConstSharedStruct<T>, T>
429 || std::is_same_v<TInstancedStruct<T>, T>))
430 void Initialize(const T& Struct)
431 {
432 SharedStruct.InitializeAs(TBaseStructure<T>::Get(), reinterpret_cast<const uint8*>(&Struct));
433 }
434
436 template<typename T = BaseStructT, typename... TArgs>
437 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
438 void Initialize(TArgs&&... InArgs)
439 {
440 SharedStruct.InitializeAs(Forward<TArgs>(InArgs)...);
441 }
442
444 template<typename T = BaseStructT>
445 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
447 {
448 return FSharedStruct::Make<T>();
449 }
450
452 template<typename T = BaseStructT>
453 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
454 static TSharedStruct Make(const T& Struct)
455 {
456 return FSharedStruct::Make<T>(Struct);
457 }
458
460 template< typename... TArgs>
461 static TSharedStruct Make(TArgs&&... InArgs)
462 {
463 return FSharedStruct::Make<BaseStructT>(Forward<TArgs>(InArgs)...);
464 }
465
467 template<typename T = BaseStructT>
468 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
469 T& Get() const
470 {
471 return SharedStruct.Get<T>();
472 }
473
475 template<typename T = BaseStructT>
476 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
477 T* GetPtr() const
478 {
479 return SharedStruct.GetPtr<T>();
480 }
481
483 bool IsValid() const
484 {
485 return SharedStruct.IsValid();
486 }
487
489 template<typename T = BaseStructT>
490 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
491 bool operator==(const T& Other) const
492 {
493 return SharedStruct.operator==(Other);
494 }
495
496 template<typename T = BaseStructT>
497 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
498 bool operator!=(const T& Other) const
499 {
500 return SharedStruct.operator!=(Other);
501 }
502
503private:
512 FSharedStruct SharedStruct;
513
514 template <typename U> friend struct TSharedStruct;
515};
516
517template<>
519{
520 enum
521 {
522 WithIdentical = true,
523 WithAddStructReferencedObjects = true,
524 };
525};
526
528
536USTRUCT()
538{
540
542
545 : StructMemoryPtr(SharedStruct.StructMemoryPtr)
546 {}
547
550 : StructMemoryPtr(MoveTemp(SharedStruct.StructMemoryPtr))
551 {}
552
555 {
556 StructMemoryPtr = SharedStruct.StructMemoryPtr;
557 return *this;
558 }
559
562 {
563 StructMemoryPtr = MoveTemp(InSharedStruct.StructMemoryPtr);
564 return *this;
565 }
566
568 UE_API bool Identical(const FConstSharedStruct* Other, uint32 PortFlags) const;
569 UE_API void AddStructReferencedObjects(class FReferenceCollector& Collector);
570
573 {
574 return StructMemoryPtr ? &(StructMemoryPtr.Get()->GetScriptStruct()) : nullptr;
575 }
576
578 {
579 return StructMemoryPtr ?
580 &const_cast<FStructSharedMemory*>(StructMemoryPtr.Get())->GetScriptStructPtr() : nullptr;
581 }
582
584 const uint8* GetMemory() const
585 {
586 return StructMemoryPtr ? StructMemoryPtr.Get()->GetMemory() : nullptr;
587 }
588
590 void Reset()
591 {
592 StructMemoryPtr.Reset();
593 }
594
596 template<typename T>
598 {
599 UE::StructUtils::CheckStructType<T>();
600
601 InitializeAs(TBaseStructure<T>::Get(), nullptr);
602 }
603
605 template <typename T>
606 void InitializeAs(const T& Struct)
607 {
608 if constexpr (UE::StructUtils::TIsSharedInstancedOrViewStruct_V<T>)
609 {
610 InitializeAs(Struct.GetScriptStruct(), Struct.GetMemory());
611 }
612 else
613 {
614 InitializeAs(TBaseStructure<T>::Get(), reinterpret_cast<const uint8*>(&Struct));
615 }
616 }
617
620 {
621 if (InScriptStruct)
622 {
624 }
625 else
626 {
627 Reset();
628 }
629 }
630
632 template<typename T, typename... TArgs>
633 void InitializeAs(TArgs&&... InArgs)
634 {
635 UE::StructUtils::CheckStructType<T>();
636
637 StructMemoryPtr = FStructSharedMemory::CreateArgs<T>(Forward<TArgs>(InArgs)...);
638 }
639
641 template<typename T>
643 {
644 FConstSharedStruct SharedStruct;
645 SharedStruct.InitializeAs<T>();
646 return SharedStruct;
647 }
648
650 template<typename T>
652 {
653 FConstSharedStruct SharedStruct;
654 SharedStruct.InitializeAs<T>(Struct);
655 return SharedStruct;
656 }
657
660 {
661 FConstSharedStruct SharedStruct;
663 return SharedStruct;
664 }
665
667 template<typename T, typename... TArgs>
668 static FConstSharedStruct Make(TArgs&&... InArgs)
669 {
670 FConstSharedStruct SharedStruct;
671 SharedStruct.InitializeAs<T>(Forward<TArgs>(InArgs)...);
672 return SharedStruct;
673 }
674
676 template<typename T>
677 requires (std::is_const_v<T>)
678 constexpr T& Get() const
679 {
680 return UE::StructUtils::GetStructRef<T>(GetScriptStruct(), GetMemory());
681 }
682
684 template<typename T>
685 requires (std::is_const_v<T>)
686 constexpr T* GetPtr() const
687 {
688 return UE::StructUtils::GetStructPtr<T>(GetScriptStruct(), GetMemory());
689 }
690
692 bool IsValid() const
693 {
694 return GetMemory() != nullptr && GetScriptStruct() != nullptr;
695 }
696
698 template <typename OtherType>
699 bool operator==(const OtherType& Other) const
700 {
701 return ((GetScriptStruct() == Other.GetScriptStruct()) && (GetMemory() == Other.GetMemory()));
702 }
703
704 template <typename OtherType>
705 bool operator!=(const OtherType& Other) const
706 {
707 return !operator==(Other);
708 }
709
714 template <typename OtherType>
715 bool CompareStructValues(const OtherType& Other, uint32 PortFlags = 0) const
716 {
717 UE::StructUtils::CheckWrapperType<OtherType>();
718 const UScriptStruct* ScriptStruct = GetScriptStruct();
719 return (ScriptStruct == Other.GetScriptStruct())
720 && (!ScriptStruct || ScriptStruct->CompareScriptStruct(GetMemory(), Other.GetMemory(), PortFlags));
721 }
722
723protected:
724
726};
727
738template<typename BaseStructT>
740{
741 explicit TConstSharedStruct() = default;
742
743 template<typename T = BaseStructT>
744 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
746 : ConstSharedStruct(Other.ConstSharedStruct)
747 {
748 }
749
750 template<typename T = BaseStructT>
751 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
752 TConstSharedStruct(const TSharedStruct<T>& ConstSharedStruct)
753 : ConstSharedStruct(ConstSharedStruct.SharedStruct)
754 {
755 }
756
757 template<typename T = BaseStructT>
758 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
760 : ConstSharedStruct(MoveTemp(Other.ConstSharedStruct))
761 {
762 }
763
764 template<typename T = BaseStructT>
765 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
767 : ConstSharedStruct(MoveTemp(ConstSharedStruct.SharedStruct))
768 {
769 }
770
771 template<typename T = BaseStructT>
772 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
774 {
775 if (this == &Other)
776 {
777 ConstSharedStruct = Other.ConstSharedStruct;
778 }
779 return *this;
780 }
781
782 template<typename T = BaseStructT>
783 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
784 TConstSharedStruct& operator=(const TSharedStruct<T>& SharedStruct)
785 {
786 if (this != &SharedStruct)
787 {
788 ConstSharedStruct = SharedStruct.SharedStruct;
789 }
790 return *this;
791 }
792
794 const uint8* GetMemory() const
795 {
796 return ConstSharedStruct.GetMemory();
797 }
798
800 void Reset()
801 {
802 ConstSharedStruct.Reset();
803 }
804
807 {
808 ConstSharedStruct.InitializeAs<BaseStructT>();
809 }
810
812 template<typename T = BaseStructT>
813 requires(
814 std::is_base_of_v<BaseStructT, std::decay_t<T>>
815 && !(std::is_same_v<TStructView<T>, T>
816 || std::is_same_v<TConstStructView<T>, T>
817 || std::is_same_v<TSharedStruct<T>, T>
818 || std::is_same_v<TConstSharedStruct<T>, T>
819 || std::is_same_v<TInstancedStruct<T>, T>))
820 void Initialize(const T& Struct)
821 {
822 ConstSharedStruct.InitializeAs<T>(Struct);
823 }
824
826 template<typename T = BaseStructT, typename... TArgs>
827 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
828 void Initialize(TArgs&&... InArgs)
829 {
830 ConstSharedStruct.InitializeAs<T>(Forward<TArgs>(InArgs)...);
831 }
832
834 template<typename T = BaseStructT>
835 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
837 {
838 FConstSharedStruct SharedStruct;
839 SharedStruct.InitializeAs<BaseStructT>();
840 return SharedStruct;
841 }
842
844 template<typename T = BaseStructT>
845 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
847 {
848 FConstSharedStruct SharedStruct;
849 SharedStruct.InitializeAs<BaseStructT>(Struct);
850 return SharedStruct;
851 }
852
854 template<typename T = BaseStructT>
855 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
857 {
858 TConstSharedStruct SharedStruct;
859 SharedStruct.template Initialize<T>(InStructMemory);
860 return SharedStruct;
861 }
862
864 template<typename T = BaseStructT, typename... TArgs>
865 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
866 static TConstSharedStruct Make(TArgs&&... InArgs)
867 {
868 TConstSharedStruct SharedStruct;
869 SharedStruct.template Initialize<T>(Forward<TArgs>(InArgs)...);
870 return SharedStruct;
871 }
872
874 template<typename T = BaseStructT>
875 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
876 constexpr const T& Get() const
877 {
878 return ConstSharedStruct.Get<T>();
879 }
880
882 template<typename T = BaseStructT>
883 requires (std::is_const_v<T> && std::is_base_of_v<BaseStructT, std::decay_t<T>>)
884 constexpr T& Get() const
885 {
886 return ConstSharedStruct.Get<T>();
887 }
888
890 template<typename T = BaseStructT>
891 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
892 constexpr const T* GetPtr() const
893 {
894 return ConstSharedStruct.GetPtr<T>();
895 }
896
898 template<typename T = BaseStructT>
899 requires (std::is_const_v<T> && std::is_base_of_v<BaseStructT, std::decay_t<T>>)
900 constexpr T* GetPtr() const
901 {
902 return ConstSharedStruct.GetPtr<T>();
903 }
904
906 bool IsValid() const
907 {
908 return ConstSharedStruct.IsValid();
909 }
910
912 template<typename T = BaseStructT>
913 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
914 bool operator==(const T& Other) const
915 {
916 return ConstSharedStruct.operator==(Other);
917 }
918
919 template<typename T = BaseStructT>
920 requires (std::is_base_of_v<BaseStructT, std::decay_t<T>>)
921 bool operator!=(const T& Other) const
922 {
923 return ConstSharedStruct.operator!=(Other);
924 }
925
926private:
935 FConstSharedStruct ConstSharedStruct;
936
937 template <typename U> friend struct TConstSharedStruct;
938};
939
940template<>
942{
943 enum
944 {
945 WithIdentical = true,
946 WithAddStructReferencedObjects = true,
947 };
948};
949
950#undef UE_API
constexpr T Align(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:18
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define CA_SUPPRESS(WarningNumber)
Definition CoreMiscDefines.h:125
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
SharedPointerInternals::TRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject)
Definition SharedPointer.h:1947
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define USTRUCT(...)
Definition ObjectMacros.h:746
const U & ObjectPtrDecay(const T &Value)
Definition ObjectPtr.h:1744
#define UE_API
Definition SharedStruct.h:14
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 UObjectGlobals.h:2492
Definition SharedPointer.h:692
Definition Class.h:1720
virtual COREUOBJECT_API void InitializeStruct(void *Dest, int32 ArrayDim=1) const override
Definition Class.cpp:3782
COREUOBJECT_API void CopyScriptStruct(void *Dest, void const *Src, int32 ArrayDim=1) const
Definition Class.cpp:3730
COREUOBJECT_API bool CompareScriptStruct(const void *A, const void *B, uint32 PortFlags) const
Definition Class.cpp:3696
virtual COREUOBJECT_API void DestroyStruct(void *Dest, int32 ArrayDim=1) const override
Definition Class.cpp:3940
UE_FORCEINLINE_HINT int32 GetMinAlignment() const
Definition Class.h:769
Definition SharedStruct.h:538
FConstSharedStruct()=default
FConstSharedStruct & operator=(FConstSharedStruct &&Other)=default
FConstSharedStruct & operator=(FSharedStruct &&InSharedStruct)
Definition SharedStruct.h:561
constexpr T & Get() const
Definition SharedStruct.h:678
FConstSharedStruct(const FConstSharedStruct &Other)=default
void Reset()
Definition SharedStruct.h:590
static FConstSharedStruct Make(const UScriptStruct *InScriptStruct, const uint8 *InStructMemory=nullptr)
Definition SharedStruct.h:659
FConstSharedStruct & operator=(const FConstSharedStruct &Other)=default
bool operator!=(const OtherType &Other) const
Definition SharedStruct.h:705
bool operator==(const OtherType &Other) const
Definition SharedStruct.h:699
void InitializeAs(const T &Struct)
Definition SharedStruct.h:606
constexpr T * GetPtr() const
Definition SharedStruct.h:686
static FConstSharedStruct Make(const T &Struct)
Definition SharedStruct.h:651
static FConstSharedStruct Make(TArgs &&... InArgs)
Definition SharedStruct.h:668
FConstSharedStruct(const FSharedStruct &SharedStruct)
Definition SharedStruct.h:544
static FConstSharedStruct Make()
Definition SharedStruct.h:642
FConstSharedStruct & operator=(const FSharedStruct &SharedStruct)
Definition SharedStruct.h:554
void InitializeAs()
Definition SharedStruct.h:597
void InitializeAs(const UScriptStruct *InScriptStruct, const uint8 *InStructMemory=nullptr)
Definition SharedStruct.h:619
bool IsValid() const
Definition SharedStruct.h:692
TObjectPtr< const UScriptStruct > * GetScriptStructPtr()
Definition SharedStruct.h:577
const uint8 * GetMemory() const
Definition SharedStruct.h:584
FConstSharedStruct(FSharedStruct &&SharedStruct)
Definition SharedStruct.h:549
TSharedPtr< const FStructSharedMemory > StructMemoryPtr
Definition SharedStruct.h:725
void InitializeAs(TArgs &&... InArgs)
Definition SharedStruct.h:633
FConstSharedStruct(FConstSharedStruct &&Other)=default
bool CompareStructValues(const OtherType &Other, uint32 PortFlags=0) const
Definition SharedStruct.h:715
const UScriptStruct * GetScriptStruct() const
Definition SharedStruct.h:572
Definition StructView.h:217
Definition InstancedStruct.h:32
Definition UnrealMemory.h:94
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition SharedStruct.h:161
uint8 * GetMemory() const
Definition SharedStruct.h:196
static FSharedStruct Make(const T &Struct)
Definition SharedStruct.h:263
T & Get() const
Definition SharedStruct.h:289
FSharedStruct & operator=(const FSharedStruct &InOther)=default
FSharedStruct()=default
FSharedStruct(FSharedStruct &&InOther)=default
FSharedStruct & operator=(FSharedStruct &&InOther)=default
T * GetPtr() const
Definition SharedStruct.h:296
void InitializeAs(const UScriptStruct *InScriptStruct, const uint8 *InStructMemory=nullptr)
Definition SharedStruct.h:231
~FSharedStruct()
Definition SharedStruct.h:168
TSharedPtr< FStructSharedMemory > StructMemoryPtr
Definition SharedStruct.h:334
TObjectPtr< const UScriptStruct > * GetScriptStructPtr() const
Definition SharedStruct.h:190
static FSharedStruct Make(const UScriptStruct *InScriptStruct, const uint8 *InStructMemory=nullptr)
Definition SharedStruct.h:271
void InitializeAs()
Definition SharedStruct.h:209
bool CompareStructValues(const OtherType &Other, uint32 PortFlags=0) const
Definition SharedStruct.h:325
void Reset()
Definition SharedStruct.h:202
bool operator==(const OtherType &Other) const
Definition SharedStruct.h:309
void InitializeAs(const T &Struct)
Definition SharedStruct.h:218
void InitializeAs(TArgs &&... InArgs)
Definition SharedStruct.h:245
bool IsValid() const
Definition SharedStruct.h:302
static FSharedStruct Make()
Definition SharedStruct.h:254
static FSharedStruct Make(TArgs &&... InArgs)
Definition SharedStruct.h:280
const UScriptStruct * GetScriptStruct() const
Definition SharedStruct.h:185
FSharedStruct(const FSharedStruct &InOther)=default
bool operator!=(const OtherType &Other) const
Definition SharedStruct.h:315
void operator()(FStructSharedMemory *StructSharedMemory) const
Definition SharedStruct.h:52
Definition SharedStruct.h:39
const UScriptStruct & GetScriptStruct() const
Definition SharedStruct.h:104
uint8 * GetMutableMemory()
Definition SharedStruct.h:98
FStructSharedMemory(const FStructSharedMemory &Other)=delete
TObjectPtr< const UScriptStruct > & GetScriptStructPtr()
Definition SharedStruct.h:109
FStructSharedMemory(const FStructSharedMemory &&Other)=delete
static TSharedPtr< FStructSharedMemory > CreateArgs(TArgs &&... InArgs)
Definition SharedStruct.h:80
static TSharedPtr< FStructSharedMemory > Create(const UScriptStruct *InScriptStruct, const uint8 *InStructMemory=nullptr)
Definition SharedStruct.h:63
~FStructSharedMemory()
Definition SharedStruct.h:40
FStructSharedMemory & operator=(const FStructSharedMemory &&Other)=delete
const uint8 * GetMemory() const
Definition SharedStruct.h:92
FStructSharedMemory & operator=(const FStructSharedMemory &Other)=delete
Definition Class.h:5288
Definition SharedStruct.h:740
constexpr const T & Get() const
Definition SharedStruct.h:876
TConstSharedStruct()=default
void Initialize()
Definition SharedStruct.h:806
static TConstSharedStruct Make(const uint8 *InStructMemory=nullptr)
Definition SharedStruct.h:856
bool IsValid() const
Definition SharedStruct.h:906
void Reset()
Definition SharedStruct.h:800
constexpr T & Get() const
Definition SharedStruct.h:884
void Initialize(TArgs &&... InArgs)
Definition SharedStruct.h:828
static TConstSharedStruct Make()
Definition SharedStruct.h:836
TConstSharedStruct(TConstSharedStruct< T > &&Other)
Definition SharedStruct.h:759
TConstSharedStruct(const TConstSharedStruct< T > &Other)
Definition SharedStruct.h:745
constexpr T * GetPtr() const
Definition SharedStruct.h:900
TConstSharedStruct(TSharedStruct< T > &&ConstSharedStruct)
Definition SharedStruct.h:766
static TConstSharedStruct Make(const T &Struct)
Definition SharedStruct.h:846
constexpr const T * GetPtr() const
Definition SharedStruct.h:892
static TConstSharedStruct Make(TArgs &&... InArgs)
Definition SharedStruct.h:866
TConstSharedStruct(const TSharedStruct< T > &ConstSharedStruct)
Definition SharedStruct.h:752
void Initialize(const T &Struct)
Definition SharedStruct.h:820
const uint8 * GetMemory() const
Definition SharedStruct.h:794
Definition StructView.h:328
Definition InstancedStruct.h:307
Definition ObjectPtr.h:488
FORCEINLINE T * Get() const
Definition ObjectPtr.h:664
Definition SharedStruct.h:349
bool IsValid() const
Definition SharedStruct.h:483
T * GetPtr() const
Definition SharedStruct.h:477
static TSharedStruct Make(TArgs &&... InArgs)
Definition SharedStruct.h:461
void Initialize(const T &Struct)
Definition SharedStruct.h:430
void Reset()
Definition SharedStruct.h:408
void Initialize(TArgs &&... InArgs)
Definition SharedStruct.h:438
T & Get() const
Definition SharedStruct.h:469
const UScriptStruct * GetScriptStruct() const
Definition SharedStruct.h:391
TSharedStruct()=default
TObjectPtr< const UScriptStruct > * GetScriptStructPtr() const
Definition SharedStruct.h:396
void Initialize()
Definition SharedStruct.h:416
TSharedStruct(TSharedStruct< T > &&InOther)
Definition SharedStruct.h:362
uint8 * GetMemory() const
Definition SharedStruct.h:402
static TSharedStruct Make()
Definition SharedStruct.h:446
TSharedStruct(const TSharedStruct< T > &InOther)
Definition SharedStruct.h:355
static TSharedStruct Make(const T &Struct)
Definition SharedStruct.h:454
Definition StructOpsTypeTraits.h:11
Definition StructOpsTypeTraits.h:46
Definition StructView.h:118