UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneEntitySystemTypes.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Algo/Find.h"
6#include "Containers/Array.h"
9#include "MovieSceneFwd.h"
11#include "HAL/CriticalSection.h"
12#include "Math/NumericLimits.h"
13#include "Math/UnrealMathSSE.h"
15#include "Misc/EnumClassFlags.h"
17#include "Stats/Stats.h"
19
20#include <atomic>
21#include <initializer_list>
22
24namespace UE { namespace MovieScene { class FEntityManager; } }
25
26
27DECLARE_STATS_GROUP(TEXT("Movie Scene Evaluation Systems"), STATGROUP_MovieSceneECS, STATCAT_Advanced)
28
29namespace UE
30{
31namespace MovieScene
32{
33
34struct FReadErased;
35struct FReadErasedOptional;
36struct FWriteErased;
37struct FWriteErasedOptional;
38template<typename T> struct TComponentLock;
39template<typename T> struct TRead;
40template<typename T> struct TReadOptional;
41template<typename T> struct TWrite;
42template<typename T> struct TWriteOptional;
43
44enum class ESystemPhase : uint8
45{
47 None = 0,
48
50 Import = 1 << 0,
51
53 Spawn = 1 << 1,
54
56 Instantiation = 1 << 2,
57
59 Scheduling = 1 << 3,
60
62 Evaluation = 1 << 4,
63
65 Finalization = 1 << 5,
66};
68
70{
71 None = 0x00,
72
74 Preserved = 0x1,
75
77 CopyToChildren = 0x2,
78
80 CopyToOutput = 0x4,
81
83 MigrateToOutput = 0x8,
84};
86
87
89{
90 OneOf = 1 << 0,
91 OneOrMoreOf = 1 << 1,
92 AllOf = 1 << 2,
93
94 // High bit modifiers
95 Negate = 1 << 7,
96};
98
100{
101 Mandatory = 1u << 0,
102 Optional = 1u << 1,
103
105};
107
108
112{
113 LockFree,
114 Mutex,
115};
116
123{
128 : Value(INDEX_NONE)
129 {}
130
135 {
136 check( Value != INDEX_NONE );
137 return FInterrogationChannel(++Value);
138 }
139
143 explicit operator bool() const
144 {
145 return IsValid();
146 }
147
151 bool IsValid() const
152 {
153 return Value != INDEX_NONE;
154 }
155
160 {
161 check(Value != INDEX_NONE);
162 return Value;
163 }
164
169 {
170 return FInterrogationChannel(0);
171 }
172
177 {
178 return FInterrogationChannel(1);
179 }
180
188
196
204
206 {
207 return In.Value;
208 }
209
211 {
212 return A.Value == B.Value;
213 }
214
216 {
217 return A.Value != B.Value;
218 }
219
221 {
222 return A.Value < B.Value;
223 }
224
225private:
226
227 explicit FInterrogationChannel(int32 InValue) : Value(InValue) {}
228
229 int32 Value;
230};
231
232
237{
240
243
247
252
253 bool IsValid() const
254 {
256 }
257
259 {
260 return GetTypeHash(In.Channel) ^ In.InterrogationIndex;
261 }
262
264 {
265 return A.Channel == B.Channel && A.InterrogationIndex == B.InterrogationIndex;
266 }
267
269 {
270 return A.Channel != B.Channel || A.InterrogationIndex != B.InterrogationIndex;
271 }
272
277};
278
279
284{
286
287 bool IsValid() const
288 {
289 return Sequence != nullptr;
290 }
291};
292
293
295{
296
297 void Reset()
298 {
299 AllMask.Reset();
300 NoneMask.Reset();
301 ComplexMasks.Reset();
302 }
303
304 MOVIESCENE_API bool Match(const FComponentMask& Input) const;
305
306 MOVIESCENE_API bool IsValid() const;
307
313 FEntityComponentFilter& All(std::initializer_list<FComponentTypeID> InComponentTypes)
314 {
315 AllMask.SetAll(InComponentTypes);
316 return *this;
317 }
318
319
325 FEntityComponentFilter& None(std::initializer_list<FComponentTypeID> InComponentTypes)
326 {
327 NoneMask.SetAll(InComponentTypes);
328 return *this;
329 }
330
331
336 FEntityComponentFilter& Any(std::initializer_list<FComponentTypeID> InComponentTypes)
337 {
339 }
340
341 FEntityComponentFilter& AnyLenient(std::initializer_list<FComponentTypeID> InComponentTypes)
342 {
345 {
346 if (TypeID)
347 {
348 Mask.Set(TypeID);
349 }
350 }
351 return Any(Mask);
352 }
353
354
359
364
365
367 {
368 if (InComponentTypes.size() > 0)
369 {
370 FComplexMask& ComplexMask = ComplexMasks.Emplace_GetRef(ComplexMode);
371 ComplexMask.Mask.SetAll(InComponentTypes);
372 }
373 return *this;
374 }
375
377 {
378 if (InComponentMask.Num() > 0)
379 {
380 ComplexMasks.Emplace(InComponentMask, ComplexMode);
381 }
382 return *this;
383 }
384
386 {
387 if (CombineWith.AllMask.Num() > 0)
388 {
389 AllMask.CombineWithBitwiseOR(CombineWith.AllMask, EBitwiseOperatorFlags::MaxSize);
390 }
391
392 if (CombineWith.NoneMask.Num() > 0)
393 {
394 NoneMask.CombineWithBitwiseOR(CombineWith.NoneMask, EBitwiseOperatorFlags::MaxSize);
395 }
396
397 if (CombineWith.ComplexMasks.Num() > 0)
398 {
399 ComplexMasks.Append(CombineWith.ComplexMasks);
400 }
401 return *this;
402 }
403
404private:
405
406 struct FComplexMask
407 {
408 FComplexMask(EComplexFilterMode InMode)
409 : Mode(InMode)
410 {}
411 FComplexMask(const FComponentMask& InMask, EComplexFilterMode InMode)
412 : Mask(InMask), Mode(InMode)
413 {}
414
415 FComponentMask Mask;
417 };
418 FComponentMask AllMask;
419 FComponentMask NoneMask;
420 TArray<FComplexMask> ComplexMasks;
421};
422
423
425{
427
432
434 {
436 Context.SystemSerial = SystemSerial + InOther.SystemSerial;
437 return Context;
438 }
440 {
442 Context.SystemSerial = SystemSerial - InOther.SystemSerial;
443 return Context;
444 }
446 {
447 return SystemSerial;
448 }
449
450private:
451
453 : SystemSerial(0)
454 {}
455
456 uint64 SystemSerial;
457};
458
460{
461 FComponentHeader() = default;
462
465
468
469#if UE_MOVIESCENE_ENTITY_DEBUG
470
471 // This virtual destructor exists in order to create a vftable for this type
472 // that is used by the debugger to locate and display the derived TComponentHeader<T> type
473 // enabling visualization of the concrete type in the debugger. It is completely compiled
474 // out when UE_MOVIESCENE_ENTITY_DEBUG is disabled ensuring this type is not polymorphic.
476
479
481 const uint16* Size = nullptr;
482
483#endif // UE_MOVIESCENE_ENTITY_DEBUG
484
487
490
491private:
492
494 mutable uint64 SerialNumber;
495
496public:
497
499 {
500 int32 fetch_add(const int32 Value, const std::memory_order) { return 0; }
501 int32 fetch_sub(const int32 Value, const std::memory_order) { return 0; }
502 int32 exchange(const int32 Value, const std::memory_order) { return 0; }
503 };
504
505#if UE_AUTORTFM
506 using FScheduledAccessCountType = FAutoRTFMCompiledOutAtomicInt32;
507#else
508 using FScheduledAccessCountType = std::atomic<int32>;
509#endif
510
513
516
519
523 bool IsTag() const
524 {
525 return Sizeof == 0;
526 }
527
535 bool HasData() const
536 {
537 return Components != nullptr;
538 }
539
544 {
545 check(!IsTag() && Components != nullptr);
546 return Components + Sizeof*Offset;
547 }
548
550 {
551 SerialNumber = FMath::Max(SerialNumber, InWriteContext.GetSystemSerial());
552 }
553
555 {
556 return SerialNumber > InSystemSerial;
557 }
558};
559
560
581
582
604
605
624{
630 : SerialNumber(0)
631 , NumComponents(0)
632 , Size(0)
633 , Capacity(0)
634 , MaxCapacity(0)
636 {}
637
642 {
643 for (int32 Index = 0; Index < NumComponents; ++Index)
644 {
645 ComponentHeaders[Index].~FComponentHeader();
646 }
647 }
648
652
653
661
662
670
671
678 bool HasComponent(FComponentTypeID ComponentTypeID) const
679 {
680 return FindComponentHeader(ComponentTypeID) != nullptr;
681 }
682
683
691 {
693 }
694
695
706
707
715 {
716 const FComponentHeader* Header = FindComponentHeader(ComponentTypeID);
717 check(Header);
718 return *Header;
719 }
720
721
729 {
730 FComponentHeader* Header = FindComponentHeader(ComponentTypeID);
731 check(Header);
732 return *Header;
733 }
734
735
740 {
741 return MakeArrayView(EntityIDs, Size);
742 }
743
744
749 {
750 return EntityIDs;
751 }
752
753
757 const void* GetComponentDataAddress() const
758 {
759 return ComponentData;
760 }
761
762
768 {
769 return UniqueID;
770 }
771
772
778 {
779 return SerialNumber > InSystemVersion;
780 }
781
782
787 {
788 SerialNumber = FMath::Max(SerialNumber, InWriteContext.GetSystemSerial());
789 }
790
791
793 {
794 SerialNumber = FMath::Max(SerialNumber, InWriteContext.GetSystemSerial());
796 {
797 Header.PostWriteComponents(InWriteContext);
798 }
799 }
800
805 {
806 return int32(NumComponents);
807 }
808
809
813 int32 Num() const
814 {
815 return int32(Size);
816 }
817
818
823 {
824 return int32(MaxCapacity);
825 }
826
827
832 {
833 return int32(Capacity);
834 }
835
836
841 {
842 return int32(Capacity) - int32(Size);
843 }
844
849 {
850 return LockMode;
851 }
852
857
862
867
872
876 template<typename T>
878 {
879 const FComponentHeader& Header = GetComponentHeaderChecked(ComponentType);
880 return TComponentLock<TRead<T>>(&Header, LockMode);
881 }
882
886 template<typename T>
888 {
889 if (const FComponentHeader* Header = FindComponentHeader(ComponentType))
890 {
891 return TComponentLock<TReadOptional<T>>(Header, LockMode);
892 }
894 }
895
899 template<typename T>
905
909 template<typename T>
918
919private:
920
921 friend struct FEntityInitializer;
923
925 uint64 SerialNumber;
927 uint32 UniqueID;
929 uint16 NumComponents;
931 uint16 Size;
933 uint16 Capacity;
935 uint16 MaxCapacity;
936
939
941 FMovieSceneEntityID* EntityIDs;
942
944 uint8* ComponentData;
945
946public:
949};
950
951
970
971
977{
980
983
986
991
994 {
995 return AllocationIndex;
996 }
997
999 operator const FEntityAllocation*() const
1000 {
1001 return GetAllocation();
1002 }
1003
1006 {
1007 return GetAllocation();
1008 }
1009
1011 operator const FComponentMask&() const
1012 {
1013 return GetAllocationType();
1014 }
1015
1017 {
1018 return A.Manager == B.Manager && A.AllocationIndex == B.AllocationIndex;
1019 }
1020
1023 {
1024 return Proxy.AllocationIndex;
1025 }
1026
1027private:
1029
1031 : Manager(InManager), AllocationIndex(InAllocationIndex)
1032 {}
1033
1035 const FEntityManager* Manager;
1036
1038 int32 AllocationIndex;
1039};
1040
1041
1051
1062
1068
1070{
1071 // Since FEntityAllocation always defaults to Mutex locking, we only
1072 // read/write to the allocation if LockFree is specified here (implying we are always in single-thread mode)
1074 {
1075 Allocation = InAllocation;
1077 }
1078 else
1079 {
1080 Allocation = nullptr;
1081 }
1082}
1083
1085{
1086 // Always reset back to Mutex
1087 if (Allocation)
1088 {
1089 Allocation->LockMode = EComponentHeaderLockMode::Mutex;
1090 }
1091}
1092
1097 : Header(InHeader)
1098 , LockMode(InLockMode)
1099{
1101 {
1102 InHeader->ReadWriteLock.ReadLock();
1103 }
1104
1105 InHeader->ScheduledAccessCount.fetch_add(1, std::memory_order_relaxed);
1106}
1108 : Header(RHS.Header)
1109 , LockMode(RHS.LockMode)
1110{
1111 RHS.Header = nullptr;
1112}
1114{
1115 if (Header)
1116 {
1117 Header->ScheduledAccessCount.fetch_add(1, std::memory_order_relaxed);
1118 if (LockMode == EComponentHeaderLockMode::Mutex)
1119 {
1120 Header->ReadWriteLock.ReadUnlock();
1121 }
1122 }
1123
1124 Header = RHS.Header;
1125 LockMode = RHS.LockMode;
1126 RHS.Header = nullptr;
1127 return *this;
1128}
1129
1131{
1132 if (Header)
1133 {
1134 Header->ScheduledAccessCount.fetch_sub(1, std::memory_order_relaxed);
1135 if (LockMode == EComponentHeaderLockMode::Mutex)
1136 {
1137 Header->ReadWriteLock.ReadUnlock();
1138 }
1139 }
1140}
1141
1143 : Header(nullptr)
1144 , WriteContext(FEntityAllocationWriteContext::NewAllocation())
1145 , LockMode(EComponentHeaderLockMode::Mutex)
1146{}
1147
1149 : Header(InHeader)
1150 , WriteContext(InWriteContext)
1151 , LockMode(InLockMode)
1152{
1154 {
1155 InHeader->ReadWriteLock.WriteLock();
1156 }
1157
1158 const int32 PreviousAccessCount = InHeader->ScheduledAccessCount.fetch_add(1, std::memory_order_relaxed);
1159 checkf(PreviousAccessCount == 0, TEXT("Component header is still in use when it is being opened for write!"));
1160}
1161
1163 : Header(RHS.Header)
1164 , WriteContext(RHS.WriteContext)
1165 , LockMode(RHS.LockMode)
1166{
1167 RHS.Header = nullptr;
1168}
1170{
1171 if (Header)
1172 {
1173 Header->PostWriteComponents(WriteContext);
1174 Header->ScheduledAccessCount.fetch_sub(1, std::memory_order_relaxed);
1175
1176 if (LockMode == EComponentHeaderLockMode::Mutex)
1177 {
1178 Header->ReadWriteLock.WriteUnlock();
1179 }
1180 }
1181
1182 Header = RHS.Header;
1183 WriteContext = RHS.WriteContext;
1184 LockMode = RHS.LockMode;
1185
1186 RHS.Header = nullptr;
1187 return *this;
1188}
1190{
1191 if (Header)
1192 {
1193 Header->PostWriteComponents(WriteContext);
1194 Header->ScheduledAccessCount.fetch_sub(1, std::memory_order_relaxed);
1195
1196 if (LockMode == EComponentHeaderLockMode::Mutex)
1197 {
1198 Header->ReadWriteLock.WriteUnlock();
1199 }
1200 }
1201}
1202
1203
1204} // namespace MovieScene
1205} // namespace UE
1206
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
#define DECLARE_STATS_GROUP(GroupDesc, GroupId, GroupCat)
Definition Stats.h:689
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_int32
Definition NumericLimits.h:25
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
UE_FORCEINLINE_HINT ElementType & Emplace_GetRef(ArgsType &&... Args) UE_LIFETIMEBOUND
Definition Array.h:2613
void Append(const TArray< OtherElementType, OtherAllocatorType > &Source)
Definition Array.h:2412
Definition CriticalSection.h:14
UE_REWRITE void ReadUnlock()
Definition CriticalSection.h:41
UE_REWRITE void WriteUnlock()
Definition CriticalSection.h:26
Definition MovieSceneEntityManager.h:81
Definition MovieSceneSequence.h:73
UE_REWRITE constexpr auto FindBy(RangeType &&Range, const ValueType &Value, ProjectionType Proj) -> decltype(AlgoImpl::FindBy(Forward< RangeType >(Range), Value, MoveTemp(Proj)))
Definition Find.h:68
EComponentHeaderLockMode
Definition MovieSceneEntitySystemTypes.h:112
EMutuallyInclusiveComponentType
Definition MovieSceneEntitySystemTypes.h:100
EComplexFilterMode
Definition MovieSceneEntitySystemTypes.h:89
ESystemPhase
Definition MovieSceneEntitySystemTypes.h:45
EComponentTypeFlags
Definition MovieSceneEntitySystemTypes.h:70
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition MovieSceneEntitySystemTypes.h:499
int32 fetch_sub(const int32 Value, const std::memory_order)
Definition MovieSceneEntitySystemTypes.h:501
int32 fetch_add(const int32 Value, const std::memory_order)
Definition MovieSceneEntitySystemTypes.h:500
int32 exchange(const int32 Value, const std::memory_order)
Definition MovieSceneEntitySystemTypes.h:502
Definition MovieSceneEntitySystemTypes.h:460
FComponentHeader(const FComponentHeader &)=delete
std::atomic< int32 > FScheduledAccessCountType
Definition MovieSceneEntitySystemTypes.h:508
bool IsTag() const
Definition MovieSceneEntitySystemTypes.h:523
FComponentHeader & operator=(FComponentHeader &&)=delete
FComponentTypeID ComponentType
Definition MovieSceneEntitySystemTypes.h:518
bool HasData() const
Definition MovieSceneEntitySystemTypes.h:535
bool HasBeenWrittenToSince(uint64 InSystemSerial) const
Definition MovieSceneEntitySystemTypes.h:554
FComponentHeader & operator=(const FComponentHeader &)=delete
FComponentHeader(FComponentHeader &&)=delete
void PostWriteComponents(FEntityAllocationWriteContext InWriteContext) const
Definition MovieSceneEntitySystemTypes.h:549
FTransactionallySafeRWLock ReadWriteLock
Definition MovieSceneEntitySystemTypes.h:489
void * GetValuePtr(int32 Offset) const
Definition MovieSceneEntitySystemTypes.h:543
FScheduledAccessCountType ScheduledAccessCount
Definition MovieSceneEntitySystemTypes.h:512
uint8 Sizeof
Definition MovieSceneEntitySystemTypes.h:515
uint8 * Components
Definition MovieSceneEntitySystemTypes.h:486
Definition MovieSceneEntityIDs.h:40
void SetAll(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntityIDs.h:454
FComponentMask & CombineWithBitwiseOR(const FComponentMask &Other, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:76
int32 Num() const
Definition MovieSceneEntityIDs.h:147
void Set(FComponentTypeID InComponentType)
Definition MovieSceneEntityIDs.h:444
void Reset()
Definition MovieSceneEntityIDs.h:142
Definition MovieSceneEntityIDs.h:174
Definition EntityAllocationIterator.h:23
Definition MovieSceneEntitySystemTypes.h:957
FEntityAllocationMutexGuard(const FEntityAllocationMutexGuard &)=delete
void operator=(const FEntityAllocationMutexGuard &)=delete
void operator=(const FEntityAllocationMutexGuard &&)=delete
FEntityAllocationMutexGuard(FEntityAllocation *InAllocation, EComponentHeaderLockMode InLockMode)
Definition MovieSceneEntitySystemTypes.h:1069
~FEntityAllocationMutexGuard()
Definition MovieSceneEntitySystemTypes.h:1084
FEntityAllocationMutexGuard(const FEntityAllocationMutexGuard &&)=delete
Definition MovieSceneEntitySystemTypes.h:977
friend bool operator==(const FEntityAllocationProxy &A, const FEntityAllocationProxy &B)
Definition MovieSceneEntitySystemTypes.h:1016
MOVIESCENE_API const FComponentMask & GetAllocationType() const
Definition MovieSceneEntitySystemTypes.cpp:154
friend uint32 GetTypeHash(FEntityAllocationProxy Proxy)
Definition MovieSceneEntitySystemTypes.h:1022
int32 GetAllocationIndex() const
Definition MovieSceneEntitySystemTypes.h:993
static FEntityAllocationProxy MakeInstance(const FEntityManager *InManager, int32 InAllocationIndex)
Definition MovieSceneEntitySystemTypes.h:987
MOVIESCENE_API const FEntityAllocation * GetAllocation() const
Definition MovieSceneEntitySystemTypes.cpp:144
Definition MovieSceneEntitySystemTypes.h:425
static FEntityAllocationWriteContext NewAllocation()
Definition MovieSceneEntitySystemTypes.h:428
uint64 GetSystemSerial() const
Definition MovieSceneEntitySystemTypes.h:445
FEntityAllocationWriteContext Add(FEntityAllocationWriteContext InOther) const
Definition MovieSceneEntitySystemTypes.h:433
FEntityAllocationWriteContext Subtract(FEntityAllocationWriteContext InOther) const
Definition MovieSceneEntitySystemTypes.h:439
Definition MovieSceneEntitySystemTypes.h:624
TComponentLock< TRead< T > > ReadComponents(TComponentTypeID< T > ComponentType) const
Definition MovieSceneEntitySystemTypes.h:877
FComponentHeader * ComponentHeaders
Definition MovieSceneEntitySystemTypes.h:948
bool HasStructureChangedSince(uint64 InSystemVersion) const
Definition MovieSceneEntitySystemTypes.h:777
~FEntityAllocation()
Definition MovieSceneEntitySystemTypes.h:641
TComponentLock< TWrite< T > > WriteComponents(TComponentTypeID< T > ComponentType, FEntityAllocationWriteContext InWriteContext) const
Definition MovieSceneEntitySystemTypes.h:900
FEntityAllocation & operator=(const FEntityAllocation &)=delete
void PostModifyStructureExcludingHeaders(FEntityAllocationWriteContext InWriteContext)
Definition MovieSceneEntitySystemTypes.h:786
int32 GetNumComponentTypes() const
Definition MovieSceneEntitySystemTypes.h:804
const FComponentHeader & GetComponentHeaderChecked(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntitySystemTypes.h:714
int32 GetCapacity() const
Definition MovieSceneEntitySystemTypes.h:831
TComponentLock< TReadOptional< T > > TryReadComponents(TComponentTypeID< T > ComponentType) const
Definition MovieSceneEntitySystemTypes.h:887
const FComponentHeader * FindComponentHeader(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntitySystemTypes.h:690
FEntityAllocation()
Definition MovieSceneEntitySystemTypes.h:629
MOVIESCENE_API TComponentLock< FWriteErased > WriteComponentsErased(FComponentTypeID ComponentType, FEntityAllocationWriteContext InWriteContext) const
Definition MovieSceneEntitySystemTypes.cpp:118
EComponentHeaderLockMode GetCurrentLockMode() const
Definition MovieSceneEntitySystemTypes.h:848
FEntityAllocation(const FEntityAllocation &)=delete
MOVIESCENE_API TComponentLock< FReadErasedOptional > TryReadComponentsErased(FComponentTypeID ComponentType) const
Definition MovieSceneEntitySystemTypes.cpp:124
uint32 GetUniqueID() const
Definition MovieSceneEntitySystemTypes.h:767
int32 GetMaxCapacity() const
Definition MovieSceneEntitySystemTypes.h:822
TArrayView< FComponentHeader > GetComponentHeaders()
Definition MovieSceneEntitySystemTypes.h:666
TArrayView< const FComponentHeader > GetComponentHeaders() const
Definition MovieSceneEntitySystemTypes.h:657
MOVIESCENE_API TComponentLock< FWriteErasedOptional > TryWriteComponentsErased(FComponentTypeID ComponentType, FEntityAllocationWriteContext InWriteContext) const
Definition MovieSceneEntitySystemTypes.cpp:134
const void * GetComponentDataAddress() const
Definition MovieSceneEntitySystemTypes.h:757
MOVIESCENE_API TComponentLock< FReadErased > ReadComponentsErased(FComponentTypeID ComponentType) const
Definition MovieSceneEntitySystemTypes.cpp:112
int32 Num() const
Definition MovieSceneEntitySystemTypes.h:813
TComponentLock< TWriteOptional< T > > TryWriteComponents(TComponentTypeID< T > ComponentType, FEntityAllocationWriteContext InWriteContext) const
Definition MovieSceneEntitySystemTypes.h:910
const FMovieSceneEntityID * GetRawEntityIDs() const
Definition MovieSceneEntitySystemTypes.h:748
int32 GetSlack() const
Definition MovieSceneEntitySystemTypes.h:840
TArrayView< const FMovieSceneEntityID > GetEntityIDs() const
Definition MovieSceneEntitySystemTypes.h:739
bool HasComponent(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntitySystemTypes.h:678
FComponentHeader * FindComponentHeader(FComponentTypeID ComponentTypeID)
Definition MovieSceneEntitySystemTypes.h:702
void PostModifyStructure(FEntityAllocationWriteContext InWriteContext)
Definition MovieSceneEntitySystemTypes.h:792
FComponentHeader & GetComponentHeaderChecked(FComponentTypeID ComponentTypeID)
Definition MovieSceneEntitySystemTypes.h:728
Definition MovieSceneEntitySystemTypes.h:295
MOVIESCENE_API bool IsValid() const
Definition MovieSceneEntitySystemTypes.cpp:86
FEntityComponentFilter & Any(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTypes.h:332
FEntityComponentFilter & AnyLenient(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTypes.h:341
FEntityComponentFilter & Deny(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTypes.h:360
FEntityComponentFilter & Any(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTypes.h:336
FEntityComponentFilter & All(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTypes.h:308
FEntityComponentFilter & Deny(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTypes.h:355
FEntityComponentFilter & Complex(const FComponentMask &InComponentMask, EComplexFilterMode ComplexMode)
Definition MovieSceneEntitySystemTypes.h:376
FEntityComponentFilter & Combine(const FEntityComponentFilter &CombineWith)
Definition MovieSceneEntitySystemTypes.h:385
FEntityComponentFilter & None(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTypes.h:325
FEntityComponentFilter & All(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTypes.h:313
MOVIESCENE_API bool Match(const FComponentMask &Input) const
Definition MovieSceneEntitySystemTypes.cpp:43
FEntityComponentFilter & Complex(std::initializer_list< FComponentTypeID > InComponentTypes, EComplexFilterMode ComplexMode)
Definition MovieSceneEntitySystemTypes.h:366
void Reset()
Definition MovieSceneEntitySystemTypes.h:297
FEntityComponentFilter & None(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTypes.h:320
Definition MovieSceneEntitySystemTypes.h:1053
FEntityRange AsRange() const
Definition MovieSceneEntitySystemTypes.h:1057
FEntityAllocation * Allocation
Definition MovieSceneEntitySystemTypes.h:1054
int32 ComponentOffset
Definition MovieSceneEntitySystemTypes.h:1055
Definition MovieSceneEntitySystemTypes.h:1064
FMovieSceneEntityID EntityID
Definition MovieSceneEntitySystemTypes.h:1066
FEntityDataLocation Data
Definition MovieSceneEntitySystemTypes.h:1065
Definition MovieSceneEntityManager.cpp:75
Definition MovieSceneEntitySystemTypes.h:1046
int32 Num
Definition MovieSceneEntitySystemTypes.h:1049
int32 ComponentStartOffset
Definition MovieSceneEntitySystemTypes.h:1048
const FEntityAllocation * Allocation
Definition MovieSceneEntitySystemTypes.h:1047
Definition MovieSceneEntitySystemTypes.h:123
friend bool operator<(FInterrogationChannel A, FInterrogationChannel B)
Definition MovieSceneEntitySystemTypes.h:220
FInterrogationChannel()
Definition MovieSceneEntitySystemTypes.h:127
int32 AsIndex() const
Definition MovieSceneEntitySystemTypes.h:159
friend bool operator==(FInterrogationChannel A, FInterrogationChannel B)
Definition MovieSceneEntitySystemTypes.h:210
static FInterrogationChannel Default()
Definition MovieSceneEntitySystemTypes.h:168
static FInterrogationChannel First()
Definition MovieSceneEntitySystemTypes.h:176
static FInterrogationChannel Invalid()
Definition MovieSceneEntitySystemTypes.h:200
friend uint32 GetTypeHash(FInterrogationChannel In)
Definition MovieSceneEntitySystemTypes.h:205
static FInterrogationChannel FromIndex(int32 InIndex)
Definition MovieSceneEntitySystemTypes.h:184
bool IsValid() const
Definition MovieSceneEntitySystemTypes.h:151
friend bool operator!=(FInterrogationChannel A, FInterrogationChannel B)
Definition MovieSceneEntitySystemTypes.h:215
FInterrogationChannel operator++()
Definition MovieSceneEntitySystemTypes.h:134
static FInterrogationChannel Last()
Definition MovieSceneEntitySystemTypes.h:192
Definition MovieSceneEntitySystemTypes.h:284
bool IsValid() const
Definition MovieSceneEntitySystemTypes.h:287
UMovieSceneSequence * Sequence
Definition MovieSceneEntitySystemTypes.h:285
Definition MovieSceneEntitySystemTypes.h:237
FInterrogationKey()
Definition MovieSceneEntitySystemTypes.h:244
bool IsValid() const
Definition MovieSceneEntitySystemTypes.h:253
FInterrogationChannel Channel
Definition MovieSceneEntitySystemTypes.h:239
friend bool operator!=(const FInterrogationKey &A, const FInterrogationKey &B)
Definition MovieSceneEntitySystemTypes.h:268
FInterrogationKey(FInterrogationChannel InChannel, int32 InInterrogationIndex)
Definition MovieSceneEntitySystemTypes.h:248
friend bool operator==(const FInterrogationKey &A, const FInterrogationKey &B)
Definition MovieSceneEntitySystemTypes.h:263
static FInterrogationKey Default(int32 InInterrogationIndex=0)
Definition MovieSceneEntitySystemTypes.h:273
friend uint32 GetTypeHash(const FInterrogationKey &In)
Definition MovieSceneEntitySystemTypes.h:258
int32 InterrogationIndex
Definition MovieSceneEntitySystemTypes.h:242
Definition MovieSceneEntityIDs.h:302
Definition MovieSceneEntitySystemTypes.h:565
FScopedHeaderReadLock(const FScopedHeaderReadLock &RHS)=delete
void operator=(const FScopedHeaderReadLock &RHS)=delete
FScopedHeaderReadLock()
Definition MovieSceneEntitySystemTypes.h:1093
~FScopedHeaderReadLock()
Definition MovieSceneEntitySystemTypes.h:1130
Definition MovieSceneEntitySystemTypes.h:587
FScopedHeaderWriteLock()
Definition MovieSceneEntitySystemTypes.h:1142
void operator=(const FScopedHeaderWriteLock &RHS)=delete
~FScopedHeaderWriteLock()
Definition MovieSceneEntitySystemTypes.h:1189
FScopedHeaderWriteLock(const FScopedHeaderWriteLock &RHS)=delete
Definition MovieSceneComponentPtr.h:109
Definition MovieSceneEntityIDs.h:283