6#include "Containers/Map.h"
38 inline static std::enable_if_t<TPointerIsConvertibleFromTo<T, const UObject>::Value,
bool>
IsGarbage(T* InObject)
41 static_assert(
bTypeDependentFalse,
"Raw object pointers are no longer supported. Please use TObjectPtr<T> instead.");
70template<
typename... T,
int... Indices>
83 template<
typename CallbackType>
95template<
typename... T>
113 return A.Key ==
B.Key;
116 template<
typename CallbackType>
153 template<
typename ...ComponentTypes>
162 .CombineFilter(InFilter)
178 template<
typename ...ComponentTypes>
187 .CombineFilter(InFilter)
189 .Iterate_PerAllocation(&
Linker->EntityManager, [
this](
const FEntityAllocation* Allocation){ this->VisitUnlinkedAllocation(Allocation); });
195 template<
typename ...ComponentTypes>
203 template<
typename ...ComponentTypes>
230 template<
typename HandlerType>
248 for (
auto Inputs =
OutputToEntity.CreateKeyIterator(OutputIndex); Inputs; ++Inputs)
250 if (
ensure(
Linker->EntityManager.IsAllocated(Inputs.Value())))
257 Inputs.RemoveCurrent();
289 Outputs.RemoveAt(OutputIndex, 1);
306 template<
typename HandlerType>
340 return &
Outputs[*OutputIndex].OutputData;
352 return &
Outputs[*OutputIndex].OutputData;
383 template<
typename ...ComponentTypes>
398 Outputs[OutputIndex].Aggregate.bNeedsRestoration =
true;
484 return OutputIndex ? *OutputIndex :
NO_OUTPUT;
490 return OutputIndex ? *OutputIndex :
NO_OUTPUT;
534template<
typename OutputType,
typename...
InputTypes>
543template<
typename OutputType,
typename...
InputTypes>
557 Linker->Events.TagGarbage.RemoveAll(
this);
558 Linker->Events.CleanTaggedGarbage.RemoveAll(
this);
559 Linker->Events.AddReferencedObjects.RemoveAll(
this);
589 if (KeyType::GarbageTraits::IsGarbage(
Output.Key))
602 for (
auto It = this->
OutputToEntity.CreateKeyIterator(OutputIndex); It; ++It)
610 for (
auto It = this->
KeyToOutput.CreateIterator(); It; ++It)
612 if (KeyType::GarbageTraits::IsGarbage(It.Key()) || !this->
Outputs.IsValidIndex(It.Value()))
673template<
typename OutputType,
typename... KeyType>
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
typename UE4IntegerSequence_Private::TMakeIntegerSequenceImpl< T, N >::Type TMakeIntegerSequence
Definition IntegerSequence.h:31
#define MAX_uint16
Definition NumericLimits.h:20
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition UObjectGlobals.h:2492
Definition MovieScene.Build.cs:6
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
UE_FORCEINLINE_HINT bool IsValidIndex(int32 InIndex) const
Definition BitArray.h:1450
int32 Add(const bool Value)
Definition BitArray.h:615
void Empty(int32 ExpectedNumBits=0)
Definition BitArray.h:779
int32 PadToNum(int32 DesiredNum, bool bPadValue)
Definition BitArray.h:1438
Definition BitArray.h:1944
Definition UnrealString.h.inl:34
Definition SparseArray.h:524
Definition MovieSceneEntitySystemLinker.h:113
struct UMovieSceneEntitySystemLinker::@1494 Events
FMovieSceneEntitySystemLinkerEvent TagGarbage
Definition MovieSceneEntitySystemLinker.h:388
Definition MovieSceneEntitySystem.h:62
UMovieSceneEntitySystemLinker * GetLinker() const
Definition MovieSceneEntitySystem.h:161
UE_REWRITE bool AnyOf(const RangeType &Range)
Definition AnyOf.h:20
void CollectGarbageForOutput(void *)
Definition MovieSceneOverlappingEntityTracker.h:91
void AddReferencedObjectForComponent(FReferenceCollector *ReferenceCollector, FObjectComponent *ComponentData)
Definition BuiltInComponentTypes.cpp:250
std::conditional_t<(THasAddReferencedObjectForComponent< KeyType >::Value||...)||THasAddReferencedObjectForComponent< OutputType >::Value, TOverlappingEntityTracker_WithGarbage< OutputType, KeyType... >, TOverlappingEntityTracker_NoGarbage< OutputType, KeyType... > > TOverlappingEntityTracker
Definition MovieSceneOverlappingEntityTracker.h:678
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition ObjectKey.h:19
UObject * ResolveObjectPtr() const
Definition ObjectKey.h:126
TCallTraitsParamTypeHelper< T, PassByValue >::ParamType ParamType
Definition UnrealTypeTraits.h:275
Definition IntegerSequence.h:9
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * GetEvenIfUnreachable() const
Definition WeakObjectPtrTemplates.h:189
Definition BuiltInComponentTypes.h:578
struct UE::MovieScene::FBuiltInComponentTypes::@1489 Tags
FComponentTypeID NeedsLink
Definition BuiltInComponentTypes.h:789
static bool IsBoundObjectGarbage(UObject *InObject)
Definition BuiltInComponentTypes.h:845
static MOVIESCENE_API FBuiltInComponentTypes * Get()
Definition BuiltInComponentTypes.cpp:667
FComponentTypeID RestoreState
Definition BuiltInComponentTypes.h:775
FComponentTypeID NeedsUnlink
Definition BuiltInComponentTypes.h:790
Definition MovieSceneEntityIDs.h:174
Definition MovieSceneEntitySystemTypes.h:624
int32 Num() const
Definition MovieSceneEntitySystemTypes.h:813
const FMovieSceneEntityID * GetRawEntityIDs() const
Definition MovieSceneEntitySystemTypes.h:748
bool HasComponent(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntitySystemTypes.h:678
Definition MovieSceneEntitySystemTypes.h:295
Definition MovieSceneOverlappingEntityTracker.h:26
bool bNeedsRestoration
Definition MovieSceneOverlappingEntityTracker.h:27
Definition MovieSceneEntitySystemTask.h:1045
Definition MovieSceneOverlappingEntityTracker.h:32
static bool IsGarbage(FObjectComponent &InComponent)
Definition MovieSceneOverlappingEntityTracker.h:52
static bool IsGarbage(TObjectPtr< T > &InObject)
Definition MovieSceneOverlappingEntityTracker.h:48
static void AddReferencedObjects(FReferenceCollector &ReferenceCollector, T *In)
Definition MovieSceneOverlappingEntityTracker.h:58
static constexpr bool IsGarbage(...)
Definition MovieSceneOverlappingEntityTracker.h:33
static std::enable_if_t< TPointerIsConvertibleFromTo< T, const UObject >::Value, bool > IsGarbage(T *InObject)
Definition MovieSceneOverlappingEntityTracker.h:38
static bool IsGarbage(FObjectKey InObject)
Definition MovieSceneOverlappingEntityTracker.h:43
Definition MovieSceneEntityIDs.h:302
Definition BuiltInComponentTypes.h:256
Definition MovieSceneComponentPtr.h:17
Definition MovieSceneEntityIDs.h:283
TFilteredEntityTask< T... > CombineFilter(const FEntityComponentFilter &InFilter)
Definition MovieSceneEntitySystemTask.h:268
static bool IsGarbage(TOverlappingEntityInput< T... > &InParam)
Definition MovieSceneOverlappingEntityTracker.h:73
static void Unpack(const TTuple< T... > &InTuple, CallbackType &&Callback)
Definition MovieSceneOverlappingEntityTracker.h:84
static void AddReferencedObjects(FReferenceCollector &ReferenceCollector, TOverlappingEntityInput< T... > &InParam)
Definition MovieSceneOverlappingEntityTracker.h:78
Definition MovieSceneOverlappingEntityTracker.h:67
Definition MovieSceneComponentTypeInfo.h:67
Definition MovieSceneOverlappingEntityTracker.h:514
OutputType OutputData
Definition MovieSceneOverlappingEntityTracker.h:516
FEntityOutputAggregate Aggregate
Definition MovieSceneOverlappingEntityTracker.h:517
KeyType Key
Definition MovieSceneOverlappingEntityTracker.h:515
Definition MovieSceneOverlappingEntityTracker.h:131
uint16 MakeOutput(FMovieSceneEntityID EntityID, ParamType InKey, bool bAlwaysInvalidate)
Definition MovieSceneOverlappingEntityTracker.h:423
const OutputType * FindOutput(FMovieSceneEntityID EntityID) const
Definition MovieSceneOverlappingEntityTracker.h:334
void VisitUnlinkedAllocation(const FEntityAllocation *Allocation)
Definition MovieSceneOverlappingEntityTracker.h:212
bool NeedsRestoration(ParamType Key, bool bEnsureOutput=false) const
Definition MovieSceneOverlappingEntityTracker.h:358
TBitArray NewOutputs
Definition MovieSceneOverlappingEntityTracker.h:526
void VisitLinkedAllocation(const FEntityAllocation *Allocation, TComponentPtr< const ComponentTypes >... ReadKeys)
Definition MovieSceneOverlappingEntityTracker.h:204
void Destroy(HandlerType &&InHandler)
Definition MovieSceneOverlappingEntityTracker.h:307
void FindEntityIDs(ParamType Key, TArray< FMovieSceneEntityID > &OutEntityIDs) const
Definition MovieSceneOverlappingEntityTracker.h:326
const OutputType * FindOutput(ParamType Key) const
Definition MovieSceneOverlappingEntityTracker.h:346
bool IsEmpty() const
Definition MovieSceneOverlappingEntityTracker.h:298
bool IsOutputValid(uint16 OutputIndex)
Definition MovieSceneOverlappingEntityTracker.h:506
TMultiMap< uint16, FMovieSceneEntityID > OutputToEntity
Definition MovieSceneOverlappingEntityTracker.h:521
void ClearOutputByEntity(FMovieSceneEntityID EntityID)
Definition MovieSceneOverlappingEntityTracker.h:493
void SetNeedsRestoration(ParamType Key, bool bNeedsRestoration, bool bEnsureOutput=false)
Definition MovieSceneOverlappingEntityTracker.h:370
bool bIsInitialized
Definition MovieSceneOverlappingEntityTracker.h:528
TMap< FMovieSceneEntityID, uint16 > EntityToOutput
Definition MovieSceneOverlappingEntityTracker.h:520
bool IsInitialized() const
Definition MovieSceneOverlappingEntityTracker.h:135
void ProcessInvalidatedOutputs(UMovieSceneEntitySystemLinker *Linker, HandlerType &&InHandler)
Definition MovieSceneOverlappingEntityTracker.h:231
TOverlappingEntityInput< InputKeyTypes... > KeyType
Definition MovieSceneOverlappingEntityTracker.h:132
void VisitActiveAllocation(const FEntityAllocation *Allocation, TComponentPtr< const ComponentTypes >... ReadKeys)
Definition MovieSceneOverlappingEntityTracker.h:196
typename TCallTraits< KeyType >::ParamType ParamType
Definition MovieSceneOverlappingEntityTracker.h:133
void Update(UMovieSceneEntitySystemLinker *Linker, TComponentTypeID< InputKeyTypes >... InKeyComponents, const FEntityComponentFilter &InFilter)
Definition MovieSceneOverlappingEntityTracker.h:144
TBitArray InvalidatedOutputs
Definition MovieSceneOverlappingEntityTracker.h:526
TMap< KeyType, uint16 > KeyToOutput
Definition MovieSceneOverlappingEntityTracker.h:523
static constexpr uint16 NO_OUTPUT
Definition MovieSceneOverlappingEntityTracker.h:530
void VisitActiveAllocationImpl(const FEntityAllocation *Allocation, TComponentPtr< const ComponentTypes >... Keys)
Definition MovieSceneOverlappingEntityTracker.h:384
uint16 FindOutputByKey(ParamType Key) const
Definition MovieSceneOverlappingEntityTracker.h:481
void UpdateUnlinkedOnly(UMovieSceneEntitySystemLinker *Linker, TComponentTypeID< ComponentTypes >... InKeyComponent, const FEntityComponentFilter &InFilter)
Definition MovieSceneOverlappingEntityTracker.h:179
void UpdateFromComponents(UMovieSceneEntitySystemLinker *Linker, const FEntityComponentFilter &InFilter, TComponentTypeID< ComponentTypes >... InKeyComponents)
Definition MovieSceneOverlappingEntityTracker.h:154
TSparseArray< FOutput > Outputs
Definition MovieSceneOverlappingEntityTracker.h:524
void VisitUnlinkedAllocationImpl(const FEntityAllocation *Allocation)
Definition MovieSceneOverlappingEntityTracker.h:410
uint16 CreateOutputByKey(ParamType Key)
Definition MovieSceneOverlappingEntityTracker.h:461
uint16 FindOutputByEntity(FMovieSceneEntityID EntityID) const
Definition MovieSceneOverlappingEntityTracker.h:487
Definition MovieSceneOverlappingEntityTracker.h:536
void Initialize(UMovieSceneEntitySystem *OwningSystem)
Definition MovieSceneOverlappingEntityTracker.h:537
Definition MovieSceneOverlappingEntityTracker.h:545
void CleanTaggedGarbage(UMovieSceneEntitySystemLinker *Linker)
Definition MovieSceneOverlappingEntityTracker.h:619
void AddReferencedObjects(UMovieSceneEntitySystemLinker *Linker, FReferenceCollector &ReferenceCollector)
Definition MovieSceneOverlappingEntityTracker.h:640
void Initialize(UMovieSceneEntitySystem *OwningSystem)
Definition MovieSceneOverlappingEntityTracker.h:563
TWeakObjectPtr< UMovieSceneEntitySystem > WeakOwningSystem
Definition MovieSceneOverlappingEntityTracker.h:668
~TOverlappingEntityTracker_WithGarbage()
Definition MovieSceneOverlappingEntityTracker.h:551
void TagGarbage(UMovieSceneEntitySystemLinker *Linker)
Definition MovieSceneOverlappingEntityTracker.h:578
Definition MovieSceneComponentPtr.h:195