18#define UE_DECLARE_TYPED_ELEMENT_DATA_RTTI(ELEMENT_DATA_TYPE, ...) \
19 static __VA_ARGS__ FTypedHandleTypeId Private_RegisteredTypeId; \
20 static FTypedHandleTypeId StaticTypeId() { return Private_RegisteredTypeId; } \
21 static FName StaticTypeName() { static const FName TypeName = #ELEMENT_DATA_TYPE; return TypeName; }
27#define UE_DEFINE_TYPED_ELEMENT_DATA_RTTI(ELEMENT_DATA_TYPE) \
28 FTypedHandleTypeId ELEMENT_DATA_TYPE::Private_RegisteredTypeId = 0;
34template <
typename ElementDataType>
40#if UE_TYPED_ELEMENT_HAS_REFTRACKING
128 void StoreDestructionRequestCallstack()
176#if UE_TYPED_ELEMENT_HAS_REFTRACKING
181 References = FTypedElementReferences::Create();
189#if UE_TYPED_ELEMENT_HAS_REFCOUNTING
193 OldRefCount = FPlatformAtomics::InterlockedExchange(&RefCount, 0);
204#if UE_TYPED_ELEMENT_HAS_REFTRACKING
220#if UE_TYPED_ELEMENT_HAS_REFCOUNTING
224 FPlatformAtomics::InterlockedIncrement(&RefCount);
229 FPlatformAtomics::InterlockedDecrement(&RefCount);
232#if UE_TYPED_ELEMENT_HAS_REFTRACKING
243#if UE_TYPED_ELEMENT_HAS_REFCOUNTING
248 FPlatformAtomics::InterlockedDecrement(&RefCount);
251#if UE_TYPED_ELEMENT_HAS_REFTRACKING
262#if UE_TYPED_ELEMENT_HAS_REFCOUNTING
263 return FPlatformAtomics::AtomicRead(&RefCount);
271#if UE_TYPED_ELEMENT_HAS_REFTRACKING
274 References->StoreDestructionRequestCallstack();
285#if UE_TYPED_ELEMENT_HAS_REFTRACKING
289 References->LogReferences();
293 UE_LOG(
LogCore,
Warning,
TEXT(
"Enable CVar 'TypedElements.EnableReferenceTracking' for Element reference tracking."));
297 UE_LOG(
LogCore,
Warning,
TEXT(
"UE_TYPED_ELEMENT_HAS_REFTRACKING is disabled. Enable it, recompile and enable CVar 'TypedElements.EnableReferenceTracking' for reference tracking."));
315#if UE_TYPED_ELEMENT_HAS_REFCOUNTING
318#if UE_TYPED_ELEMENT_HAS_REFTRACKING
326template <
typename ElementDataType>
333 Data = ElementDataType();
360 ElementDataType Data;
394 Other.ControlBlock =
nullptr;
407 Other.ControlBlock =
nullptr;
418 return !(*
this ==
Other);
536template <
typename ElementDataType>
540 static_assert(
TNumericLimits<int32>::Max() >=
TypedHandleMaxElementId,
"TTypedElementInternalDataStore internally uses signed 32-bit indices so cannot store TypedHandleMaxElementId! Consider making this container 64-bit aware, or explicitly remove this compile time check.");
550 : InternalDataArray.
Add();
584 checkf(
InExpectedDataPtr == &InternalData,
TEXT(
"Internal data pointer did not match the expected value! Does this handle belong to a different element registry?"));
586 InternalData.
Reset();
600 checkSlow(ElementDataType::Private_RegisteredTypeId == 0);
601 ElementDataType::Private_RegisteredTypeId =
InTypeId;
606 return ElementDataType::StaticTypeId();
611 return ElementDataType::StaticTypeName();
629 static_assert(
TNumericLimits<int32>::Max() >=
TypedHandleMaxElementId,
"TTypedElementInternalDataStore internally uses signed 32-bit indices so cannot store TypedHandleMaxElementId! Consider making this container 64-bit aware, or explicitly remove this compile time check.");
640 : InternalDataArray.
Add();
679 checkf(
InExpectedDataPtr == &InternalData,
TEXT(
"Internal data pointer did not match the expected value! Does this handle belong to a different element registry?"));
681 InternalData.
Reset();
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_AUTORTFM_ALWAYS_OPEN
Definition AutoRTFMDefines.h:114
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define ANSI_TO_TCHAR(str)
Definition StringConv.h:1020
FString GetTypedElementDebugId(const ElementDataType &InElementData)
Definition TypedElementData.h:35
uint8 FTypedHandleTypeId
Definition TypedElementLimits.h:29
int32 FTypedElementRefCount
Definition TypedElementLimits.h:33
constexpr SIZE_T TypedHandleRefTrackingSkipCount
Definition TypedElementLimits.h:26
constexpr SIZE_T TypedHandleRefTrackingDepth
Definition TypedElementLimits.h:27
int32 FTypedHandleElementId
Definition TypedElementLimits.h:30
int32 FTypedElementReferenceId
Definition TypedElementLimits.h:34
constexpr SIZE_T TypedHandleMaxElementId
Definition TypedElementLimits.h:24
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
Definition NameTypes.h:617
Definition ScopeLock.h:141
Definition TypedElementData.h:513
FScriptTypedElementInternalDataOwner(FTypedElementInternalData &InInternalData)
Definition TypedElementData.h:516
~FScriptTypedElementInternalDataOwner()
Definition TypedElementData.h:524
Definition TypedElementData.h:375
bool operator==(const FScriptTypedElementInternalDataPtr &Other) const
Definition TypedElementData.h:411
FScriptTypedElementInternalDataPtr()=default
void IncrementCount()
Definition TypedElementData.h:459
FScriptTypedElementInternalDataPtr(const FScriptTypedElementInternalDataPtr &Other)
Definition TypedElementData.h:385
const FTypedElementId & GetId() const
Definition TypedElementData.h:432
FScriptTypedElementInternalDataPtr(FScriptTypedElementInternalDataPtr &&Other)
Definition TypedElementData.h:391
~FScriptTypedElementInternalDataPtr()
Definition TypedElementData.h:380
FScriptTypedElementInternalDataControlBlock * ControlBlock
Definition TypedElementData.h:509
void Release()
Definition TypedElementData.h:426
void DecrementCount()
Definition TypedElementData.h:467
FTypedElementInternalData * GetInternalData() const
Definition TypedElementData.h:445
bool IsSet() const
Definition TypedElementData.h:421
FScriptTypedElementInternalDataPtr & operator=(const FScriptTypedElementInternalDataPtr &Other)
Definition TypedElementData.h:397
FScriptTypedElementInternalDataPtr(FTypedElementInternalData &InternalData)
Definition TypedElementData.h:480
FScriptTypedElementInternalDataPtr & operator=(FScriptTypedElementInternalDataPtr &&Other)
Definition TypedElementData.h:404
bool operator!=(const FScriptTypedElementInternalDataPtr &Other) const
Definition TypedElementData.h:416
Definition TypedElementData.h:157
virtual void Reset()
Definition TypedElementData.h:186
FTypedElementInternalData & operator=(const FTypedElementInternalData &)=delete
FTypedElementInternalData()=default
void ReleaseRef(const FTypedElementReferenceId InReferenceId) const
Definition TypedElementData.h:241
UE_AUTORTFM_ALWAYS_OPEN FTypedElementRefCount GetRefCount() const
Definition TypedElementData.h:260
const FTypedElementId & GetId() const
Definition TypedElementData.h:212
virtual ~FTypedElementInternalData()
Definition TypedElementData.h:167
FTypedElementInternalData & operator=(FTypedElementInternalData &&)=delete
virtual const void * GetUntypedData() const
Definition TypedElementData.h:303
FTypedElementInternalData(FTypedElementInternalData &&InOther)=delete
void Initialize(const FTypedHandleTypeId InTypeId, const FTypedHandleElementId InElementId)
Definition TypedElementData.h:172
void StoreDestructionRequestCallstack() const
Definition TypedElementData.h:269
void LogExternalReferencesOnDestruction() const
Definition TypedElementData.h:279
virtual FString GetDebugId() const
Definition TypedElementData.h:308
FTypedElementInternalData(const FTypedElementInternalData &)=delete
FTypedElementReferenceId AddRef(const bool bCanTrackReference) const
Definition TypedElementData.h:217
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
Definition ChunkedArray.h:56
UE_FORCEINLINE_HINT bool IsValidIndex(int32 Index) const
Definition ChunkedArray.h:182
int32 Add(int32 Count=1)
Definition ChunkedArray.h:242
Definition UnrealString.h.inl:34
Definition SparseArray.h:524
static FName StaticDataTypeName()
Definition TypedElementData.h:703
static FTypedHandleTypeId StaticDataTypeId()
Definition TypedElementData.h:698
void DisableScriptHandlesForElement(const FTypedHandleElementId InElementId)
Definition TypedElementData.h:663
void RemoveDataForElement(const FTypedHandleElementId InElementId, const FTypedElementInternalData *InExpectedDataPtr)
Definition TypedElementData.h:669
TTypedElementInternalData< void > & AddDataForElement(const FTypedHandleTypeId InTypeId, FTypedHandleElementId &InOutElementId)
Definition TypedElementData.h:631
const TTypedElementInternalData< void > & GetDataForElement(const FTypedHandleElementId InElementId) const
Definition TypedElementData.h:685
static void SetStaticDataTypeId(const FTypedHandleTypeId InTypeId)
Definition TypedElementData.h:694
FScriptTypedElementInternalDataPtr GetInternalDataForScriptHandle(const FTypedHandleElementId InElementId)
Definition TypedElementData.h:649
Definition TypedElementData.h:538
static FTypedHandleTypeId StaticDataTypeId()
Definition TypedElementData.h:604
static void SetStaticDataTypeId(const FTypedHandleTypeId InTypeId)
Definition TypedElementData.h:598
void DisableScriptHandlesForElement(const FTypedHandleElementId InElementId)
Definition TypedElementData.h:571
static FName StaticDataTypeName()
Definition TypedElementData.h:609
FScriptTypedElementInternalDataPtr GetInternalDataForScriptHandle(const FTypedHandleElementId InElementId)
Definition TypedElementData.h:557
TTypedElementInternalData< ElementDataType > & AddDataForElement(const FTypedHandleTypeId InTypeId, FTypedHandleElementId &InOutElementId)
Definition TypedElementData.h:542
void RemoveDataForElement(const FTypedHandleElementId InElementId, const FTypedElementInternalData *InExpectedDataPtr)
Definition TypedElementData.h:577
const TTypedElementInternalData< ElementDataType > & GetDataForElement(const FTypedHandleElementId InElementId) const
Definition TypedElementData.h:590
Definition TypedElementData.h:328
virtual FString GetDebugId() const override
Definition TypedElementData.h:351
const ElementDataType & GetData() const
Definition TypedElementData.h:336
virtual const void * GetUntypedData() const override
Definition TypedElementData.h:346
ElementDataType & GetMutableData()
Definition TypedElementData.h:341
virtual void Reset() override
Definition TypedElementData.h:330
Definition UniquePtr.h:107
Definition ScopeRWLock.h:21
Definition ScopeRWLock.h:60
@ Reference
Definition Protocol6.h:40
U16 Index
Definition radfft.cpp:71
Definition TypedElementData.h:490
FTypedElementInternalData * Data
Definition TypedElementData.h:505
FScriptTypedElementInternalDataControlBlock & operator=(const FScriptTypedElementInternalDataControlBlock &)=delete
FScriptTypedElementInternalDataControlBlock()=delete
FScriptTypedElementInternalDataControlBlock(FScriptTypedElementInternalDataControlBlock &&)=delete
FScriptTypedElementInternalDataControlBlock(const FScriptTypedElementInternalDataControlBlock &)=delete
FScriptTypedElementInternalDataControlBlock & operator=(FScriptTypedElementInternalDataControlBlock &&)=delete
FTypedElementRefCount WeakRefCount
Definition TypedElementData.h:506
FScriptTypedElementInternalDataControlBlock(FTypedElementInternalData &InData)
Definition TypedElementData.h:491
Definition TypedElementId.h:17
void Private_InitializeNoRef(const FTypedHandleTypeId InTypeId, const FTypedHandleElementId InElementId)
Definition TypedElementId.h:104
FTypedHandleElementId GetElementId() const
Definition TypedElementId.h:73
void Private_DestroyNoRef()
Definition TypedElementId.h:110
bool IsSet() const
Definition TypedElementId.h:57
static TYPEDELEMENTFRAMEWORK_API const FTypedElementId Unset
Definition TypedElementId.h:116
Definition NumericLimits.h:41