16#include "Templates/Invoke.h"
22template<
typename Allocator >
class TBitArray;
47template<
typename Allocator = FDefaultBitArrayAllocator,
typename OtherAllocator = FDefaultBitArrayAllocator,
bool Both=true>
49template<
typename Allocator = FDefaultBitArrayAllocator>
51template<
typename Allocator = FDefaultBitArrayAllocator>
53template <
typename AllocatorType,
typename InDerivedType =
void>
73 template <
typename AllocatorA,
typename AllocatorB,
typename OutAllocator,
typename ProjectionType>
103 const int32 MaxNumBits = FMath::Max(
InA.Num(),
InB.Num());
114 IteratorA.FillMissingBits(MissingBitsFill);
115 IteratorB.FillMissingBits(MissingBitsFill);
131 checkf(
false,
TEXT(
"Invalid size flag specified for binary bitwise AND"));
138 template<
typename OtherAllocator,
typename OutAllocator,
typename ProjectionType>
141 if constexpr (std::is_same_v<OtherAllocator, OutAllocator>)
199 return (Data & Mask) != 0;
233 FPlatformAtomics::InterlockedOr((
volatile int32*)&Data, (
int32)Mask);
240 FPlatformAtomics::InterlockedAnd((
volatile int32*)&Data, (
int32)~Mask);
270 return (Data & Mask) != 0;
299 return !(
Other == *
this);
351 template <
typename,
typename>
354 template <
typename AllocatorA,
typename AllocatorB,
typename OutAllocator,
typename ProjectionType>
357 template<
typename OtherAllocator,
typename OutAllocator,
typename ProjectionType>
361 static constexpr WordType FullWordMask = (WordType)-1;
370 template<
typename,
typename,
bool>
416 template<
typename OtherAllocator>
451 template<
typename OtherAllocator>
483 for (
uint32 i = 0; i < NumWords; i++)
485 if (Data0[i] != Data1[i])
487 return Data0[i] < Data1[i];
493#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
496 return !(*
this ==
Other);
526 for (
int32 Idx = 0; Idx < NumWords; ++Idx)
533 template <
typename BitArrayType>
536 ToArray.AllocatorInstance.MoveToEmpty(
FromArray.AllocatorInstance);
546 template<
typename OtherAllocator>
568 checkf(
NumBits <= MaxBits,
TEXT(
"TBitArray::NumBits (%d) should never be greater than MaxBits (%d)"),
NumBits, MaxBits);
569 checkf(
NumBits >= 0 && MaxBits >= 0,
TEXT(
"NumBits (%d) and MaxBits (%d) should always be >= 0"),
NumBits, MaxBits);
607 ClearPartialSlackBits();
646 template <
typename InWordType>
661 template <
typename OtherAllocator>
692 ClearPartialSlackBits();
729 template <
typename InWordType>
743 template <
typename OtherAllocator>
839 AllocatorInstance.ResizeAllocation(0, NumWords,
sizeof(
uint32));
843 SetWords(
GetData(), NumWords, bValue);
844 ClearPartialSlackBits();
865 ClearPartialSlackBits();
869 template <
typename ValueType>
872 static_assert(std::is_same_v<ValueType, bool>,
"TBitArray::SetNum: unexpected type passed as the bValue argument (expected bool)");
953 template <
typename InWordType>
972 template <
typename OtherAllocator>
988 template <
typename InWordType>
1017 ClearPartialSlackBits();
1035#if PLATFORM_MAC || PLATFORM_LINUX
1053 ClearPartialSlackBits();
1072 GetMaxWords() *
sizeof(
uint32)
1086 return FindFromImpl(bValue, 0,
NumBits);
1175 template <
typename IndexType>
1178 static_assert(!std::is_same_v<IndexType, bool>,
"TBitArray::FindFrom: unexpected bool passed as the StartIndex argument");
1180 return FindFromImpl(bValue, StartIndex,
NumBits);
1196 template <
typename IndexType>
1199 static_assert(!std::is_same_v<IndexType, bool>,
"TBitArray::FindFrom: unexpected bool passed as the StartIndex argument");
1215 return FindLastFromImpl(bValue,
NumBits);
1227 template <
typename IndexType>
1230 static_assert(!std::is_same_v<IndexType, bool>,
"TBitArray::FindLastFrom: unexpected bool passed as the EndIndexInclusive argument");
1289 template <
typename AllocatorA,
typename AllocatorB>
1300 template <
typename OtherAllocator,
typename BinaryOpType>
1310 template <
typename OtherAllocator>
1320 template <
typename AllocatorA,
typename AllocatorB>
1323 if constexpr (std::is_same_v<AllocatorA, AllocatorB>)
1336 template <
typename OtherAllocator>
1346 template <
typename AllocatorA,
typename AllocatorB>
1357 template <
typename OtherAllocator>
1371 It.SetWord(~It.GetWord());
1391 NumSetBits += FMath::CountBits(It.GetWord());
1404 template <
typename OtherAllocator>
1536 return Index < Array.Num();
1542 return !(
bool)*
this;
1597 return !(
bool)*
this;
1638 return Index < Array.Num();
1643 return !(
bool)*
this;
1695 return !(
bool)*
this;
1707 return (
uint32*)AllocatorInstance.GetAllocation();
1712 return (
uint32*)AllocatorInstance.GetAllocation();
1716 template<
typename WordType>
1717 struct TWordIteratorBase
1721 return CurrentIndex < NumWords;
1726 return CurrentIndex;
1733 if (CurrentMask == ~0u)
1735 return Data[CurrentIndex];
1737 else if (MissingBitsFill == 0)
1739 return Data[CurrentIndex] & CurrentMask;
1743 return (Data[CurrentIndex] & CurrentMask) | (MissingBitsFill &
~CurrentMask);
1749 ++this->CurrentIndex;
1750 if (this->CurrentIndex == NumWords-1)
1752 CurrentMask = FinalMask;
1773 , MissingBitsFill(0)
1778 FinalMask = ~0u >>
Shift;
1781 if (CurrentIndex == NumWords - 1)
1783 CurrentMask &= FinalMask;
1784 FinalMask = CurrentMask;
1826 if (this->CurrentIndex == this->NumWords-1)
1828 this->Data[this->CurrentIndex] =
InWord & this->FinalMask;
1832 this->Data[this->CurrentIndex] =
InWord;
1860 ClearPartialSlackBits();
1873 void ClearPartialSlackBits()
1889 template<
bool bFreezeMemoryImage,
typename Dummy=
void>
1890 struct TSupportsFreezeMemoryImageHelper
1895 template<
typename Dummy>
1896 struct TSupportsFreezeMemoryImageHelper<
true,
Dummy>
1912 TSupportsFreezeMemoryImageHelper<bSupportsFreezeMemoryImage>::WriteMemoryImage(Writer, *
this);
1918 template<
typename Allocator>
1921 Object.WriteMemoryImage(Writer);
1927template<
typename Allocator>
1933 for (
uint32 i = 0; i < NumWords; i++)
1942template<
typename Allocator>
1950 , UnvisitedBitMask (~0U)
1951 , CurrentBitIndex (0)
1964 , CurrentBitIndex (StartIndex)
1967 check(StartIndex >= 0 && StartIndex <= Array.Num());
1968 if (StartIndex != Array.Num())
1978 UnvisitedBitMask &=
~this->Mask;
1989 return CurrentBitIndex == Rhs.CurrentBitIndex && &Array == &Rhs.Array;
1992#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
1995 return !(*
this == Rhs);
2002 return CurrentBitIndex < Array.Num();
2007 return !(
bool)*
this;
2013 return CurrentBitIndex;
2021 int32 CurrentBitIndex;
2025 void FindFirstSetBit()
2040 CurrentBitIndex = ArrayNum;
2045 UnvisitedBitMask = ~0u;
2056 CurrentBitIndex = BaseBitIndex +
NumBitsPerDWORD - 1 - FMath::CountLeadingZeros(this->Mask);
2060 if (CurrentBitIndex > ArrayNum)
2062 CurrentBitIndex = ArrayNum;
2070template<
typename Allocator,
typename OtherAllocator,
bool Both>
2079 int32 StartIndex = 0
2085 , CurrentBitIndex(StartIndex)
2088 check(ArrayA.Num() == ArrayB.
Num());
2099 UnvisitedBitMask &=
~this->Mask;
2111 return CurrentBitIndex < ArrayA.Num();
2116 return !(
bool)*
this;
2122 return CurrentBitIndex;
2131 int32 CurrentBitIndex;
2135 void FindFirstSetBit()
2177 UnvisitedBitMask = ~0;
2182 CurrentBitIndex = ArrayA.
Num();
2198 CurrentBitIndex = BaseBitIndex +
NumBitsPerDWORD - 1 - FMath::CountLeadingZeros(this->Mask);
2204template<
typename Allocator,
typename OtherAllocator>
2209template<
typename Allocator,
typename OtherAllocator>
2214template <
typename Allocator,
typename InDerivedType>
2252 AllocatorInstance.MoveToEmpty(
Other.AllocatorInstance);
2263 if (MaxBits != Slack)
2274 if (NumBits > MaxBits)
2276 ReallocGrow(NumBits - 1);
2290 AllocatorType AllocatorInstance;
2295 static void CheckConstraints()
2301 static_assert(
sizeof (
ScriptType) ==
sizeof (RealType),
"TScriptBitArray's size doesn't match TBitArray");
2302 static_assert(
alignof(
ScriptType) ==
alignof(RealType),
"TScriptBitArray's alignment doesn't match TBitArray");
2305 static_assert(
sizeof(
DeclVal<ScriptType>().AllocatorInstance) ==
sizeof(
DeclVal<RealType>().AllocatorInstance),
"TScriptBitArray's AllocatorInstance member size does not match TBitArray's");
2310 static_assert(
STRUCT_OFFSET(
ScriptType, AllocatorInstance) ==
STRUCT_OFFSET(RealType, AllocatorInstance),
"TScriptBitArray's AllocatorInstance member offset does not match TBitArray's");
2317 return (
uint32*)AllocatorInstance.GetAllocation();
2322 return (
const uint32*)AllocatorInstance.GetAllocation();
2367template <
typename AllocatorType,
typename InDerivedType>
2381template<
typename Allocator>
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
EBitwiseOperatorFlags
Definition BitArray.h:58
FArchive & operator<<(FArchive &Ar, TBitArray< Allocator > &BitArray)
Definition BitArray.h:2382
UE_FORCEINLINE_HINT uint32 GetTypeHash(const TBitArray< Allocator > &BitArray)
Definition BitArray.h:1928
#define NumBitsPerDWORD
Definition ContainerAllocationPolicies.h:1371
#define NumBitsPerDWORDLogTwo
Definition ContainerAllocationPolicies.h:1372
@ INDEX_NONE
Definition CoreMiscDefines.h:150
EConstEval
Definition CoreMiscDefines.h:161
@ ConstEval
Definition CoreMiscDefines.h:161
AUTORTFM_INFER UE_FORCEINLINE_HINT constexpr auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(((FuncType &&) Func)((ArgTypes &&) Args...))
Definition Invoke.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
return true
Definition ExternalRpcRegistry.cpp:601
constexpr uint32 GetNumWords(uint32 Num)
Definition FilePackageStore.cpp:474
FORCEINLINE uint32 ToIndex(FHairStrandsTiles::ETileType Type)
Definition HairStrandsData.h:93
void Init()
Definition LockFreeList.h:4
#define DECLARE_TEMPLATE_INTRINSIC_TYPE_LAYOUT(TemplatePrefix, T)
Definition MemoryLayout.h:661
const bool
Definition NetworkReplayStreaming.h:178
void Move(T &A, typename TMoveSupportTraits< T >::Copy B)
Definition UnrealTemplate.h:24
#define STRUCT_OFFSET(struc, member)
Definition UnrealTemplate.h:218
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_FORCEINLINE_HINT bool IsObjectReferenceCollector() const
Definition Archive.h:456
virtual void CountBytes(SIZE_T InNum, SIZE_T InMax)
Definition Archive.h:125
UE_FORCEINLINE_HINT bool IsCountingMemory() const
Definition Archive.h:468
Definition BitArray.h:304
friend class FBitArrayMemoryTest
Definition BitArray.h:341
static CORE_API void MemmoveBitsWordOrder(uint32 *DestBits, int32 DestOffset, const uint32 *SourceBits, int32 SourceOffset, uint32 NumBits)
Definition BitArray.cpp:7
static void MemmoveBitsWordOrder(int32 *DestBits, int32 DestOffset, const int32 *SourceBits, int32 SourceOffset, uint32 NumBits)
Definition BitArray.h:319
static void ModularizeWordOffset(uint32 *&Data, int32 &Offset)
Definition BitArray.h:325
Definition BitArray.h:189
UE_FORCEINLINE_HINT FBitReference & operator=(const FBitReference &Copy)
Definition BitArray.h:244
UE_FORCEINLINE_HINT void operator&=(const bool NewValue)
Definition BitArray.h:219
UE_FORCEINLINE_HINT void AtomicSet(const bool NewValue)
Definition BitArray.h:226
UE_FORCEINLINE_HINT FBitReference(uint32 &InData UE_LIFETIMEBOUND, uint32 InMask)
Definition BitArray.h:192
UE_FORCEINLINE_HINT void operator|=(const bool NewValue)
Definition BitArray.h:212
UE_FORCEINLINE_HINT void operator=(const bool NewValue)
Definition BitArray.h:201
Definition BitArray.h:260
UE_FORCEINLINE_HINT FConstBitReference(const uint32 &InData UE_LIFETIMEBOUND, uint32 InMask)
Definition BitArray.h:263
Definition MemoryImageWriter.h:14
CORE_API uint32 WriteBytes(const void *Data, uint32 Size)
Definition MemoryImage.cpp:2143
bool Is32BitTarget() const
Definition MemoryImageWriter.h:26
Definition MemoryImage.h:49
Definition BitArray.h:281
UE_FORCEINLINE_HINT bool operator!=(FRelativeBitReference Other) const
Definition BitArray.h:297
int32 WordIndex
Definition BitArray.h:289
UE_FORCEINLINE_HINT FRelativeBitReference(int32 BitIndex)
Definition BitArray.h:283
UE_FORCEINLINE_HINT bool operator==(FRelativeBitReference Other) const
Definition BitArray.h:292
uint32 Mask
Definition BitArray.h:290
Definition SecureHash.h:314
Definition BitArray.h:2374
Definition BitArray.h:1609
UE_FORCEINLINE_HINT bool operator!() const
Definition BitArray.h:1641
UE_FORCEINLINE_HINT FConstIterator & operator++()
Definition BitArray.h:1617
UE_FORCEINLINE_HINT FConstBitReference GetValue() const
Definition BitArray.h:1646
UE_FORCEINLINE_HINT FConstIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND, int32 StartIndex=0)
Definition BitArray.h:1611
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:1647
UE_FORCEINLINE_HINT FConstBitReference operator*() const
Definition BitArray.h:1630
Definition BitArray.h:1655
UE_FORCEINLINE_HINT FConstBitReference GetValue() const
Definition BitArray.h:1698
UE_FORCEINLINE_HINT FConstReverseIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND, int32 StartIndex)
Definition BitArray.h:1663
UE_FORCEINLINE_HINT FConstBitReference operator*() const
Definition BitArray.h:1682
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:1699
UE_FORCEINLINE_HINT bool operator!() const
Definition BitArray.h:1693
UE_FORCEINLINE_HINT FConstReverseIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND)
Definition BitArray.h:1657
UE_FORCEINLINE_HINT FConstReverseIterator & operator++()
Definition BitArray.h:1669
Definition BitArray.h:1507
UE_FORCEINLINE_HINT FBitReference operator*() const
Definition BitArray.h:1528
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:1546
UE_FORCEINLINE_HINT FIterator(TBitArray< Allocator > &InArray UE_LIFETIMEBOUND, int32 StartIndex=0)
Definition BitArray.h:1509
UE_FORCEINLINE_HINT FIterator & operator++()
Definition BitArray.h:1515
UE_FORCEINLINE_HINT FBitReference GetValue() const
Definition BitArray.h:1545
UE_FORCEINLINE_HINT bool operator!() const
Definition BitArray.h:1540
Definition BitArray.h:1554
UE_FORCEINLINE_HINT FBitReference GetValue() const
Definition BitArray.h:1600
UE_FORCEINLINE_HINT FReverseIterator & operator++()
Definition BitArray.h:1570
UE_FORCEINLINE_HINT FBitReference operator*() const
Definition BitArray.h:1583
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:1601
UE_FORCEINLINE_HINT FReverseIterator(TBitArray< Allocator > &InArray UE_LIFETIMEBOUND)
Definition BitArray.h:1556
UE_FORCEINLINE_HINT FReverseIterator(TBitArray< Allocator > &InArray UE_LIFETIMEBOUND, int32 StartIndex)
Definition BitArray.h:1563
UE_FORCEINLINE_HINT bool operator!() const
Definition BitArray.h:1595
Definition BitArray.h:350
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
UE_FORCEINLINE_HINT bool IsValidIndex(int32 InIndex) const
Definition BitArray.h:1450
static TBitArray BitwiseOR(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1321
int32 Add(const bool Value)
Definition BitArray.h:615
UE_FORCEINLINE_HINT const FConstBitReference AccessCorrespondingBit(const FRelativeBitReference &RelativeReference) const
Definition BitArray.h:1494
void CheckInvariants() const
Definition BitArray.h:565
static TBitArray BitwiseXOR(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1347
void SetRangeFromRange(int32 Index, int32 NumBitsToSet, const InWordType *ReadBits, int32 ReadOffsetBits=0)
Definition BitArray.h:954
UE_FORCEINLINE_HINT bool operator==(const TBitArray< Allocator > &Other) const
Definition BitArray.h:460
UE_FORCEINLINE_HINT int32 FindFrom(bool bValue, IndexType StartIndex) const
Definition BitArray.h:1176
UE_FORCEINLINE_HINT int32 FindFrom(bool bValue, IndexType StartIndex, IndexType EndIndexExclusive) const
Definition BitArray.h:1197
UE_FORCEINLINE_HINT FConstReverseIterator rend() const
Definition BitArray.h:1847
UE_FORCEINLINE_HINT TBitArray(TBitArray &&Other)
Definition BitArray.h:401
void Empty(int32 ExpectedNumBits=0)
Definition BitArray.h:779
UE_FORCEINLINE_HINT bool operator<(const TBitArray< Allocator > &Other) const
Definition BitArray.h:470
int32 AddRange(const InWordType *ReadBits, int32 NumBitsToAdd, int32 ReadOffsetBits=0)
Definition BitArray.h:647
TBitArray & CombineWithBitwiseAND(const TBitArray< OtherAllocator > &InOther, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1311
UE_FORCEINLINE_HINT FBitReference AccessCorrespondingBit(const FRelativeBitReference &RelativeReference)
Definition BitArray.h:1484
void BitwiseNOT()
Definition BitArray.h:1367
int32 Find(bool bValue) const
Definition BitArray.h:1084
UE_FORCEINLINE_HINT int32 Max() const
Definition BitArray.h:1467
int32 FindAndSetFirstZeroBit(int32 StartIndex=0)
Definition BitArray.h:1258
int32 FindAndSetLastZeroBit()
Definition BitArray.h:1275
void Serialize(FArchive &Ar)
Definition BitArray.h:587
int32 FindLast(bool bValue) const
Definition BitArray.h:1213
UE_FORCEINLINE_HINT FReverseIterator rbegin()
Definition BitArray.h:1844
UE_FORCEINLINE_HINT TBitArray & operator=(const TBitArray &Copy)
Definition BitArray.h:440
uint32 GetAllocatedSize(void) const
Definition BitArray.h:1062
void SetNumUninitialized(int32 InNumBits)
Definition BitArray.h:849
void InsertRange(const TBitArray< OtherAllocator > &ReadBits, int32 Index, int32 NumBitsToAdd, int32 ReadOffsetBits=0)
Definition BitArray.h:744
int32 AddRange(const TBitArray< OtherAllocator > &ReadBits, int32 NumBitsToAdd, int32 ReadOffsetBits=0)
Definition BitArray.h:662
UE_FORCEINLINE_HINT FReverseIterator rend()
Definition BitArray.h:1846
TBitArray & CombineWithBinaryOp(const TBitArray< OtherAllocator > &InOther, EBitwiseOperatorFlags InFlags, BinaryOpType &&InBinaryOp)
Definition BitArray.h:1301
void Reset()
Definition BitArray.h:817
int32 AddUninitialized(int32 NumBitsToAdd)
Definition BitArray.h:675
FORCENOINLINE void SetNum(int32 InNumBits, ValueType bValue)
Definition BitArray.h:870
UE_FORCEINLINE_HINT TBitArray(const TBitArray< OtherAllocator > &Copy)
Definition BitArray.h:417
int32 CountSetBits(int32 FromIndex=0, int32 ToIndex=INDEX_NONE) const
Definition BitArray.h:1378
UE_FORCEINLINE_HINT TBitArray(bool bValue, int32 InNumBits)
Definition BitArray.h:392
consteval TBitArray(EConstEval)
Definition BitArray.h:380
FORCENOINLINE void SetRange(int32 Index, int32 NumBitsToSet, bool Value)
Definition BitArray.h:887
int32 PadToNum(int32 DesiredNum, bool bPadValue)
Definition BitArray.h:1438
bool IsEmpty() const
Definition BitArray.h:1461
UE_FORCEINLINE_HINT TBitArray(const TBitArray &Copy)
Definition BitArray.h:409
Allocator::template ForElementType< uint32 > AllocatorType
Definition BitArray.h:365
UE_FORCEINLINE_HINT bool operator!=(const TBitArray< Allocator > &Other) const
Definition BitArray.h:494
UE_FORCEINLINE_HINT FConstReverseIterator rbegin() const
Definition BitArray.h:1845
void InsertUninitialized(int32 Index, int32 NumBitsToAdd)
Definition BitArray.h:757
UE_FORCEINLINE_HINT TBitArray & operator=(const TBitArray< OtherAllocator > &Copy)
Definition BitArray.h:452
TBitArray & CombineWithBitwiseOR(const TBitArray< OtherAllocator > &InOther, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1337
void Insert(bool Value, int32 Index)
Definition BitArray.h:703
void Insert(bool Value, int32 Index, int32 NumBitsToAdd)
Definition BitArray.h:715
void WriteMemoryImage(FMemoryImageWriter &Writer) const
Definition BitArray.h:1908
void RemoveAtSwap(int32 BaseIndex, int32 NumBitsToRemove=1)
Definition BitArray.h:1027
UE_FORCEINLINE_HINT FIterator end()
Definition BitArray.h:1841
UE_FORCEINLINE_HINT FConstIterator end() const
Definition BitArray.h:1842
constexpr TBitArray()
Definition BitArray.h:373
UE_FORCEINLINE_HINT const uint32 * GetData() const
Definition BitArray.h:1705
int32 Add(const bool Value, int32 NumBitsToAdd)
Definition BitArray.h:626
UE_FORCEINLINE_HINT void SetRangeFromRange(int32 Index, int32 NumBitsToSet, const TBitArray< OtherAllocator > &ReadBits, int32 ReadOffsetBits=0)
Definition BitArray.h:973
UE_FORCEINLINE_HINT bool Contains(bool bValue) const
Definition BitArray.h:1245
int32 FindLastFrom(bool bValue, IndexType EndIndexInclusive) const
Definition BitArray.h:1228
UE_FORCEINLINE_HINT void GetRange(int32 Index, int32 NumBitsToGet, InWordType *WriteBits, int32 WriteOffsetBits=0) const
Definition BitArray.h:989
UE_FORCEINLINE_HINT void Init(bool bValue, int32 InNumBits)
Definition BitArray.h:828
UE_FORCEINLINE_HINT TBitArray & operator=(TBitArray &&Other)
Definition BitArray.h:427
UE_FORCEINLINE_HINT FConstIterator begin() const
Definition BitArray.h:1840
UE_FORCEINLINE_HINT FIterator begin()
Definition BitArray.h:1839
UE_FORCEINLINE_HINT FBitReference operator[](int32 Index)
Definition BitArray.h:1468
void Reserve(int32 Number)
Definition BitArray.h:800
void InsertRange(const InWordType *ReadBits, int32 Index, int32 NumBitsToAdd, int32 ReadOffsetBits=0)
Definition BitArray.h:730
static TBitArray BitwiseAND(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1290
void CountBytes(FArchive &Ar) const
Definition BitArray.h:1068
UE_FORCEINLINE_HINT const FConstBitReference operator[](int32 Index) const
Definition BitArray.h:1476
bool CompareSetBits(const TBitArray< OtherAllocator > &Other, const bool bMissingBitValue) const
Definition BitArray.h:1405
void RemoveAt(int32 BaseIndex, int32 NumBitsToRemove=1)
Definition BitArray.h:1004
UE_FORCEINLINE_HINT uint32 * GetData()
Definition BitArray.h:1710
TBitArray & CombineWithBitwiseXOR(const TBitArray< OtherAllocator > &InOther, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1358
Definition BitArray.h:2072
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:2120
UE_FORCEINLINE_HINT bool operator!() const
Definition BitArray.h:2114
UE_FORCEINLINE_HINT TConstDualSetBitIterator & operator++()
Definition BitArray.h:2094
UE_FORCEINLINE_HINT TConstDualSetBitIterator(const TBitArray< Allocator > &InArrayA, const TBitArray< OtherAllocator > &InArrayB, int32 StartIndex=0)
Definition BitArray.h:2076
Definition BitArray.h:1944
UE_FORCEINLINE_HINT bool operator==(const TConstSetBitIterator &Rhs) const
Definition BitArray.h:1986
UE_FORCEINLINE_HINT int32 GetIndex() const
Definition BitArray.h:2011
TConstSetBitIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND, int32 StartIndex)
Definition BitArray.h:1960
TConstSetBitIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND)
Definition BitArray.h:1947
UE_FORCEINLINE_HINT TConstSetBitIterator & operator++()
Definition BitArray.h:1975
UE_FORCEINLINE_HINT bool operator!() const
Definition BitArray.h:2005
UE_FORCEINLINE_HINT bool operator!=(const TConstSetBitIterator &Rhs) const
Definition BitArray.h:1993
Definition BitArray.h:2216
FBitReference operator[](int32 Index)
Definition BitArray.h:2236
void MoveAssign(DerivedType &Other)
Definition BitArray.h:2248
TScriptBitArray()
Definition BitArray.h:2225
int32 Add(const bool Value)
Definition BitArray.h:2270
void Empty(int32 Slack=0)
Definition BitArray.h:2257
FConstBitReference operator[](int32 Index) const
Definition BitArray.h:2242
void operator=(const TScriptBitArray &)
Definition BitArray.h:2364
bool IsValidIndex(int32 Index) const
Definition BitArray.h:2231
TScriptBitArray(const TScriptBitArray &)
Definition BitArray.h:2363
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
@ Bits
Definition PacketView.h:34
@ NumBits
Definition MeshPassProcessor.h:87
const Type Shift
Definition GenericApplication.h:43
UE_NODEBUG void IntrinsicWriteMemoryImage(FMemoryImageWriter &Writer, const TArray< T, AllocatorType > &Object, const FTypeLayoutDesc &)
Definition Array.h:3957
Definition TestUtils.cpp:8
implementation
Definition PlayInEditorLoadingScope.h:8
void BitwiseOperatorImpl(const TBitArray< OtherAllocator > &InOther, TBitArray< OutAllocator > &OutResult, EBitwiseOperatorFlags InFlags, ProjectionType &&InProjection)
Definition BitArray.h:139
void BitwiseBinaryOperatorImpl(const TBitArray< AllocatorA > &InA, const TBitArray< AllocatorB > &InB, TBitArray< OutAllocator > &OutResult, EBitwiseOperatorFlags InFlags, ProjectionType &&InProjection)
Definition BitArray.h:74
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
U16 Index
Definition radfft.cpp:71
static constexpr uint32 BitsPerWord
Definition BitArray.h:37
static UE_FORCEINLINE_HINT uint32 CalculateNumWords(int32 NumBits)
Definition BitArray.h:39
static UE_FORCEINLINE_HINT uint32 GetAndClearNextBit(uint32 &Mask)
Definition BitArray.h:28
Definition UnrealMathUtility.h:270
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundDown(T Dividend, T Divisor)
Definition UnrealMathUtility.h:701
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT int32 Memcmp(const void *Buf1, const void *Buf2, SIZE_T Count)
Definition UnrealMemory.h:114
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition MemoryLayout.h:108
Definition ContainerAllocationPolicies.h:256
Definition BitArray.h:1800
FConstWordIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND, int32 InStartBitIndex, int32 InEndBitIndex)
Definition BitArray.h:1806
FConstWordIterator(const TBitArray< Allocator > &InArray UE_LIFETIMEBOUND)
Definition BitArray.h:1801
Definition BitArray.h:1816
FWordIterator(TBitArray< Allocator > &InArray UE_LIFETIMEBOUND)
Definition BitArray.h:1817
void SetWord(uint32 InWord)
Definition BitArray.h:1822
Definition UnrealTypeTraits.h:172