9#include "Containers/Array.h"
15template <
typename ElementType>
20 template <ElementType Mask, u
int32 MaskSize>
23 template <u
int32 Step>
30 template <u
int32 Step>
50 return FMath::CountTrailingZeros(
Value);
129 FirstRemovedIdIndex = FMath::Min(FirstRemovedIdIndex,
Id.GetAsIndex());
131 if (
Id.GetAsIndex() >= Removed.
Num())
138 Removed[
Id.GetAsIndex()] =
true;
154 DecChangedCounts(
Index);
157 int32 LastIndex = MaxIndex - 1;
158 if (
Index != LastIndex)
168 FirstChangedIndex = FMath::Min(FirstChangedIndex,
Index);
169 LastChangedIndex = FMath::Max(LastChangedIndex,
Index);
190 DecChangedCounts(
Index);
193 int32 LastIndex = MaxIndex - 1;
194 if (
Index != LastIndex)
223 NextElement = LoadCountAndMask(ElementIndex + 1,
true);
233 FirstChangedIndex = FMath::Min(FirstChangedIndex,
Index);
234 LastChangedIndex = FMath::Max(LastChangedIndex, LastIndex);
244 template <EFlag Flag>
254 FirstChangedIndex = FMath::Min(FirstChangedIndex,
Index);
255 LastChangedIndex = FMath::Max(LastChangedIndex,
Index);
268 NumChanged[
uint32(Flag)] += 1;
290 template <EFlag Flag>
304 if (ElementIndex > Data.
Num())
315 template <u
int32 Mask = AnyFlagMask>
324 CurrentElement = Tracker->Data.
IsValidIndex(ElementIndex) ? (Tracker->Data[ElementIndex] & ElementMask) : 0;
339 ElementOffset += Steps;
344 if (ElementIndex >= Tracker->Data.
Num())
349 CurrentElement = Tracker->Data[ElementIndex] & ElementMask;
366 inline explicit operator bool()
const
368 return GetIndex() < FMath::Min(Tracker->MaxIndex, Tracker->LastChangedIndex + 1);
382 return CurrentElement;
385 template <EFlag Flag>
392 int32 ElementIndex = 0;
394 int32 ElementOffset = 0;
398 template <u
int32 Mask = AnyFlagMask>
414 template <EFlag Flag>
428 bFullUpdate = bFullUpdate || (
NumAdded + Tracker->NumChanged[
uint32(Flag)] == NumItems);
437 inline bool IsEmpty()
const {
return NumItems == 0; }
441 inline bool IsDelta()
const {
return !bFullUpdate; }
504 inline explicit operator bool()
const
524 bool bFullUpdate =
true;
529 template <EFlag Flag>
538 return MaxIndex > 0 || !Removed.
IsEmpty();
566 inline void ClearLastElement()
568 int32 LastIndex = MaxIndex - 1;
576 Data[ElementIndex] = CurrentElement;
586 template <EFlag Flag>
591 NumChanged[
uint32(Flag)] -= 1;
642 return Element | IndexChangedElementMask;
663 int32 LastChangedIndex = 0;
673 static constexpr ElementType IndexChangedElementMask = FBitManip::FRepMask<FToBit<EFlag::IndexChanged>::Bit,
uint32(
EFlag::Num)>::Result;
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_int32
Definition NumericLimits.h:25
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition InstanceAttributeTracker.h:317
uint32 GetMask() const
Definition InstanceAttributeTracker.h:380
FAnyValidIterator()=default
FAnyValidIterator & operator++()
Definition InstanceAttributeTracker.h:360
void AdvanceUntilAny()
Definition InstanceAttributeTracker.h:329
int32 GetIndex() const
Definition InstanceAttributeTracker.h:371
void AdvanceToNext()
Definition InstanceAttributeTracker.h:353
bool TestFlag() const
Definition InstanceAttributeTracker.h:386
FAnyValidIterator(const FInstanceAttributeTracker *InTracker, int32 StartIndex)
Definition InstanceAttributeTracker.h:320
Definition InstanceAttributeTracker.h:416
static constexpr uint32 IteratorMask
Definition InstanceAttributeTracker.h:418
FConstIterator GetIterator() const
Definition InstanceAttributeTracker.h:514
FDeltaRange(bool bInFullUpdate, int32 InNumItems, const FInstanceAttributeTracker *InInstanceUpdateTracker)
Definition InstanceAttributeTracker.h:422
int32 GetNumItems() const
Definition InstanceAttributeTracker.h:446
bool IsEmpty() const
Definition InstanceAttributeTracker.h:437
bool IsDelta() const
Definition InstanceAttributeTracker.h:441
Definition InstanceAttributeTracker.h:67
static constexpr ElementType AnyFlagMask
Definition InstanceAttributeTracker.h:89
void RemoveAt(FPrimitiveInstanceId Id, int32 Index, int32 MaxInstanceIndex)
Definition InstanceAttributeTracker.h:182
bool HasAnyChanges() const
Definition InstanceAttributeTracker.h:536
void RemoveAtSwap(FPrimitiveInstanceId Id, int32 Index, int32 MaxInstanceIndex)
Definition InstanceAttributeTracker.h:145
bool TestFlag(int32 Index) const
Definition InstanceAttributeTracker.h:291
ElementType GetFlags(int32 Index) const
Definition InstanceAttributeTracker.h:279
static constexpr int32 MasksPerElement
Definition InstanceAttributeTracker.h:88
static constexpr uint32 BitsPerElement
Definition InstanceAttributeTracker.h:87
void Validate() const
Definition InstanceAttributeTracker.h:407
uint32 ElementType
Definition InstanceAttributeTracker.h:70
void SetNum(int32 InstanceIndexMax)
Definition InstanceAttributeTracker.h:298
void MarkIndex(int32 Index, int32 MaxInstanceIndex)
Definition InstanceAttributeTracker.h:245
FAnyValidIterator< Mask > GetChangedIterator() const
Definition InstanceAttributeTracker.h:399
EFlag
Definition InstanceAttributeTracker.h:79
FDeltaRange< Flag > GetDeltaRange(bool bForceFullUpdate, int32 InNumItems) const
Definition InstanceAttributeTracker.h:530
SIZE_T GetAllocatedSize() const
Definition InstanceAttributeTracker.h:541
void operator=(FInstanceAttributeTracker &&Other)
Definition InstanceAttributeTracker.cpp:15
void Reset()
Definition InstanceAttributeTracker.cpp:20
void MarkRemoved(FPrimitiveInstanceId Id)
Definition InstanceAttributeTracker.h:127
TConstSetBitIterator GetRemovedIterator() const
Definition InstanceAttributeTracker.cpp:44
static void Move(FInstanceAttributeTracker &Dest, FInstanceAttributeTracker &Source)
Definition InstanceAttributeTracker.cpp:31
FInstanceAttributeTracker()
Definition InstanceAttributeTracker.cpp:5
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
uint32 GetAllocatedSize(void) const
Definition BitArray.h:1062
FORCENOINLINE void SetNum(int32 InNumBits, ValueType bValue)
Definition BitArray.h:870
bool IsEmpty() const
Definition BitArray.h:1461
Definition BitArray.h:1944
@ Element
Definition Visu.h:18
Definition InstanceAttributeTracker.h:14
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition InstanceAttributeTracker.h:454
FAnyValidIterator< IteratorMask > It
Definition InstanceAttributeTracker.h:458
int32 ItemIndex
Definition InstanceAttributeTracker.h:456
FConstIterator(int32 InIndex, int32 InMaxNum)
Definition InstanceAttributeTracker.h:460
int32 GetItemIndex() const
Definition InstanceAttributeTracker.h:499
int32 GetIndex() const
Definition InstanceAttributeTracker.h:487
void operator++()
Definition InstanceAttributeTracker.h:475
FConstIterator(FAnyValidIterator< IteratorMask > &&InIt)
Definition InstanceAttributeTracker.h:467
bool bUseIterator
Definition InstanceAttributeTracker.h:455
int32 MaxNum
Definition InstanceAttributeTracker.h:457
Definition InstanceAttributeTracker.h:94
static constexpr ElementType Bit
Definition InstanceAttributeTracker.h:95
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694
Definition InstanceDataTypes.h:19
Definition InstanceAttributeTracker.h:32
static constexpr ElementType Result
Definition InstanceAttributeTracker.h:33
Definition InstanceAttributeTracker.h:22
static constexpr uint32 NumSteps
Definition InstanceAttributeTracker.h:37
static constexpr ElementType Result
Definition InstanceAttributeTracker.h:38
Definition InstanceAttributeTracker.h:17
static uint32 CountTrailingZeros(ElementType Value)