22template <
class,
class>
26#ifndef UE_WEAKOBJECTPTR_ZEROINIT_FIX
27 #define UE_WEAKOBJECTPTR_ZEROINIT_FIX 1
33#if UE_WEAKOBJECTPTR_ZEROINIT_FIX
52 template <
class,
class>
55#if UE_WEAKOBJECTPTR_ZEROINIT_FIX
79 UE_DEPRECATED(5.6,
"Constructing a FWeakObjectPtr from NULL has been deprecated - please use nullptr instead.")
114#if UE_WITH_REMOTE_OBJECT_HANDLE
121 ObjectSerialNumber = 0;
133 ObjectIndex = InvalidWeakObjectIndex;
134 ObjectSerialNumber = 0;
135#if UE_WITH_REMOTE_OBJECT_HANDLE
149 template <
typename T>
175#if UE_WITH_REMOTE_OBJECT_HANDLE
178 (ObjectIndex ==
Other.ObjectIndex && ObjectSerialNumber ==
Other.ObjectSerialNumber) ||
183#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
191#if UE_WITH_REMOTE_OBJECT_HANDLE
194 (ObjectIndex !=
Other.ObjectIndex || ObjectSerialNumber !=
Other.ObjectSerialNumber) &&
206#if UE_WITH_REMOTE_OBJECT_HANDLE
209 return ObjectIndex ==
Other.ObjectIndex && ObjectSerialNumber ==
Other.ObjectSerialNumber;
272 explicit operator bool()
const =
delete;
313#if UE_WITH_REMOTE_OBJECT_HANDLE
316#if UE_WEAKOBJECTPTR_ZEROINIT_FIX
317 return ObjectIndex == InvalidWeakObjectIndex && ObjectSerialNumber == 0;
319 return ObjectIndex == InvalidWeakObjectIndex;
324#if UE_WITH_REMOTE_OBJECT_HANDLE
355#if UE_WITH_REMOTE_OBJECT_HANDLE
358 return uint32(ObjectIndex ^ ObjectSerialNumber);
371 UE_DEPRECATED(5.1,
"GetObjectIndex is now deprecated, and will be removed.")
378 inline int32 GetObjectIndex_Private()
const
380#if UE_WITH_REMOTE_OBJECT_HANDLE
382 if ((ObjectIndex == InvalidWeakObjectIndex) &&
ObjectRemoteId.IsValid())
393#if UE_WITH_REMOTE_OBJECT_HANDLE
402 inline bool SerialNumbersMatch()
const
404#if UE_WITH_REMOTE_OBJECT_HANDLE
416 inline bool SerialNumbersMatch(
FUObjectItem* ObjectItem)
const
418#if UE_WITH_REMOTE_OBJECT_HANDLE
434#if UE_WITH_REMOTE_OBJECT_HANDLE
445 bool bResolved =
false;
457 if (!bResolved && !SerialNumbersMatch(ObjectItem))
467 if (ObjectSerialNumber == 0)
469#if UE_WEAKOBJECTPTR_ZEROINIT_FIX
470 checkSlow(ObjectIndex == InvalidWeakObjectIndex);
472 checkSlow(ObjectIndex == 0 || ObjectIndex == -1);
487 if (!SerialNumbersMatch(ObjectItem))
495#if UE_WITH_REMOTE_OBJECT_HANDLE
514 if (!ObjectItem || !SerialNumbersMatch(ObjectItem))
528 FUObjectItem*
const ObjectItem = Internal_GetObjectItem();
531 return (ObjectItem !=
nullptr);
543 FUObjectItem*
const ObjectItem = Internal_GetObjectItem();
550#if UE_WEAKOBJECTPTR_ZEROINIT_FIX
552 int32 ObjectSerialNumber = 0;
555 int32 ObjectSerialNumber;
557#if UE_WITH_REMOTE_OBJECT_HANDLE
#define checkSlow(expr)
Definition AssertionMacros.h:332
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
FUObjectArray GUObjectArray
Definition UObjectHash.cpp:55
UE_REWRITE constexpr T ImplicitConv(typename TIdentity< T >::Type Obj)
Definition UnrealTemplate.h:743
UE_FORCEINLINE_HINT uint32 GetTypeHash(const FWeakObjectPtr &WeakObjectPtr)
Definition WeakObjectPtr.h:564
Definition Archive.h:1208
FUObjectItem * IndexToObject(int32 Index)
Definition UObjectArray.h:1089
@ START_SERIAL_NUMBER
Definition UObjectArray.h:956
bool IsValid(FUObjectItem *ObjectItem, bool bEvenIfGarbage)
Definition UObjectArray.h:1123
int32 GetSerialNumber(int32 Index)
Definition UObjectArray.h:1312
Definition StrongObjectPtrTemplates.h:26
implementation
Definition PlayInEditorLoadingScope.h:8
constexpr int32 InvalidWeakObjectIndex
Definition WeakObjectPtr.h:34
bool IsRemote(FRemoteObjectId ObjectId)
Definition RemoteObject.cpp:535
Definition ObjectKey.h:19
Definition ObjectPtr.h:55
Definition RemoteObjectTypes.h:212
UE_FORCEINLINE_HINT uint32 GetTypeHash() const
Definition RemoteObjectTypes.h:274
Definition UObjectArray.h:50
UE_FORCEINLINE_HINT bool HasAnyFlags(EInternalObjectFlags InFlags) const
Definition UObjectArray.h:309
class UObjectBase * GetObject() const
Definition UObjectArray.h:146
int32 GetSerialNumber() const
Definition UObjectArray.h:195
Definition WeakObjectPtr.h:49
UE_FORCEINLINE_HINT FWeakObjectPtr(FObjectPtr Object)
Definition WeakObjectPtr.h:89
FWeakObjectPtr(const FWeakObjectPtr &Other)=default
COREUOBJECT_API class TStrongObjectPtr< UObject > TryPin(bool &bOutPinValid, bool bEvenIfGarbage) const
Definition WeakObjectPtr.cpp:168
COREUOBJECT_API class TStrongObjectPtr< UObject > PinEvenIfUnreachable() const
Definition WeakObjectPtr.cpp:149
UE_FORCEINLINE_HINT void operator=(const UObject *Object)
Definition WeakObjectPtr.h:145
COREUOBJECT_API bool IsStale(bool bIncludingGarbage=true, bool bThreadsafeTest=false) const
Definition WeakObjectPtr.cpp:65
UE_FORCEINLINE_HINT void operator=(TObjectPtr< T > Object)
Definition WeakObjectPtr.h:150
UE_FORCEINLINE_HINT bool IsRemote() const
Definition WeakObjectPtr.h:346
COREUOBJECT_API void operator=(FObjectPtr Object)
Definition WeakObjectPtr.cpp:29
UE_FORCEINLINE_HINT FWeakObjectPtr(TObjectPtr< T > Object)
Definition WeakObjectPtr.h:98
COREUOBJECT_API class UObject * GetEvenIfUnreachable() const
Definition WeakObjectPtr.cpp:127
COREUOBJECT_API class TStrongObjectPtr< UObject > Pin() const
Definition WeakObjectPtr.cpp:138
uint32 GetTypeHash() const
Definition WeakObjectPtr.h:353
bool operator!=(const FWeakObjectPtr &Other) const
Definition WeakObjectPtr.h:188
bool HasSameIndexAndSerialNumber(const FWeakObjectPtr &Other) const
Definition WeakObjectPtr.h:204
UE_FORCEINLINE_HINT int32 GetObjectIndex() const
Definition WeakObjectPtr.h:372
bool operator==(const FWeakObjectPtr &Other) const
Definition WeakObjectPtr.h:172
COREUOBJECT_API bool TryPinEvenIfUnreachable(class TStrongObjectPtr< UObject > &OutResult) const
Definition WeakObjectPtr.cpp:178
UE_FORCEINLINE_HINT FWeakObjectPtr(const UObject *Object)
Definition WeakObjectPtr.h:93
FWeakObjectPtr & operator=(const FWeakObjectPtr &Other)=default
void Reset()
Definition WeakObjectPtr.h:129
bool IsExplicitlyNull() const
Definition WeakObjectPtr.h:310
COREUOBJECT_API bool IsValid() const
Definition WeakObjectPtr.cpp:59
UE_FORCEINLINE_HINT FWeakObjectPtr(TYPE_OF_NULLPTR)
Definition WeakObjectPtr.h:58
COREUOBJECT_API class UObject * Get() const
Definition WeakObjectPtr.cpp:116
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25