UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PersistentEvaluationData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Map.h"
6#include "CoreMinimal.h"
10#include "HAL/Platform.h"
12#include "MovieSceneFwd.h"
13#include "Stats/Stats.h"
14#include "Templates/TypeHash.h"
15#include "Templates/UniquePtr.h"
16
18
23{
28
31
32 friend bool operator==(FMovieSceneSharedDataId A, FMovieSceneSharedDataId B) { return A.UniqueId == B.UniqueId; }
33
34 friend uint32 GetTypeHash(FMovieSceneSharedDataId In) { return GetTypeHash(In.UniqueId); }
35
36private:
38 uint32 UniqueId;
39};
40
70
71
79
80
82
91{
96
99
100public:
104 template<typename T> T& GetOrAddTrackData() { return GetOrAdd<T>(TrackKey); }
105 template<typename T> T& AddTrackData() { return Add<T>(TrackKey); }
106 template<typename T> T& GetTrackData() { return Get<T>(TrackKey); }
107 template<typename T> T* FindTrackData() { return Find<T>(TrackKey); }
109 template<typename T> T& GetTrackData() const { return Get<T>(TrackKey); }
110 template<typename T> T* FindTrackData() const { return Find<T>(TrackKey); }
111 void ResetTrackData() { Reset(TrackKey); }
112
116 template<typename T> T& GetOrAddSectionData() { return GetOrAdd<T>(SectionKey); }
117 template<typename T> T& AddSectionData() { return Add<T>(SectionKey); }
119 template<typename T> T& GetSectionData() const { return Get<T>(SectionKey); }
120 template<typename T> T* FindSectionData() const { return Find<T>(SectionKey); }
121 void ResetSectionData() { Reset(SectionKey); }
122
127
131 IMovieScenePlayer& GetMovieScenePlayer() const { return Player; }
132
136 template<typename T> const T* FindInstanceData() const
137 {
139 if (InstanceData && (&InstanceData->GetScriptStruct() == T::StaticStruct()))
140 {
141 return static_cast<const T*>(InstanceData);
142 }
143 return nullptr;
144 }
145
146public:
147
152 {
153 return TrackKey;
154 }
155
160 {
161 return SectionKey;
162 }
163
168 {
169 TrackKey = Key;
170 }
171
176 {
177 SectionKey = Key;
178 }
179
184 {
185 SectionKey = TrackKey.AsSection(InSectionIdentifier);
186 return SectionKey;
187 }
188
189public:
190
194 template<typename T>
196 {
198
199 check(SharedData);
200
202 {
203 return static_cast<T&>(*Existing->Get());
204 }
205
206 return Add<T>(InKey);
207 }
208
209 template<typename T>
211 {
213
214 check(SharedData);
215
216 T* Ptr = new T;
217 SharedData->Add(InKey, TUniquePtr<IPersistentEvaluationData>(Ptr));
218 return *Ptr;
219 }
220
221 template<typename T>
223 {
225
226 if (ensure(SharedData))
227 {
229 return Existing ? static_cast<T*>(Existing->Get()) : nullptr;
230 }
231 return nullptr;
232 }
233
234 template<typename T>
235 const T* Find(const FSharedPersistentDataKey& InKey) const
236 {
238
239 if (ensure(SharedData))
240 {
241 const TUniquePtr<IPersistentEvaluationData>* Existing = SharedData->Find(InKey);
242 return Existing ? static_cast<const T*>(Existing->Get()) : nullptr;
243 }
244 return nullptr;
245 }
246
247 template<typename T>
256
257 template<typename T>
258 const T& Get(const FSharedPersistentDataKey& InKey) const
259 {
261
262 const T* Ptr = Find<T>(InKey);
263 check(Ptr);
264 return *Ptr;
265 }
266
268 {
270
271 if (ensure(SharedData))
272 {
273 SharedData->Remove(InKey);
274 }
275 }
276
277private:
278
280 template<typename T>
282 {
284
285 check(EntityData);
286
288 {
289 return static_cast<T&>(*Existing->Get());
290 }
291
292 return Add<T>(InKey);
293 }
294
295 template<typename T>
297 {
299
300 check(EntityData);
301
302 T* Ptr = new T;
303 EntityData->Add(InKey, TUniquePtr<IPersistentEvaluationData>(Ptr));
304 return *Ptr;
305 }
306
307 template<typename T>
308 T* Find(const FMovieSceneEvaluationKey& InKey) const
309 {
311
312 if (ensure(EntityData))
313 {
314 const TUniquePtr<IPersistentEvaluationData>* Existing = EntityData->Find(InKey);
315 return Existing ? static_cast<T*>(Existing->Get()) : nullptr;
316 }
317 return nullptr;
318 }
319
320 template<typename T>
321 T& Get(const FMovieSceneEvaluationKey& InKey) const
322 {
324
325 T* Ptr = Find<T>(InKey);
326 check(Ptr);
327 return *Ptr;
328 }
329
331 {
333
334 if (ensure(EntityData))
335 {
336 EntityData->Remove(InKey);
337 }
338 }
339
340private:
341
343 IMovieScenePlayer& Player;
344
347
350
351 // The keys themselves are mutable since this a proxy representation of the data above.
352 // For a const FPersistentEvaluationData& we can change the ptr to the persistent data, but we can't change the data itself (as with a const T*)
353 mutable FMovieSceneEvaluationKey TrackKey;
354 mutable FMovieSceneEvaluationKey SectionKey;
355};
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define TEXT(x)
Definition Platform.h:1272
#define DECLARE_CYCLE_STAT(CounterName, StatId, GroupId)
Definition Stats.h:669
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define MOVIESCENE_DETAILED_SCOPE_CYCLE_COUNTER(...)
Definition MovieSceneFwd.h:157
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IMovieScenePlayer.h:90
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition MovieSceneEvaluationKey.h:13
FMovieSceneEvaluationKey AsSection(uint32 InSectionIdentifier) const
Definition MovieSceneEvaluationKey.h:45
Definition MovieSceneEvaluationOperand.h:15
Definition MovieSceneSequenceInstanceData.h:27
Definition PersistentEvaluationData.h:23
static MOVIESCENE_API FMovieSceneSharedDataId Allocate()
Definition MovieSceneEvaluationState.cpp:44
friend uint32 GetTypeHash(FMovieSceneSharedDataId In)
Definition PersistentEvaluationData.h:34
FMovieSceneSharedDataId(const FMovieSceneSharedDataId &)=default
friend bool operator==(FMovieSceneSharedDataId A, FMovieSceneSharedDataId B)
Definition PersistentEvaluationData.h:32
FMovieSceneSharedDataId & operator=(const FMovieSceneSharedDataId &)=default
Definition PersistentEvaluationData.h:91
T & Get(const FSharedPersistentDataKey &InKey)
Definition PersistentEvaluationData.h:248
T & GetTrackData()
Definition PersistentEvaluationData.h:106
T & GetOrAddTrackData()
Definition PersistentEvaluationData.h:104
T & GetOrAddSectionData()
Definition PersistentEvaluationData.h:116
T & AddSectionData()
Definition PersistentEvaluationData.h:117
T & GetOrAdd(const FSharedPersistentDataKey &InKey)
Definition PersistentEvaluationData.h:195
T * FindTrackData() const
Definition PersistentEvaluationData.h:110
void SetSectionKey(const FMovieSceneEvaluationKey &Key) const
Definition PersistentEvaluationData.h:175
const T * FindInstanceData() const
Definition PersistentEvaluationData.h:136
FPersistentEvaluationData(const FPersistentEvaluationData &)=delete
void Reset(const FSharedPersistentDataKey &InKey)
Definition PersistentEvaluationData.h:267
T & AddTrackData()
Definition PersistentEvaluationData.h:105
const FMovieSceneEvaluationKey & GetTrackKey() const
Definition PersistentEvaluationData.h:151
T * FindTrackData()
Definition PersistentEvaluationData.h:107
void ResetSectionData()
Definition PersistentEvaluationData.h:121
T & GetSectionData() const
Definition PersistentEvaluationData.h:119
MOVIESCENE_API const FMovieSceneSequenceInstanceData * GetInstanceData() const
Definition PersistentEvaluationData.cpp:22
const T & Get(const FSharedPersistentDataKey &InKey) const
Definition PersistentEvaluationData.h:258
T & Add(const FSharedPersistentDataKey &InKey)
Definition PersistentEvaluationData.h:210
const FMovieSceneEvaluationKey & DeriveSectionKey(uint32 InSectionIdentifier) const
Definition PersistentEvaluationData.h:183
void SetTrackKey(const FMovieSceneEvaluationKey &Key) const
Definition PersistentEvaluationData.h:167
void ResetTrackData()
Definition PersistentEvaluationData.h:111
T * Find(const FSharedPersistentDataKey &InKey)
Definition PersistentEvaluationData.h:222
T & GetTrackData() const
Definition PersistentEvaluationData.h:109
const T * Find(const FSharedPersistentDataKey &InKey) const
Definition PersistentEvaluationData.h:235
const FMovieSceneEvaluationKey & GetSectionKey() const
Definition PersistentEvaluationData.h:159
T * FindSectionData() const
Definition PersistentEvaluationData.h:120
IMovieScenePlayer & GetMovieScenePlayer() const
Definition PersistentEvaluationData.h:131
FPersistentEvaluationData & operator=(const FPersistentEvaluationData &)=delete
Definition PersistentEvaluationData.h:45
FMovieSceneEvaluationOperand Operand
Definition PersistentEvaluationData.h:68
FSharedPersistentDataKey(FMovieSceneSharedDataId InUniqueId, const FMovieSceneEvaluationOperand &InOperand)
Definition PersistentEvaluationData.h:49
FMovieSceneSharedDataId UniqueId
Definition PersistentEvaluationData.h:65
friend bool operator==(const FSharedPersistentDataKey &A, const FSharedPersistentDataKey &B)
Definition PersistentEvaluationData.h:54
friend uint32 GetTypeHash(const FSharedPersistentDataKey &In)
Definition PersistentEvaluationData.h:59
Definition PersistentEvaluationData.h:76
virtual ~IPersistentEvaluationData()
Definition PersistentEvaluationData.h:77