7#include "Algo/Rotate.h"
10template <
typename AttributeType>
27 check(ElementCount >= 0);
28 int32 NumChunks = GetNumRequiredChunks(ElementCount);
29 Chunks.
Empty(NumChunks);
35 Chunks.
Last().NumElements = GetElementsInLastChunk(ElementCount);
38 NumElements = ElementCount;
44 check(ElementCount >= 0);
47 int32 NumChunks = GetNumRequiredChunks(ElementCount);
50 if (ElementCount < NumElements)
55 Chunks.
Last().NumElements = GetElementsInLastChunk(ElementCount);
58 else if (ElementCount > NumElements)
95 NumElements = ElementCount;
100 for (
const FChunk& Chunk : Chunks)
113 if (EndIndex > NumElements)
127 Chunks[ChunkIndex].Count[ElementIndex] = 0;
136 Ar <<
Array.NumElements;
137 Ar <<
Array.DefaultValue;
147 FChunk& Chunk = Chunks[ChunkIndex];
157 const FChunk& Chunk = Chunks[ChunkIndex];
167 const FChunk& Chunk = Chunks[ChunkIndex];
168 return Chunk.Count[ElementIndex];
177 const FChunk& Chunk = Chunks[ChunkIndex];
178 return Chunk.MaxCount[ElementIndex];
190 Element[I] =
Value[I];
200 FChunk& Chunk = Chunks[ChunkIndex];
202 AttributeType*
BasePtr = Chunk.Data.GetData();
211 BasePtr = Chunk.Data.GetData();
213 AttributeType* StartPtr =
BasePtr + Chunk.StartIndex[ElementIndex] + Chunk.MaxCount[ElementIndex];
217 Chunk.MaxCount[ElementIndex] =
Size;
218 for (
int32 I = ElementIndex + 1; I < Chunk.NumElements; I++)
220 Chunk.StartIndex[I] +=
Extra;
226 if (
Size > Chunk.Count[ElementIndex])
229 for (
int32 I = Chunk.Count[ElementIndex]; I < Chunk.MaxCount[ElementIndex]; I++)
231 Chunk.Data[Chunk.StartIndex[ElementIndex] + I] = DefaultValue;
237 for (
int32 I =
Size; I < Chunk.Count[ElementIndex]; I++)
239 Chunk.Data[Chunk.StartIndex[ElementIndex] + I] = DefaultValue;
246 Chunk.Count[ElementIndex] =
Size;
257 FChunk& Chunk = Chunks[ChunkIndex];
263 if (
NewCount > Chunk.MaxCount[ElementIndex])
291 Element[I -
Count] = Element[I];
303 static int32 GetNumRequiredChunks(
const int32 ElementCount)
305 return (ElementCount + ChunkSize - 1) >> ChunkBits;
308 static int32 GetElementsInLastChunk(
const int32 ElementCount)
310 return ((ElementCount + ChunkSize - 1) & ChunkMask) + 1;
313 static const int32 ChunkBits = 8;
314 static const int32 ChunkSize = (1 << ChunkBits);
315 static const int32 ChunkMask = ChunkSize - 1;
321 Data.Reserve(ChunkSize);
327 Ar <<
Chunk.NumElements;
360 int32 NumElements = ChunkSize;
364 int32 NumElements = 0;
365 AttributeType DefaultValue = AttributeType();
370template <
typename AttributeType>
391template <
typename AttributeType>
406 template <
typename T = AttributeType,
typename TEnableIf<std::is_same_v<T, const T>,
int>::Type = 0>
417 return Array->Get(
Index).GetData();
439 return Array->Get(
Index).IsEmpty();
449 return Array->Get(
Index).Num();
472 return Array->Get(
Index).Last();
515 int32 ElementCount = Array->GetElementCount(
Index);
517 Element[ElementCount] =
Value;
544 Array->InsertIntoElement(
Index, StartIndex,
Count);
554 Element[StartIndex] =
Value;
563 Array->RemoveFromElement(
Index, StartIndex,
Count);
570 template <
typename Predicate>
576 int32 WriteIndex = 0;
577 for (
int32 ReadIndex = 0; ReadIndex <
Count; ReadIndex++)
579 if (!
Pred(Element[ReadIndex]))
581 Element[WriteIndex] = Element[ReadIndex];
590 return Count - WriteIndex;
617 template <
typename Predicate>
632 template <
typename Predicate>
655 template <
typename Predicate>
667 Array->Get(
Index).Sort();
673 template<
typename Predicate>
685 Array->Get(
Index).StableSort();
692 template<
typename Predicate>
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
typename TCopyQualifiersFromTo< From, To >::Type TCopyQualifiersFromTo_T
Definition CopyQualifiersFromTo.h:17
@ INDEX_NONE
Definition CoreMiscDefines.h:150
@ InPlace
Definition CoreMiscDefines.h:162
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
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
Definition Archive.h:1208
Definition AttributeArrayContainer.h:393
bool ContainsByPredicate(Predicate Pred) const
Definition AttributeArrayContainer.h:656
void InsertDefaulted(int32 StartIndex, int32 Count)
Definition AttributeArrayContainer.h:542
void SetNumUninitialized(int32 Num)
Definition AttributeArrayContainer.h:491
int32 Add(const AttributeType &Value)
Definition AttributeArrayContainer.h:513
void Reserve(int32 Num)
Definition AttributeArrayContainer.h:502
void Insert(const AttributeType &Value, int32 StartIndex)
Definition AttributeArrayContainer.h:551
void StableSortByPredicate(Predicate Pred)
Definition AttributeArrayContainer.h:693
int32 RemoveAll(Predicate Pred)
Definition AttributeArrayContainer.h:571
bool IsEmpty() const
Definition AttributeArrayContainer.h:437
bool IsValidIndex(int32 ArrayAttributeIndex) const
Definition AttributeArrayContainer.h:427
AttributeType * end() const
Definition AttributeArrayContainer.h:714
AttributeType & operator[](int32 ArrayAttributeIndex) const
Definition AttributeArrayContainer.h:457
TArrayView< AttributeType > ToArrayView()
Definition AttributeArrayContainer.h:701
int32 Remove(const AttributeType &Value)
Definition AttributeArrayContainer.h:594
int32 AddUnique(const AttributeType &Value)
Definition AttributeArrayContainer.h:525
AttributeType * FindByPredicate(Predicate Pred) const
Definition AttributeArrayContainer.h:618
AttributeType * GetData() const
Definition AttributeArrayContainer.h:415
AttributeType * begin() const
Definition AttributeArrayContainer.h:713
void RemoveAt(int32 StartIndex, int32 Count)
Definition AttributeArrayContainer.h:561
TArrayAttribute(TArrayAttribute< std::remove_cv_t< T > > InValue)
Definition AttributeArrayContainer.h:407
void Sort()
Definition AttributeArrayContainer.h:665
TArrayAttribute(ArrayType &InArray, int32 InIndex)
Definition AttributeArrayContainer.h:398
void StableSort()
Definition AttributeArrayContainer.h:683
void SortByPredicate(Predicate Pred)
Definition AttributeArrayContainer.h:674
AttributeType & Last(int32 IndexFromTheEnd=0) const
Definition AttributeArrayContainer.h:470
bool Contains(const AttributeType &Value) const
Definition AttributeArrayContainer.h:642
int32 IndexOfByPredicate(Predicate Pred) const
Definition AttributeArrayContainer.h:633
void SetNum(int32 Num)
Definition AttributeArrayContainer.h:478
int32 Find(const AttributeType &Value) const
Definition AttributeArrayContainer.h:603
int32 Num() const
Definition AttributeArrayContainer.h:447
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Last(SizeType IndexFromTheEnd=0) UE_LIFETIMEBOUND
Definition Array.h:1263
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition AttributeArrayContainer.h:12
TAttributeArrayContainer()=default
uint32 GetHash(uint32 Crc=0) const
Definition AttributeArrayContainer.h:98
TAttributeArrayContainer(const AttributeType &InDefaultValue)
Definition AttributeArrayContainer.h:16
int32 GetElementCount(int32 Index) const
Definition AttributeArrayContainer.h:162
AttributeType GetDefault() const
Definition AttributeArrayContainer.h:299
int32 Num() const
Definition AttributeArrayContainer.h:21
TArrayView< AttributeType > Get(int32 Index)
Definition AttributeArrayContainer.h:142
friend FArchive & operator<<(FArchive &Ar, TAttributeArrayContainer< AttributeType > &Array)
Definition AttributeArrayContainer.h:133
void SetNum(const int32 ElementCount, const AttributeType &Default)
Definition AttributeArrayContainer.h:42
TArrayView< const AttributeType > Get(int32 Index) const
Definition AttributeArrayContainer.h:152
TArrayView< AttributeType > InsertIntoElement(int32 Index, int32 SubArrayIndex, int32 InsertCount=1)
Definition AttributeArrayContainer.h:252
TArrayView< AttributeType > SetElementSize(int32 Index, int32 Size, bool bSetCount, bool bSetDefault=true)
Definition AttributeArrayContainer.h:195
TArrayView< AttributeType > RemoveFromElement(int32 Index, int32 SubArrayIndex, int32 Count=1)
Definition AttributeArrayContainer.h:286
void Initialize(const int32 ElementCount, const AttributeType &Default)
Definition AttributeArrayContainer.h:24
int32 GetReservedElementCount(int32 Index) const
Definition AttributeArrayContainer.h:172
void Set(int32 Index, TArrayView< const AttributeType > Value)
Definition AttributeArrayContainer.h:182
void Remap(const TSparseArray< int32 > &IndexRemap, const AttributeType &Default)
Definition AttributeArrayContainer.h:371
void Insert(const int32 Index, const AttributeType &Default)
Definition AttributeArrayContainer.h:108
void SetToDefault(const int32 Index, const AttributeType &Default)
Definition AttributeArrayContainer.h:120
Definition SparseArray.h:1137
Definition SparseArray.h:524
void Insert(int32 Index, typename TTypeTraits< ElementType >::ConstInitType Element)
Definition SparseArray.h:644
Definition StaticArray.h:26
UE_REWRITE int32 Rotate(RangeType &&Range, int32 Count)
Definition Rotate.h:59
@ Count
Definition AudioMixerDevice.h:90
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT uint32 MemCrc32(const void *Data, int32 Length, uint32 CRC=0)
Definition Crc.h:31
static UE_FORCEINLINE_HINT void * Memmove(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:109