11#define UE_API COREUOBJECT_API
83 FConstWordIterator Iterator(*
this);
85 while (Iterator && Iterator.GetWord() == 0)
108 FConstWordIterator Iterator(
Instance);
189 ,
"This operator requires FBitSetContainer and TBitArray<> sizes to match (i.e. FBitSetContainer cannot have member variables nor virtual funtions)");
263static_assert(
sizeof(FBitSetContainer) ==
sizeof(FConstBitSetContainer),
"FBitSetContainer as a functional extension of FConstBitSetContainer is not allowed add new member variables.");
340#if WITH_STRUCTUTILS_DEBUG
388 mutable const UStruct* BaseType;
401template<
typename TImplementation,
typename TBaseStruct,
typename TStructType,
typename TBitSetContainer,
bool bTestInheritanceAtRuntime=WITH_STRUCTUTILS_DEBUG>
433 if (It.GetValue() == bValueToCheck)
444 return It.GetIndex();
449 const bool bValueToCheck;
488 static const UStruct*
Instance = UE::StructUtils::GetAsUStruct<FBaseStruct>();
515 TEXT(
"Registering '%s' with FStructTracker while it doesn't derive from the expected struct type %s"),
541 TEXT(
"Registering '%s' with FStructTracker while it doesn't derive from the expected struct type %s"),
576 TEXT(
"Registering '%s' with FStructTracker while it doesn't derive from the expected struct type %s"),
714 template<
typename TOutStructType,
typename Allocator>
728#if WITH_STRUCTUTILS_DEBUG
783#if WITH_STRUCTUTILS_DEBUG
820template<
typename TBaseStruct,
typename TStructTrackerWrapper,
typename TUStructType = UScriptStruct>
821struct TStructTypeBitSet :
TTypeBitSetBase<TStructTypeBitSet<TBaseStruct, TStructTrackerWrapper, TUStructType>, TBaseStruct, TUStructType, FStructTypeBitSet::FBitSetContainer>
834 using Super::operator+=;
835 using Super::operator-=;
836 using Super::operator+;
837 using Super::operator-;
891 if (StructInstance.GetScriptStruct())
893 Add(*StructInstance.GetScriptStruct());
927 return TStructTrackerWrapper::StructTracker;
936 return TStructTrackerWrapper::StructTracker;
946#if WITH_STRUCTUTILS_DEBUG
948 ,
TEXT(
"Creating index for '%s' while it doesn't derive from the expected struct type %s")
952 return TStructTrackerWrapper::StructTracker.FindOrAddStructTypeIndex(
InStructType);
964 static const int32 TypeIndex =
GetTypeIndex(*UE::StructUtils::GetAsUStruct<T>());
1007 template<
typename T>
1029 template<
typename T>
1055 return TStructTrackerWrapper::StructTracker.Num();
1075 return !(*
this ==
Other);
1112#if WITH_STRUCTUTILS_DEBUG
1113 using Super::DebugGetStringDesc;
1122 return static_cast<FString
>(Ar);
1131 return TEXT(
"DEBUG INFO COMPILED OUT");
1135#if WITH_STRUCTUTILS_DEBUG
1143 return TStructTrackerWrapper::StructTracker.DebugGetStructTypeName(
StructTypeIndex);
1162 TStructTrackerWrapper::StructTracker.DebugResetStructTypeMappingInfo();
1167 return reinterpret_cast<const TUStructType*
>(TStructTrackerWrapper::StructTracker.DebugFindTypeByPartialName(
PartialName));
1212#define _DECLARE_TYPEBITSET_IMPL(EXPORTED_API, ContainerTypeName, BaseType, BaseUStructType) struct ContainerTypeName##StructTrackerWrapper \
1214 using FBaseStructType = BaseType; \
1215 EXPORTED_API static FStructTracker StructTracker; \
1217 using ContainerTypeName = TStructTypeBitSet<BaseType, ContainerTypeName##StructTrackerWrapper, BaseUStructType>; \
1218 static_assert(std::is_move_constructible_v<ContainerTypeName> && std::is_move_assignable_v<ContainerTypeName>)
1220#define DECLARE_STRUCTTYPEBITSET_EXPORTED(EXPORTED_API, ContainerTypeName, BaseStructType) _DECLARE_TYPEBITSET_IMPL(EXPORTED_API, ContainerTypeName, BaseStructType, UScriptStruct)
1221#define DECLARE_STRUCTTYPEBITSET(ContainerTypeName, BaseStructType) _DECLARE_TYPEBITSET_IMPL(, ContainerTypeName, BaseStructType, UScriptStruct)
1222#define DECLARE_CLASSTYPEBITSET_EXPORTED(EXPORTED_API, ContainerTypeName, BaseStructType) _DECLARE_TYPEBITSET_IMPL(EXPORTED_API, ContainerTypeName, BaseStructType, UClass)
1223#define DECLARE_CLASSTYPEBITSET(ContainerTypeName, BaseStructType) _DECLARE_TYPEBITSET_IMPL(, ContainerTypeName, BaseStructType, UClass)
1225#define DEFINE_TYPEBITSET(ContainerTypeName) \
1226 FStructTracker ContainerTypeName##StructTrackerWrapper::StructTracker([](){ return UE::StructUtils::GetAsUStruct<ContainerTypeName##StructTrackerWrapper::FBaseStructType>();});
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define NumBitsPerDWORD
Definition ContainerAllocationPolicies.h:1371
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
const bool
Definition NetworkReplayStreaming.h:178
#define UE_API
Definition StructTypeBitSet.h:11
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
Definition NameTypes.h:617
Definition OutputDevice.h:133
void Logf(const FmtType &Fmt)
Definition OutputDevice.h:234
Definition StringOutputDevice.h:21
Definition BitArray.h:350
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
static TBitArray BitwiseOR(const TBitArray< AllocatorA > &A, const TBitArray< AllocatorB > &B, EBitwiseOperatorFlags InFlags)
Definition BitArray.h:1321
UE_FORCEINLINE_HINT bool operator==(const TBitArray< Allocator > &Other) const
Definition BitArray.h:460
int32 CountSetBits(int32 FromIndex=0, int32 ToIndex=INDEX_NONE) const
Definition BitArray.h:1378
int32 PadToNum(int32 DesiredNum, bool bPadValue)
Definition BitArray.h:1438
UE_FORCEINLINE_HINT const uint32 * GetData() const
Definition BitArray.h:1705
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition ContainerAllocationPolicies.h:894
Definition StructTypeBitSet.h:16
U16 Index
Definition radfft.cpp:71
Definition InstancedStruct.h:32
Definition StructTypeBitSet.h:275
UE_API int32 FindStructTypeIndex(const UStruct &InStructType) const
Definition StructTypeBitSet.cpp:154
const UStruct * GetStructType(const int32 StructTypeIndex) const
Definition StructTypeBitSet.h:316
UE_NONCOPYABLE(FStructTracker)
UE_API const UStruct * GetBaseType() const
Definition StructTypeBitSet.cpp:83
UE_API ~FStructTracker()
Definition StructTypeBitSet.cpp:78
uint32 SerializationHash
Definition StructTypeBitSet.h:379
uint32 bIsSerializable
Definition StructTypeBitSet.h:381
TArray< TWeakObjectPtr< const UStruct >, TInlineAllocator< 64 > > StructTypesList
Definition StructTypeBitSet.h:377
UE_API int32 RegisterImplementation(const UStruct &InStructType, const bool bCheckPrevious)
Definition StructTypeBitSet.cpp:101
const FTypeValidation TypeVerification
Definition StructTypeBitSet.h:385
TSet< uint32 > StructTypeToIndexSet
Definition StructTypeBitSet.h:375
int32 Register(const UStruct &InStructType)
Definition StructTypeBitSet.h:306
const FBaseStructGetter BaseStructGetter
Definition StructTypeBitSet.h:383
UE_API int32 FindOrAddStructTypeIndex(const UStruct &InStructType)
Definition StructTypeBitSet.cpp:88
TFunction< bool(const UStruct *)> FTypeValidation
Definition StructTypeBitSet.h:277
int32 Num() const
Definition StructTypeBitSet.h:331
Definition StructTypeBitSet.h:172
void AddAtIndex(const int32 Index)
Definition StructTypeBitSet.h:227
FBitSetContainer(const TBitArray<> &Source)
Definition StructTypeBitSet.h:177
void SetBitNoCheck(const int32 Index, const bool Value)
Definition StructTypeBitSet.h:254
void operator-=(const TBitArray<> &Other)
Definition StructTypeBitSet.h:209
FBitSetContainer & operator=(const TBitArray<> &Other)
Definition StructTypeBitSet.h:186
void RemoveAtIndex(const int32 Index)
Definition StructTypeBitSet.h:238
FBitSetContainer()=default
void SetAll(const bool bValue, const int32 Count)
Definition StructTypeBitSet.h:200
FBitSetContainer(TBitArray<> &&Source)
Definition StructTypeBitSet.h:181
Definition StructTypeBitSet.h:23
bool HasAll(const TBitArray<> &Other) const
Definition StructTypeBitSet.h:32
FConstBitSetContainer()=default
FConstBitSetContainer(TBitArray<> &&Source)
Definition StructTypeBitSet.h:162
bool IsEmpty() const
Definition StructTypeBitSet.h:81
FConstBitSetContainer(const TBitArray<> &Source)
Definition StructTypeBitSet.h:153
friend uint32 GetTypeHash(const FConstBitSetContainer &Instance)
Definition StructTypeBitSet.h:106
bool Contains(const int32 Index) const
Definition StructTypeBitSet.h:133
bool operator==(const FConstBitSetContainer &Other) const
Definition StructTypeBitSet.h:97
bool HasAny(const TBitArray<> &Other) const
Definition StructTypeBitSet.h:57
int32 CountStoredTypes() const
Definition StructTypeBitSet.h:143
Definition UnrealTypeTraits.h:40
Definition StructTypeBitSet.h:822
FStructTracker & GetStructTracker()
Definition StructTypeBitSet.h:925
UE_FORCEINLINE_HINT void Remove(const TStructTypeBitSet &Other)
Definition StructTypeBitSet.h:1019
friend uint32 GetTypeHash(const TStructTypeBitSet &Instance)
Definition StructTypeBitSet.h:1177
friend Super
Definition StructTypeBitSet.h:828
TStructTypeBitSet(TConstArrayView< const FUStructType * > InitList)
Definition StructTypeBitSet.h:870
TStructTypeBitSet(std::initializer_list< const FUStructType * > InitList)
Definition StructTypeBitSet.h:855
TStructTypeBitSet operator-(const TStructTypeBitSet &Other) const
Definition StructTypeBitSet.h:1083
static const FUStructType * GetTypeAtIndex(const int32 Index)
Definition StructTypeBitSet.h:986
void ExportTypes(TFunctionRef< bool(const FUStructType *)> Callback) const
Definition StructTypeBitSet.h:1098
static const UStruct * GetBaseUStruct()
Definition StructTypeBitSet.h:484
TStructTypeBitSet()=default
void Serialize(FArchive &Ar)
Definition StructTypeBitSet.h:1188
TStructTypeBitSet(const FUStructType &StructType)
Definition StructTypeBitSet.h:846
UE_FORCEINLINE_HINT bool operator==(const TStructTypeBitSet &Other) const
Definition StructTypeBitSet.h:1063
void Add()
Definition StructTypeBitSet.h:996
void Remove()
Definition StructTypeBitSet.h:1008
TUStructType FUStructType
Definition StructTypeBitSet.h:825
FContainer StructTypesBitArray
Definition StructTypeBitSet.h:790
static int32 GetTypeIndex(const FUStructType &InStructType)
Definition StructTypeBitSet.h:944
TStructTrackerWrapper FStructTrackerWrapper
Definition StructTypeBitSet.h:824
friend FArchive & operator<<(FArchive &Ar, TStructTypeBitSet &Instance)
Definition StructTypeBitSet.h:1199
static int32 GetMaxNum()
Definition StructTypeBitSet.h:1053
bool Contains() const
Definition StructTypeBitSet.h:1030
UE_FORCEINLINE_HINT bool operator!=(const TStructTypeBitSet &Other) const
Definition StructTypeBitSet.h:1073
static const TStructTypeBitSet & GetTypeBitSet()
Definition StructTypeBitSet.h:974
TStructTypeBitSet operator+(const TStructTypeBitSet &Other) const
Definition StructTypeBitSet.h:1042
const FStructTracker & GetStructTracker() const
Definition StructTypeBitSet.h:934
FString DebugGetStringDesc() const
Definition StructTypeBitSet.h:1129
TBaseStruct FBaseStruct
Definition StructTypeBitSet.h:826
TStructTypeBitSet(TConstArrayView< FInstancedStruct > InitList)
Definition StructTypeBitSet.h:887
static int32 GetTypeIndex()
Definition StructTypeBitSet.h:961
Definition StructTypeBitSet.h:412
FIndexIterator & operator++()
Definition StructTypeBitSet.h:429
FIndexIterator(const FStructTypeBitSet::FBitSetContainer &BitArray, const bool bInValueToCheck=true)
Definition StructTypeBitSet.h:413
int32 operator*() const
Definition StructTypeBitSet.h:442
Definition StructTypeBitSet.h:403
UE_FORCEINLINE_HINT bool HasNone(const TImplementation &Other) const
Definition StructTypeBitSet.h:633
UE_FORCEINLINE_HINT bool IsEquivalent(const TImplementation &Other) const
Definition StructTypeBitSet.h:618
static const UStruct * GetBaseUStruct()
Definition StructTypeBitSet.h:484
TImplementation operator+(const FUStructType &NewElement) const
Definition StructTypeBitSet.h:680
const TImplementation & GetImplementation() const
Definition StructTypeBitSet.h:475
UE_FORCEINLINE_HINT TImplementation operator|(const TImplementation &Other) const
Definition StructTypeBitSet.h:602
UE_FORCEINLINE_HINT bool IsBitSet(const int32 BitIndex) const
Definition StructTypeBitSet.h:652
TTypeBitSetBase()=default
TImplementation operator-(const FUStructType &NewElement) const
Definition StructTypeBitSet.h:692
TBaseStruct FBaseStruct
Definition StructTypeBitSet.h:405
void Reset()
Definition StructTypeBitSet.h:561
bool IsEmpty() const
Definition StructTypeBitSet.h:642
SIZE_T GetAllocatedSize() const
Definition StructTypeBitSet.h:763
FContainer StructTypesBitArray
Definition StructTypeBitSet.h:790
UE_FORCEINLINE_HINT TImplementation GetOverlap(const TImplementation &Other) const
Definition StructTypeBitSet.h:607
TImplementation & GetImplementation()
Definition StructTypeBitSet.h:466
UE_FORCEINLINE_HINT bool HasAny(const TImplementation &Other) const
Definition StructTypeBitSet.h:628
TTypeBitSetBase(FContainer &InContainer)
Definition StructTypeBitSet.h:778
void AddAtIndex(const int32 StructTypeIndex)
Definition StructTypeBitSet.h:527
UE_FORCEINLINE_HINT void operator+=(const TImplementation &Other)
Definition StructTypeBitSet.h:661
bool Contains(const FUStructType &InStructType) const
Definition StructTypeBitSet.h:571
UE_FORCEINLINE_HINT void operator-=(const TImplementation &Other)
Definition StructTypeBitSet.h:670
void Add(const FUStructType &InStructType)
Definition StructTypeBitSet.h:510
void SetAll(const bool bValue=true)
Definition StructTypeBitSet.h:501
UE_FORCEINLINE_HINT bool HasAll(const TImplementation &Other) const
Definition StructTypeBitSet.h:623
FIndexIterator GetIndexIterator(const bool bValueToCheck=true) const
Definition StructTypeBitSet.h:457
UE_FORCEINLINE_HINT TImplementation operator&(const TImplementation &Other) const
Definition StructTypeBitSet.h:592
void RemoveAtIndex(const int32 StructTypeIndex)
Definition StructTypeBitSet.h:553
TStructType FUStructType
Definition StructTypeBitSet.h:404
void Remove(const FUStructType &InStructType)
Definition StructTypeBitSet.h:536
int32 CountStoredTypes() const
Definition StructTypeBitSet.h:703
TBitSetContainer FContainer
Definition StructTypeBitSet.h:406
void ExportTypes(TArray< const TOutStructType *, Allocator > &OutTypes) const
Definition StructTypeBitSet.h:715
Definition WeakObjectPtrTemplates.h:25