UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DirectLinkParameterStore.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Algo/Transform.h"
6#include "Containers/Array.h"
7#include "CoreMinimal.h"
8#include "DirectLinkCommon.h"
11#include "HAL/Platform.h"
12#include "Logging/LogMacros.h"
15#include "UObject/NameTypes.h"
16
17#define UE_API DIRECTLINK_API
18
19class FArchive;
20
21
22namespace DirectLink
23{
24class FParameterStore;
25
26template<typename T, typename S = T>
27class TStoreKey // rename TReflected ?
28{
29public:
30 TStoreKey(const T& InitialValue = {})
31 : NativeValue(InitialValue)
32 {}
33
34 const T& Get() const { return NativeValue; }
35 T& Get() { return NativeValue; }
36 operator const T&() const { return NativeValue; }
37 operator T&() { return NativeValue; }
38
39 T& operator=(const T& InValue)
40 {
41 NativeValue = InValue;
42 return NativeValue;
43 }
44
45private:
46 friend FParameterStore;
47 T NativeValue;
48 // #ue_directlink_quality dtr: check it was registered
49};
50
51
52
57{
58public:
60
61 template<typename T>
62 bool GetValueAs(int32 I, T& Out) const
63 {
64 if (Parameters.IsValidIndex(I))
65 {
66 if (Reflect::CanSerializeWithMethod<T>(Parameters[I].StorageMethod))
67 {
68 FMemoryReader Ar(Parameters[I].Buffer);
69 return Reflect::SerialAny(Ar, &Out, Parameters[I].StorageMethod);
70 }
71 }
72 return false;
73 }
74
75 template<typename T>
76 bool GetValueAs(FName Name, T& Out) const { return GetValueAs(GetParameterIndex(Name), Out); }
77
78 int32 GetParameterIndex(FName ParameterName) const
79 {
80 return Parameters.IndexOfByPredicate([&](const FParameterDetails& Parameter) {
81 return Parameter.Name == ParameterName;
82 });
83 }
84
85 UE_API void AddParam(FName Name, Reflect::ESerialMethod StorageMethod, void* StorageLocation);
86
88 {
89 Parameters.Reserve(PropCount);
90 }
91
92 UE_API FElementHash Hash() const;
93
94private:
95 friend class FParameterStore; // for FParameterStore::Update
96 struct FParameterDetails
97 {
98 FName Name;
99 Reflect::ESerialMethod StorageMethod;
101 };
102 TArray<FParameterDetails> Parameters;
103};
104
105
106
108{
109public:
116
117 template<typename T, typename S>
119 {
120 check(HasParameterNamed(Name) == false);
121
122 FParameterDetails& NewParameter = Parameters.AddDefaulted_GetRef();
123
124 NewParameter.Name = Name;
125 NewParameter.StorageLocation = &Key.NativeValue;
126 static_assert(Reflect::TDefaultSerialMethod<S>::Value != Reflect::ESerialMethod::_NotImplementedYet, "Key type not exposed to serialization");
128
129 return Key;
130 }
131
136
137 template<typename T>
138 bool GetValueAs(FName ParameterName, T& Out) const
139 {
140 int32 I = GetParameterIndex(ParameterName);
141 if (Parameters.IsValidIndex(I))
142 {
143 if (Reflect::CanSerializeWithMethod<T>(Parameters[I].StorageMethod))
144 {
145 Out = *(T*)(Parameters[I].StorageLocation);
146 return true;
147 }
148 }
149 return false;
150 }
151
153
155
156private:
157 struct FParameterDetails
158 {
159 FName Name;
160 void* StorageLocation;
161 Reflect::ESerialMethod StorageMethod;
162 };
163 TArray<FParameterDetails> Parameters;
164};
165
166
168{
169public:
170 FSnapshotProxy(FParameterStoreSnapshot& Storage, bool bIsSaving)
171 : Storage(Storage)
172 , bIsSaving(bIsSaving)
173 {}
174
175 bool IsSaving() const { return bIsSaving; }
176
177 template<typename T>
179 {
180 if (bIsSaving)
181 {
183 return true;
184 }
185 else
186 {
187 return Storage.GetValueAs(SerialTag, Item);
188 }
189 }
190
191private:
193 const bool bIsSaving;
194};
195
196} // namespace DirectLink
197
198#undef UE_API
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition MemoryReader.h:17
Definition NameTypes.h:617
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
ElementType & AddDefaulted_GetRef() UE_LIFETIMEBOUND
Definition Array.h:2815
SizeType IndexOfByPredicate(Predicate Pred) const
Definition Array.h:1423
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
bool SerialAny(FArchive &Ar, void *data, ESerialMethod Method)
Definition DirectLinkSerialMethods.h:135
ESerialMethod
Definition DirectLinkSerialMethods.h:44
U16 Index
Definition radfft.cpp:71
Definition DirectLinkSerialMethods.h:74