UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DirectLinkSerialMethods.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"
6#include "CoreTypes.h"
7#include "Math/Quat.h"
8#include "Math/Transform.h"
9#include "Math/Vector.h"
10#include "Misc/SecureHash.h"
12
13
14namespace Reflect
15{
16
17// clang-format off
31
33{
34 _default = 0 << 5,
35 _array = 1 << 5,
36 _alt1 = 2 << 5,
37};
38
39static constexpr uint8 _storeTypeMask = 0b0001'1111u;
40static constexpr uint8 _modifierMask = 0b1110'0000u;
41static_assert((_storeTypeLast & _modifierMask) == 0, "enum overlap");
42
43enum class ESerialMethod : uint8
44{
45 None = 0,
58 Vector_f32 = _vector | _default, // FVector serialized as FVector3f
59 Vector_f64 = _vector | _alt1, // FVector serialized as FVector3d (native since 5.0)
60 Quat_f32 = _quat | _default, // FQuat serialized as FQuat4f
61 Quat_f64 = _quat | _alt1, // FQuat serialized as FQuat4d (native since 5.0)
64 Transform_Default = _transform | _default, // Added in 5.0, uses LWC.
65 Transform_Array = _transform | _array, // Added in 5.0, uses LWC.
66
68};
69
70
71static constexpr EStoreType GetStoreType(ESerialMethod Method) { return EStoreType(uint8(Method) & _storeTypeMask); }
72
73// This list maps which serialization method should be used for each Type reflected by directlink
74template<typename T> struct TDefaultSerialMethod { constexpr static ESerialMethod Value = ESerialMethod::_NotImplementedYet; };
80template<> struct TDefaultSerialMethod<FString> { constexpr static ESerialMethod Value = ESerialMethod::String_Default; };
84template<> struct TDefaultSerialMethod<TArray<FString>> { constexpr static ESerialMethod Value = ESerialMethod::String_Array; };
91template<> struct TDefaultSerialMethod<FQuat> { constexpr static ESerialMethod Value = ESerialMethod::Quat_f64; };
92
93
94template<typename T> EStoreType GetStoreTypeForType() { return GetStoreType(TDefaultSerialMethod<T>::Value); }
95template<typename T> bool CanSerializeWithMethod(ESerialMethod Method) { return GetStoreTypeForType<T>() == GetStoreType(Method); }
96
97
98// Serialization implementations
99template<ESerialMethod Code, typename T>
100void Serial(FArchive& Ar, T* Param) { Ar << *Param; }
101
102template<> inline void Serial<ESerialMethod::Uint32_Packed>(FArchive& Ar, uint32* ValuePtr) { Ar.SerializeIntPacked(*ValuePtr); }
103
104template<> inline void Serial<ESerialMethod::Vector_f32>(FArchive& Ar, FVector* ValuePtr)
105{
106 if (Ar.IsLoading())
107 {
108 FVector3f Tmp;
109 Ar << Tmp;
110 *ValuePtr = FVector(Tmp);
111 }
112 else if (Ar.IsSaving())
113 {
114 FVector3f Tmp(*ValuePtr);
115 Ar << Tmp;
116 }
117}
118
119template<> inline void Serial<ESerialMethod::Quat_f32>(FArchive& Ar, FQuat* ValuePtr)
120{
121 if (Ar.IsLoading())
122 {
123 FQuat4f Tmp;
124 Ar << Tmp;
125 *ValuePtr = FQuat(Tmp);
126 }
127 else if (Ar.IsSaving())
128 {
129 FQuat4f Tmp(*ValuePtr);
130 Ar << Tmp;
131 }
132}
133
134
135inline bool SerialAny(FArchive& Ar, void* data, ESerialMethod Method)
136{
137#define SerialAny_Case(enumvalue, casttype) case enumvalue: Serial<enumvalue>(Ar, (casttype*)data); return true;
138 switch (Method)
139 {
160
161 case ESerialMethod::None: return true;
163 default: ensure(false);
164 }
165 return false;
166#undef SerialAny_Case
167}
168
169} // namespace Reflect
#define ensure( InExpression)
Definition AssertionMacros.h:464
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 SerialAny_Case(enumvalue, casttype)
#define FVector
Definition IOSSystemIncludes.h:8
UE::Math::TQuat< double > FQuat
Definition MathFwd.h:50
const bool
Definition NetworkReplayStreaming.h:178
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
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 SerializeIntPacked(uint32 &Value)
Definition Archive.cpp:1328
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_FORCEINLINE_HINT bool IsSaving() const
Definition Archive.h:248
Definition Array.h:670
Definition DirectLinkSerialMethods.h:15
void Serial(FArchive &Ar, T *Param)
Definition DirectLinkSerialMethods.h:100
bool CanSerializeWithMethod(ESerialMethod Method)
Definition DirectLinkSerialMethods.h:95
EStoreType GetStoreTypeForType()
Definition DirectLinkSerialMethods.h:94
bool SerialAny(FArchive &Ar, void *data, ESerialMethod Method)
Definition DirectLinkSerialMethods.h:135
ESerialModifier
Definition DirectLinkSerialMethods.h:33
@ _array
Definition DirectLinkSerialMethods.h:35
@ _default
Definition DirectLinkSerialMethods.h:34
@ _alt1
Definition DirectLinkSerialMethods.h:36
EStoreType
Definition DirectLinkSerialMethods.h:19
@ _vector4
Definition DirectLinkSerialMethods.h:25
@ _u64
Definition DirectLinkSerialMethods.h:22
@ _vector
Definition DirectLinkSerialMethods.h:25
@ _u8
Definition DirectLinkSerialMethods.h:22
@ _transform
Definition DirectLinkSerialMethods.h:28
@ _u32
Definition DirectLinkSerialMethods.h:22
@ _str
Definition DirectLinkSerialMethods.h:24
@ _i64
Definition DirectLinkSerialMethods.h:21
@ _i32
Definition DirectLinkSerialMethods.h:21
@ _storeTypeLast
Definition DirectLinkSerialMethods.h:29
@ _i8
Definition DirectLinkSerialMethods.h:21
@ _f32
Definition DirectLinkSerialMethods.h:23
@ _u16
Definition DirectLinkSerialMethods.h:22
@ _linearcolor
Definition DirectLinkSerialMethods.h:26
@ _md5hash
Definition DirectLinkSerialMethods.h:27
@ _quat
Definition DirectLinkSerialMethods.h:25
@ _i16
Definition DirectLinkSerialMethods.h:21
@ _f64
Definition DirectLinkSerialMethods.h:23
@ _bool
Definition DirectLinkSerialMethods.h:20
ESerialMethod
Definition DirectLinkSerialMethods.h:44
void Serial< ESerialMethod::Vector_f32 >(FArchive &Ar, FVector *ValuePtr)
Definition DirectLinkSerialMethods.h:104
void Serial< ESerialMethod::Quat_f32 >(FArchive &Ar, FQuat *ValuePtr)
Definition DirectLinkSerialMethods.h:119
void Serial< ESerialMethod::Uint32_Packed >(FArchive &Ar, uint32 *ValuePtr)
Definition DirectLinkSerialMethods.h:102
Definition Color.h:48
Definition SecureHash.h:133
Definition DirectLinkSerialMethods.h:74
static constexpr ESerialMethod Value
Definition DirectLinkSerialMethods.h:74