UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneComponentPtr.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include <type_traits>
7
8namespace UE
9{
10namespace MovieScene
11{
12
13
15template<typename T>
17{
19 using ValueType = std::conditional_t<std::is_const_v<T>, typename TCallTraits<T>::ParamType, T&>;
20
22 : ComponentPtr(nullptr)
23 {
24 }
25
30
31 TComponentPtr(const TComponentPtr& RHS) = default;
32 TComponentPtr& operator=(const TComponentPtr& RHS) = default;
33
36 {
37 RHS.ComponentPtr = nullptr;
38 }
39
41 {
43 RHS.ComponentPtr = nullptr;
44 return *this;
45 }
46
47 inline explicit operator bool() const
48 {
49 return IsValid();
50 }
51
52 inline bool IsValid() const
53 {
54 return ComponentPtr != nullptr;
55 }
56
58 inline T* AsPtr() const
59 {
60 return ComponentPtr;
61 }
62
65 {
67 }
68
70 inline TArrayView<T> Slice(int32 StartIndex, int32 Num) const
71 {
72 return MakeArrayView(ComponentPtr + StartIndex, Num);
73 }
74
75 inline T* operator->() const
76 {
77 return ComponentPtr;
78 }
79
80 inline ValueType operator*() const
81 {
82 return *ComponentPtr;
83 }
84
86 {
87 return ComponentPtr[Index];
88 }
89
91 {
92 return (*this)[Index];
93 }
94
95 inline operator T*() const
96 {
97 return ComponentPtr;
98 }
99
100protected:
101
103};
104
105
109template<typename Accessor> struct TComponentLock;
110template<typename LockType> struct TComponentLockMixin;
111
112template<>
123
124template<>
135
137{
138 FReadErased(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
139 : ComponentPtr(InHeader->Components + ComponentOffset*InHeader->Sizeof)
141 {}
142
143 inline const void* AsPtr() const
144 {
145 return ComponentPtr;
146 }
147 inline const void* operator[](int32 Index) const
148 {
149 return ComponentPtr + Sizeof*Index;
150 }
151 inline const void* ComponentAtIndex(int32 Index) const
152 {
153 return ComponentPtr + Sizeof*Index;
154 }
155 inline bool IsValid() const
156 {
157 return ComponentPtr != nullptr;
158 }
159
160protected:
162 : ComponentPtr(nullptr)
163 , Sizeof(0)
164 {}
165
168};
169
171{
173 explicit FReadErasedOptional(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
174 {
175 if (InHeader)
176 {
177 ComponentPtr = InHeader->Components + ComponentOffset*InHeader->Sizeof;
178 Sizeof = InHeader->Sizeof;
179 }
180 else
181 {
182 ComponentPtr = nullptr;
183 Sizeof = 0;
184 }
185 }
186
187 const void* ComponentAtIndex(int32 Index) const
188 {
189 return this->ComponentPtr ? FReadErased::ComponentAtIndex(Index) : nullptr;
190 }
191};
192
193template<typename T>
194struct TRead : TComponentPtr<const T>
195{
196 TRead() = default;
197 explicit TRead(const T* ComponentPtr, int32 ComponentOffset = 0)
198 : TComponentPtr<const T>(ComponentPtr + ComponentOffset)
199 {}
200 explicit TRead(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
201 : TComponentPtr<const T>(reinterpret_cast<const T*>(InHeader->Components) + ComponentOffset)
202 {}
203};
205
206template<typename T>
208{
209 TReadOptional() = default;
210 explicit TReadOptional(const T* InData, int32 ComponentOffset = 0)
211 {
212 if (InData)
213 {
214 this->ComponentPtr = InData + ComponentOffset;
215 }
216 }
217 explicit TReadOptional(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
218 {
219 if (InHeader)
220 {
221 this->ComponentPtr = reinterpret_cast<const T*>(InHeader->Components) + ComponentOffset;
222 }
223 }
224
226 {
227 return this->ComponentPtr ? &this->ComponentPtr[Index] : nullptr;
228 }
229};
230
231
233{
235 : ComponentPtr(nullptr)
236 , Sizeof(0)
237 {}
238 FWriteErased(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
239 : ComponentPtr(InHeader->Components + ComponentOffset*InHeader->Sizeof)
241 {}
242 inline void* AsPtr() const
243 {
244 return ComponentPtr;
245 }
246 inline void* operator[](int32 Index) const
247 {
248 return ComponentPtr + Sizeof*Index;
249 }
250 inline bool IsValid() const
251 {
252 return ComponentPtr != nullptr;
253 }
255 {
256 return (*this)[Index];
257 }
258
259protected:
262};
263
265{
268 {
269 if (InHeader)
270 {
271 ComponentPtr = InHeader->Components + ComponentOffset*InHeader->Sizeof;
272 Sizeof = InHeader->Sizeof;
273 }
274 else
275 {
276 ComponentPtr = nullptr;
277 Sizeof = 0;
278 }
279 }
281 {
282 return ComponentPtr ? (*this)[Index] : nullptr;
283 }
284};
285
286template<typename T>
288{
289 TWrite() = default;
290 explicit TWrite(T* InData, int32 ComponentOffset = 0)
291 : TComponentPtr<T>(InData + ComponentOffset)
292 {}
293 explicit TWrite(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
294 : TComponentPtr<T>(reinterpret_cast<T*>(InHeader->Components) + ComponentOffset)
295 {}
296};
297
298template<typename T>
300{
301 TWriteOptional() = default;
302 explicit TWriteOptional(T* InData, int32 ComponentOffset = 0)
303 {
304 if (InData)
305 {
306 this->ComponentPtr = InData + ComponentOffset;
307 }
308 }
309 explicit TWriteOptional(const FComponentHeader* InHeader, int32 ComponentOffset = 0)
310 {
311 if (InHeader)
312 {
313 this->ComponentPtr = reinterpret_cast<T*>(InHeader->Components) + ComponentOffset;
314 }
315 }
316
318 {
319 return this->ComponentPtr ? &this->ComponentPtr[Index] : nullptr;
320 }
321};
322
323
324
325template<typename AccessorType> struct TComponentLock;
326
327template<>
329{
334
335 const void* ComponentAtIndex(int32 Index) const
336 {
337 return (*this)[Index];
338 }
339};
340template<>
342{
343 TComponentLock() = default;
345 {
346 if (InHeader)
347 {
349 *static_cast<FReadErasedOptional*>(this) = FReadErasedOptional(InHeader, ComponentOffset);
350 }
351 }
352
353 explicit operator bool() const
354 {
355 return this->ComponentPtr != nullptr;
356 }
357};
358template<>
366template<>
379template<typename T>
380struct TComponentLock<TRead<T>> : TComponentLockMixin<FScopedHeaderReadLock>, TRead<T>
381{
386};
387
388template<typename T>
389struct TComponentLock<TReadOptional<T>> : TComponentLockMixin<FScopedHeaderReadLock>, TReadOptional<T>
390{
391 TComponentLock() = default;
393 {
394 if (InHeader)
395 {
397 *static_cast<TReadOptional<T>*>(this) = TReadOptional<T>(InHeader, ComponentOffset);
398 }
399 }
400};
401template<typename T>
409
410template<typename T>
423
424
429template<typename T> using TComponentReader = TComponentLock<TRead<T>>;
431template<typename T> using TComponentWriter = TComponentLock<TWrite<T>>;
433
434
435template<typename... T> using TMultiComponentLock = TTuple<TComponentLock<T>...>;
436
437template<typename... T>
439{
441 : Data(InData...)
442 {}
443
445 {
446 auto Init = [](const auto& InLock, auto& OutData)
447 {
448 if (InLock)
449 {
450 OutData = InLock;
451 }
452 };
454 }
455
456 template<int Index>
457 auto* Get() const
458 {
459 return Data.template Get<Index>().AsPtr();
460 }
461
462 template<int Index>
463 auto GetAsArray(int32 ArraySize) const
464 {
465 auto* ComponentPtr = Data.template Get<Index>().AsPtr();
466 return MakeArrayView(ComponentPtr, ComponentPtr ? ArraySize : 0);
467 }
468
469private:
470
471 TTuple<T...> Data;
472};
473
475template<typename... T> using TReadOneOrMoreOf = TMultiComponentData<TReadOptional<T>...>;
476template<typename... T> using TReadOneOf = TMultiComponentData<TReadOptional<T>...>;
477
478} // namespace UE
479} // namespace MovieScene
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
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
void Init()
Definition LockFreeList.h:4
@ Num
Definition MetalRHIPrivate.h:234
const bool
Definition NetworkReplayStreaming.h:178
UE_FORCEINLINE_HINT void VisitTupleElements(FuncType &&Func, FirstTupleType &&FirstTuple, TupleTypes &&... Tuples)
Definition Tuple.h:878
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
EComponentHeaderLockMode
Definition MovieSceneEntitySystemTypes.h:112
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
TCallTraitsParamTypeHelper< T, PassByValue >::ParamType ParamType
Definition UnrealTypeTraits.h:275
Definition Tuple.h:652
Definition MovieSceneEntitySystemTypes.h:460
Definition MovieSceneEntitySystemTypes.h:425
Definition MovieSceneComponentPtr.h:171
const void * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:187
FReadErasedOptional(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:173
Definition MovieSceneComponentPtr.h:137
const void * AsPtr() const
Definition MovieSceneComponentPtr.h:143
const uint8 * ComponentPtr
Definition MovieSceneComponentPtr.h:166
const void * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:151
bool IsValid() const
Definition MovieSceneComponentPtr.h:155
const void * operator[](int32 Index) const
Definition MovieSceneComponentPtr.h:147
int32 Sizeof
Definition MovieSceneComponentPtr.h:167
FReadErased(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:138
FReadErased()
Definition MovieSceneComponentPtr.h:161
Definition MovieSceneEntitySystemTypes.h:565
Definition MovieSceneEntitySystemTypes.h:587
Definition MovieSceneComponentPtr.h:265
FWriteErasedOptional(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:267
void * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:280
Definition MovieSceneComponentPtr.h:233
bool IsValid() const
Definition MovieSceneComponentPtr.h:250
FWriteErased(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:238
uint8 * ComponentPtr
Definition MovieSceneComponentPtr.h:260
int32 Sizeof
Definition MovieSceneComponentPtr.h:261
void * operator[](int32 Index) const
Definition MovieSceneComponentPtr.h:246
FWriteErased()
Definition MovieSceneComponentPtr.h:234
void * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:254
void * AsPtr() const
Definition MovieSceneComponentPtr.h:242
TComponentLockMixin(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode)
Definition MovieSceneComponentPtr.h:116
TComponentLockMixin(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, FEntityAllocationWriteContext InWriteContext)
Definition MovieSceneComponentPtr.h:128
Definition MovieSceneComponentPtr.h:110
Definition MovieSceneComponentPtr.h:342
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:344
Definition MovieSceneComponentPtr.h:329
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:330
const void * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:335
Definition MovieSceneComponentPtr.h:368
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, FEntityAllocationWriteContext InWriteContext, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:370
Definition MovieSceneComponentPtr.h:360
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, FEntityAllocationWriteContext InWriteContext, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:361
Definition MovieSceneComponentPtr.h:390
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:392
Definition MovieSceneComponentPtr.h:381
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:382
Definition MovieSceneComponentPtr.h:412
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, FEntityAllocationWriteContext InWriteContext, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:414
Definition MovieSceneComponentPtr.h:403
TComponentLock(const FComponentHeader *InHeader, EComponentHeaderLockMode InLockMode, FEntityAllocationWriteContext InWriteContext, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:404
Definition MovieSceneComponentPtr.h:109
Definition MovieSceneComponentPtr.h:17
TComponentPtr(T *InComponentPtr)
Definition MovieSceneComponentPtr.h:26
TComponentPtr()
Definition MovieSceneComponentPtr.h:21
TComponentPtr(TComponentPtr &&RHS)
Definition MovieSceneComponentPtr.h:34
T * ComponentPtr
Definition MovieSceneComponentPtr.h:102
ValueType operator*() const
Definition MovieSceneComponentPtr.h:80
TArrayView< T > AsArray(int32 Num) const
Definition MovieSceneComponentPtr.h:64
TComponentPtr(const TComponentPtr &RHS)=default
T * AsPtr() const
Definition MovieSceneComponentPtr.h:58
TArrayView< T > Slice(int32 StartIndex, int32 Num) const
Definition MovieSceneComponentPtr.h:70
ValueType ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:90
bool IsValid() const
Definition MovieSceneComponentPtr.h:52
TComponentPtr & operator=(const TComponentPtr &RHS)=default
ValueType operator[](int32 Index) const
Definition MovieSceneComponentPtr.h:85
TComponentPtr & operator=(TComponentPtr &&RHS)
Definition MovieSceneComponentPtr.h:40
T * operator->() const
Definition MovieSceneComponentPtr.h:75
std::conditional_t< std::is_const_v< T >, typename TCallTraits< T >::ParamType, T & > ValueType
Definition MovieSceneComponentPtr.h:19
Definition MovieSceneComponentPtr.h:439
auto * Get() const
Definition MovieSceneComponentPtr.h:457
TMultiComponentData(const TMultiComponentLock< T... > &InAggregateLock)
Definition MovieSceneComponentPtr.h:444
auto GetAsArray(int32 ArraySize) const
Definition MovieSceneComponentPtr.h:463
TMultiComponentData(T... InData)
Definition MovieSceneComponentPtr.h:440
Definition MovieSceneComponentPtr.h:208
const T * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:225
TReadOptional(const T *InData, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:210
TReadOptional(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:217
Definition MovieSceneComponentPtr.h:195
TRead(const T *ComponentPtr, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:197
TRead(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:200
Definition MovieSceneComponentPtr.h:300
TWriteOptional(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:309
TWriteOptional(T *InData, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:302
T * ComponentAtIndex(int32 Index) const
Definition MovieSceneComponentPtr.h:317
Definition MovieSceneComponentPtr.h:288
TWrite(T *InData, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:290
TWrite(const FComponentHeader *InHeader, int32 ComponentOffset=0)
Definition MovieSceneComponentPtr.h:293