16template <
typename TSOA>
17class TConstParticleView;
19template <
typename TSOA>
22template <
typename TSOA>
23class TConstHandleView;
25template <
typename TSOA>
42template <
typename TParticleView,
typename ContextCreatorType,
typename Lambda>
45template <
typename THandleView,
typename ContextCreatorType,
typename Lambda>
48template <
typename TSOA,
typename ContextCreatorType,
typename Lambda>
54template <
typename TSOA,
typename ContextCreatorType,
typename Lambda>
60template <
typename TSOA,
typename ContextCreatorType,
typename Lambda>
66template <
typename TSOA,
typename ContextCreatorType,
typename Lambda>
72template <
typename TParticle,
typename ContextCreatorType,
typename Lambda>
85template <
typename TView,
typename ContextCreatorType,
typename Lambda>
92 for (
auto& Particle : Particles)
94 Func(Particle,
Index++, ContextIndex);
98template <
typename TView,
typename ContextCreatorType,
typename Lambda>
113template <
typename TSOA>
163 template <
typename TSOA2>
175template <
typename TSOA>
204 template <
typename TSOA2>
208template <
typename THandle>
214template <
typename THandle>
220template <
typename TSOA>
245 template <
typename TParticleView,
typename ContextCreatorType,
typename Lambda>
248 template <
typename ContextCreatorType,
typename Lambda>
254 template <
typename Lambda>
268template <
typename TSOA>
293 template <
typename ContextCreatorType,
typename Lambda>
299 template <
typename Lambda>
309template <
typename THandle>
315template <
typename THandle>
321template <
typename TSOA>
336 template <
typename TDerivedHandle>
357template <
typename TSOA>
447 return operator bool() && (
operator*()).LightWeightDisabled();
489#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
497 check(
TransientHandle.GeometryParticles->DirtyValidationCount() == DirtyValidationCount &&
TEXT(
"Iterating over particles while modifying the underlying SOA. Consider delaying any operations that require a Handle*"));
511#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
523#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
524 int32 DirtyValidationCount;
528template <
typename TSOA>
562template <
typename TSOA>
568template <
typename TSOA>
575template <
typename TSOA>
612 template <
typename ContextCreatorType,
typename Lambda>
618 template <
typename Lambda>
628 template <
typename TParticleView,
typename ContextCreatorType,
typename Lambda>
637template <
typename TSOAIn>
663 template <
typename ContextCreatorType,
typename Lambda>
669 template <
typename Lambda>
680template <
typename TSOA>
686template <
typename TSOA>
692template <
typename TSOA>
698template <
typename TSOA>
706template <
typename TSOA>
716template <
typename TParticleView,
typename ContextCreatorType,
typename Lambda>
722 using THandle =
typename TSOA::THandleType;
723 using THandleBase =
typename THandle::THandleBase;
724 using TTransientHandle =
typename THandle::TTransientHandle;
728 if (!
Handle.LightWeightDisabled())
736 for (
int32 ViewIndex = 0; ViewIndex < Particles.
SOAViews.Num(); ++ViewIndex)
740 if (ParticleCount == 0)
749 const int32 HandleCount = CurHandlesArray->Num();
755 THandle* HandlePtr = (*CurHandlesArray)[HandleIdx];
756 THandleBase
Handle(HandlePtr->GeometryParticles, HandlePtr->ParticleIdx);
777template <
typename THandleView,
typename ContextCreatorType,
typename Lambda>
788 Func(static_cast<THandle&>(*HandleView.Handles[Index]), Index, ContextIndex);
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define DECLARE_CYCLE_STAT(CounterName, StatId, GroupId)
Definition Stats.h:669
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
#define PARTICLE_ITERATOR_RANGED_FOR_CHECK
Definition Particles.h:14
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
if(Failed) console_printf("Failed.\n")
Definition ParticleIterator.h:115
TConstHandleIterator()
Definition ParticleIterator.h:119
const THandle * operator->() const
Definition ParticleIterator.h:152
TConstHandleIterator(const TArray< THandle * > &InHandles)
Definition ParticleIterator.h:125
const THandle & operator*() const
Definition ParticleIterator.h:147
typename TSOA::THandleType THandle
Definition ParticleIterator.h:117
int32 ComputeSize() const
Definition ParticleIterator.h:157
TConstHandleIterator< TSOA > & operator++()
Definition ParticleIterator.h:136
const TArray< THandle * > * Handles
Definition ParticleIterator.h:166
bool CurrentIsLightWeightDisabled() const
Definition ParticleIterator.h:169
int32 CurIdx
Definition ParticleIterator.h:167
Definition ParticleIterator.h:222
TConstHandleIterator< TSOA > End() const
Definition ParticleIterator.h:242
void ParallelFor(const Lambda &Func) const
Definition ParticleIterator.h:255
TConstHandleView(const TArray< THandle * > &InHandles)
Definition ParticleIterator.h:229
typename TSOA::THandleType THandle
Definition ParticleIterator.h:224
TConstHandleIterator< TSOA > Begin() const
Definition ParticleIterator.h:239
void ParallelFor(const ContextCreatorType &ContextCreator, const Lambda &Func) const
Definition ParticleIterator.h:249
friend void HandleViewParallelForImp(const TParticleView &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func)
const TArray< THandle * > & Handles
Definition ParticleIterator.h:265
TConstHandleIterator< TSOA > end() const
Definition ParticleIterator.h:243
TConstHandleView()
Definition ParticleIterator.h:225
int32 Num() const
Definition ParticleIterator.h:234
TConstHandleIterator< TSOA > begin() const
Definition ParticleIterator.h:240
Definition ParticleIterator.h:359
int32 CurSOASize
Definition ParticleIterator.h:484
TConstParticleIterator()
Definition ParticleIterator.h:365
const TTransientHandle * operator->() const
Definition ParticleIterator.h:437
TConstParticleIterator(const TConstParticleIterator &Rhs)=default
typename TSOA::THandleType THandle
Definition ParticleIterator.h:361
void SeekNonEmptySOA()
Definition ParticleIterator.h:459
TConstParticleIterator(const TArray< TSOAView< TSOA > > &InSOAViews)
Definition ParticleIterator.h:370
typename THandle::THandleBase THandleBase
Definition ParticleIterator.h:362
THandleBase TransientHandle
Definition ParticleIterator.h:482
const TArray< THandle * > * CurHandlesArray
Definition ParticleIterator.h:481
const TTransientHandle & operator*() const
Definition ParticleIterator.h:431
void SyncDirtyValidationCount()
Definition ParticleIterator.h:508
const TArray< TSOAView< TSOA > > * SOAViews
Definition ParticleIterator.h:480
void MoveToEnd()
Definition ParticleIterator.h:450
void RangedForValidation() const
Definition ParticleIterator.h:487
int32 CurHandleIdx
Definition ParticleIterator.h:485
int32 SOAIdx
Definition ParticleIterator.h:483
bool CurrentIsLightWeightDisabled() const
Definition ParticleIterator.h:445
void IncSOAIdx()
Definition ParticleIterator.h:502
TConstParticleIterator< TSOA > & operator++()
Definition ParticleIterator.h:392
typename THandle::TTransientHandle TTransientHandle
Definition ParticleIterator.h:363
Definition ParticleIterator.h:577
TConstParticleView()
Definition ParticleIterator.h:580
void ParallelFor(const ContextCreatorType &ContextCreator, const Lambda &Func, bool bForceSingleThreaded=false) const
Definition ParticleIterator.h:613
int32 Num() const
Definition ParticleIterator.h:601
typename TSOA::THandleType THandle
Definition ParticleIterator.h:579
void ParallelFor(const Lambda &Func, bool bForceSingleThreaded=false) const
Definition ParticleIterator.h:619
friend void ParticleViewParallelForImp(const TParticleView &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func)
Definition ParticleIterator.h:717
TConstParticleIterator< TSOA > End() const
Definition ParticleIterator.h:609
int32 Size
Definition ParticleIterator.h:634
TConstParticleIterator< TSOA > end() const
Definition ParticleIterator.h:610
TConstParticleIterator< TSOA > Begin() const
Definition ParticleIterator.h:606
TConstParticleView(TArray< TSOAView< TSOA > > &&InSOAViews)
Definition ParticleIterator.h:585
TConstParticleIterator< TSOA > begin() const
Definition ParticleIterator.h:607
TConstParticleView(TSOAView< TSOA > &&InSOAView)
Definition ParticleIterator.h:595
TArray< TSOAView< TSOA > > SOAViews
Definition ParticleIterator.h:633
Definition ParticleIterator.h:177
THandle * operator->() const
Definition ParticleIterator.h:199
typename TSOA::THandleType THandle
Definition ParticleIterator.h:117
THandleIterator(const TArray< THandle * > &InHandles)
Definition ParticleIterator.h:189
THandle & operator*() const
Definition ParticleIterator.h:194
int32 CurIdx
Definition ParticleIterator.h:167
THandleIterator()
Definition ParticleIterator.h:184
Definition ParticleIterator.h:270
THandleIterator< TSOA > begin() const
Definition ParticleIterator.h:288
THandleView()
Definition ParticleIterator.h:277
void ParallelFor(const ContextCreatorType &ContextCreator, const Lambda &Func) const
Definition ParticleIterator.h:294
typename TSOA::THandleType THandle
Definition ParticleIterator.h:224
THandleIterator< TSOA > Begin() const
Definition ParticleIterator.h:287
void ParallelFor(const Lambda &Func) const
Definition ParticleIterator.h:300
const TArray< THandle * > & Handles
Definition ParticleIterator.h:265
THandleIterator< TSOA > End() const
Definition ParticleIterator.h:290
THandleView(const TArray< THandle * > &InHandles)
Definition ParticleIterator.h:282
THandleIterator< TSOA > end() const
Definition ParticleIterator.h:291
Definition ParticleIterator.h:530
TParticleIterator()
Definition ParticleIterator.h:537
THandleBase TransientHandle
Definition ParticleIterator.h:482
TTransientHandle & operator*() const
Definition ParticleIterator.h:547
TTransientHandle * operator->() const
Definition ParticleIterator.h:554
void RangedForValidation() const
Definition ParticleIterator.h:487
TParticleIterator(const TArray< TSOAView< TSOA > > &InSOAs)
Definition ParticleIterator.h:542
typename Base::TTransientHandle TTransientHandle
Definition ParticleIterator.h:533
Definition ParticleIterator.h:639
void ParallelFor(const Lambda &Func, bool bForceSingleThreaded=false) const
Definition ParticleIterator.h:670
void ParallelFor(const ContextCreatorType &ContextCreator, const Lambda &Func, bool bForceSingleThreaded=false) const
Definition ParticleIterator.h:664
TParticleView(TArray< TSOAView< TSOA > > &&InSOAViews)
Definition ParticleIterator.h:652
TParticleIterator< TSOA > begin() const
Definition ParticleIterator.h:658
TParticleView()
Definition ParticleIterator.h:647
TParticleIterator< TSOA > End() const
Definition ParticleIterator.h:660
TParticleIterator< TSOA > end() const
Definition ParticleIterator.h:661
TSOAIn TSOA
Definition ParticleIterator.h:641
TParticleIterator< TSOA > Begin() const
Definition ParticleIterator.h:657
TArray< TSOAView< TSOA > > SOAViews
Definition ParticleIterator.h:633
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition SkeletalMeshComponent.h:307
TConstHandleIterator< typename THandle::TSOAType > MakeConstHandleIterator(const TArray< THandle * > &Handles)
Definition ParticleIterator.h:209
void CHAOS_API PhysicsParallelForWithContext(int32 InNum, TFunctionRef< int32(int32, int32)> InContextCreator, TFunctionRef< void(int32, int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:162
void ParticlesParallelFor(const TView &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func, bool bForceSingleThreaded=false)
Definition ParticleIterator.h:99
TConstParticleIterator< TSOA > MakeConstParticleIterator(const TArray< TSOAView< TSOA > > &SOAs)
Definition ParticleIterator.h:563
TConstParticleView< TSOA > MakeConstParticleView(TArray< TSOAView< TSOA > > &&SOAViews)
Definition ParticleIterator.h:681
void CHAOS_API PhysicsParallelFor(int32 InNum, TFunctionRef< void(int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:55
TParticleView< TSOA > MakeParticleView(TArray< TSOAView< TSOA > > &&SOAViews)
Definition ParticleIterator.h:693
THandleIterator< typename THandle::TSOAType > MakeHandleIterator(const TArray< THandle * > &Handles)
Definition ParticleIterator.h:215
TParticleIterator< TSOA > MakeParticleIterator(const TArray< TSOAView< TSOA > > &SOAs)
Definition ParticleIterator.h:569
void ParticleViewParallelForImp(const TParticleView &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func)
Definition ParticleIterator.h:717
void ParticlesSequentialFor(const TView &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func)
Definition ParticleIterator.h:86
THandleView< typename THandle::TSOAType > MakeHandleView(const TArray< THandle * > &Handles)
Definition ParticleIterator.h:316
void HandleViewParallelForImp(const THandleView &HandleView, const ContextCreatorType &ContextCreator, const Lambda &Func)
Definition ParticleIterator.h:778
CHAOS_API bool bDisableParticleParallelFor
Definition Parallel.cpp:19
TConstHandleView< typename THandle::TSOAType > MakeConstHandleView(const TArray< THandle * > &Handles)
Definition ParticleIterator.h:310
void ParticlesParallelForImp(const TConstHandleView< TSOA > &Particles, const ContextCreatorType &ContextCreator, const Lambda &Func)
Definition ParticleIterator.h:49
U16 Index
Definition radfft.cpp:71
Definition ParticleIterator.h:323
TArray< THandle * > * HandlesArray
Definition ParticleIterator.h:349
typename TSOA::THandleType THandle
Definition ParticleIterator.h:324
TSOAView(TSOA *InSOA)
Definition ParticleIterator.h:331
int32 Size() const
Definition ParticleIterator.h:351
TSOAView(TArray< TDerivedHandle * > *Handles)
Definition ParticleIterator.h:337
TSOA * SOA
Definition ParticleIterator.h:348
TSOAView()
Definition ParticleIterator.h:326
Definition UnrealTypeTraits.h:40