25#if UE_DELEGATE_CHECK_LIFETIME
27# define INSTRUMENT_DELEGATE_MODULE() FTrackedDelegateInstanceExtras::SetModuleName(UE_MODULE_NAME)
29# define INSTRUMENT_DELEGATE_MODULE()
31# define INSTRUMENT_DELEGATE_FUNCTION(Function) FTrackedDelegateInstanceExtras::SetBoundFunctionName(Function)
33# define INSTRUMENT_DELEGATE_MODULE()
34# define INSTRUMENT_DELEGATE_FUNCTION(Function)
43template <
typename FuncType,
typename UserPolicy,
typename...
VarTypes>
70template <
class UserClass,
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename...
VarTypes>
75 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
93 CachedFunction = UserObjectPtr->FindFunctionChecked(
InFunctionName);
99#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
110 return (
UObject*)UserObjectPtr.Get();
115 return UserObjectPtr.Get();
126#if UE_WITH_REMOTE_OBJECT_HANDLE
129 return UserObjectPtr.HasSameObject(
InUserObject.GetUObject());
137#if UE_WITH_REMOTE_OBJECT_HANDLE
138 return !UserObjectPtr.IsValid(
true);
140 return !UserObjectPtr.Get(
true);
146 return UserObjectPtr.IsValid();
168 RetValType
Execute(ParamTypes... Params)
const final
209template <
bool bConst,
class UserClass,
ESPMode SPMode,
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename...
VarTypes>
214 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
235#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
251 return UserObject.Pin().Get();
257 return *((
uint64*)&MethodPtr);
259 return *((
uint32*)&MethodPtr);
271 return UserObject.IsValid();
293 RetValType
Execute(ParamTypes... Params)
const final
343template <
ESPMode SPMode,
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename FunctorType,
typename...
VarTypes>
347 static_assert(std::is_same_v<FunctorType, std::remove_reference_t<FunctorType>>,
"FunctorType cannot be a reference");
350 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
352 using UserClass =
const void;
367#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
383 return ContextObject.Pin().Get();
399 return ContextObject.IsValid();
421 RetValType
Execute(ParamTypes... Params)
const final
428 if (ContextObject.IsValid())
443 mutable std::remove_const_t<FunctorType> Functor;
447template <
bool bConst,
class UserClass,
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename...
VarTypes>
454 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
480#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
502 return *((
uint64*)&MethodPtr);
504 return *((
uint32*)&MethodPtr);
540 RetValType
Execute(ParamTypes... Params)
const final
581template <
bool bConst,
class UserClass,
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename...
VarTypes>
586 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
609#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
620 return (
UObject*)UserObject.Get();
625 return UserObject.Get();
631 return *((
uint64*)&MethodPtr);
633 return *((
uint32*)&MethodPtr);
640#if UE_WITH_REMOTE_OBJECT_HANDLE
643 return UserObject.HasSameObject(
InUserObject.GetUObject());
651#if UE_WITH_REMOTE_OBJECT_HANDLE
652 return !UserObject.IsValid(
true);
654 return !UserObject.Get(
true);
660 return !!UserObject.Get();
682 RetValType
Execute(ParamTypes... Params)
const final
730template <
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename...
VarTypes>
735 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
745 check(StaticFuncPtr !=
nullptr);
752#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
774 return *((
uint64*)&StaticFuncPtr);
776 return *((
uint32*)&StaticFuncPtr);
812 RetValType
Execute(ParamTypes... Params)
const final
833 FFuncPtr StaticFuncPtr;
837template <
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename FunctorType,
typename...
VarTypes>
841 static_assert(std::is_same_v<FunctorType, std::remove_reference_t<FunctorType>>,
"FunctorType cannot be a reference");
844 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
857#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
911 RetValType
Execute(ParamTypes... Params)
const final
929 mutable std::remove_const_t<FunctorType> Functor;
933template <
typename RetValType,
typename... ParamTypes,
typename UserPolicy,
typename FunctorType,
typename...
VarTypes>
937 static_assert(std::is_same_v<FunctorType, std::remove_reference_t<FunctorType>>,
"FunctorType cannot be a reference");
940 using DelegateBaseType =
typename UserPolicy::FDelegateExtras;
944 using UserClass = std::conditional_t<
sizeof...(ParamTypes) == 0,
const UObject,
const UObject>;
959#if USE_DELEGATE_TRYGETBOUNDFUNCTIONNAME
970 return (
UObject*)ContextObject.Get();
975 return ContextObject.Get();
986#if UE_WITH_REMOTE_OBJECT_HANDLE
997#if UE_WITH_REMOTE_OBJECT_HANDLE
998 return !ContextObject.IsValid(
true);
1000 return !ContextObject.Get(
true);
1006 return ContextObject.IsValid();
1026 RetValType
Execute(ParamTypes... Params)
const final
1034 if (ContextObject.IsValid())
1051 mutable std::remove_const_t<FunctorType> Functor;
1054#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_7
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define INSTRUMENT_DELEGATE_FUNCTION(Function)
Definition DelegateInstancesImpl.h:34
#define INSTRUMENT_DELEGATE_MODULE()
Definition DelegateInstancesImpl.h:33
const void * FDelegateUserObjectConst
Definition IDelegateInstance.h:108
ESPMode
Definition SharedPointerFwd.h:12
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:866
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:876
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:906
bool HasSameObject(FDelegateUserObjectConst UserObject) const final
Definition DelegateInstancesImpl.h:882
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:901
TBaseFunctorDelegateInstance(InFunctorType &&InFunctor, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:848
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:871
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:896
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:916
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:911
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:888
Definition DelegateInstancesImplFwd.h:53
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:525
UserClass * UserObject
Definition DelegateInstancesImpl.h:574
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:555
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:499
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:540
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:494
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:489
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:514
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:530
FMethodPtr MethodPtr
Definition DelegateInstancesImpl.h:577
TBaseRawMethodDelegateInstance(UserClass *InUserObject, FMethodPtr InMethodPtr, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:466
typename TMemFunPtrType< bConst, UserClass, RetValType(ParamTypes..., VarTypes...)>::Type FMethodPtr
Definition DelegateInstancesImpl.h:457
bool HasSameObject(FDelegateUserObjectConst InUserObject) const final
Definition DelegateInstancesImpl.h:509
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:535
Definition DelegateInstancesImplFwd.h:35
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:397
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:386
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:426
TBaseSPLambdaDelegateInstance(const TWeakPtr< UserClass, SPMode > &InContextObject, InFunctorType &&InFunctor, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:356
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:411
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:421
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:376
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:381
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:406
bool HasSameObject(FDelegateUserObjectConst InContextObject) const final
Definition DelegateInstancesImpl.h:392
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:416
Definition DelegateInstancesImplFwd.h:29
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:254
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:293
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:311
TBaseSPMethodDelegateInstance(const TSharedPtr< UserClass, SPMode > &InUserObject, FMethodPtr InMethodPtr, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:220
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:269
FMethodPtr MethodPtr
Definition DelegateInstancesImpl.h:339
TWeakPtr< UserClass, SPMode > UserObject
Definition DelegateInstancesImpl.h:336
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:244
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:288
typename TMemFunPtrType< bConst, UserClass, RetValType(ParamTypes..., VarTypes...)>::Type FMethodPtr
Definition DelegateInstancesImpl.h:217
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:249
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:283
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:278
bool HasSameObject(FDelegateUserObjectConst InUserObject) const final
Definition DelegateInstancesImpl.h:264
Definition DelegateInstancesImplFwd.h:23
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:807
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:761
RetValType(*)(ParamTypes..., VarTypes...) FFuncPtr
Definition DelegateInstancesImpl.h:738
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:820
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:771
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:812
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:797
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:766
bool HasSameObject(FDelegateUserObjectConst UserObject) const final
Definition DelegateInstancesImpl.h:781
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:787
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:802
TBaseStaticDelegateInstance(FFuncPtr InStaticFuncPtr, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:741
Definition DelegateInstancesImplFwd.h:47
bool HasSameObject(FDelegateUserObjectConst InUserObject) const final
Definition DelegateInstancesImpl.h:124
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:153
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:113
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:118
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:163
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:144
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:108
UFunction * CachedFunction
Definition DelegateInstancesImpl.h:199
TBaseUFunctionDelegateInstance(UserClass *InUserObject, const FName &InFunctionName, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:81
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:168
bool IsCompactable() const final
Definition DelegateInstancesImpl.h:135
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:158
TWeakObjectPtr< UserClass > UserObjectPtr
Definition DelegateInstancesImpl.h:205
FName FunctionName
Definition DelegateInstancesImpl.h:202
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:180
Definition DelegateInstancesImplFwd.h:17
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:677
FMethodPtr MethodPtr
Definition DelegateInstancesImpl.h:726
bool IsCompactable() const final
Definition DelegateInstancesImpl.h:649
TBaseUObjectMethodDelegateInstance(UserClass *InUserObject, FMethodPtr InMethodPtr, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:594
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:623
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:618
typename TMemFunPtrType< bConst, UserClass, RetValType(ParamTypes..., VarTypes...)>::Type FMethodPtr
Definition DelegateInstancesImpl.h:591
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:699
bool HasSameObject(FDelegateUserObjectConst InUserObject) const final
Definition DelegateInstancesImpl.h:638
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:682
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:672
TWeakObjectPtr< UserClass > UserObject
Definition DelegateInstancesImpl.h:723
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:667
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:628
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:658
Definition DelegateInstancesImplFwd.h:41
Definition DelegateInstancesImpl.h:45
TTuple< VarTypes... > Payload
Definition DelegateInstancesImpl.h:61
FDelegateHandle Handle
Definition DelegateInstancesImpl.h:64
TCommonDelegateInstanceState(InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:48
FDelegateHandle GetHandle() const final
Definition DelegateInstancesImpl.h:54
Definition DelegateBase.h:226
Definition SharedPointer.h:692
Definition StrongObjectPtrTemplates.h:26
uint64 GetBoundProgramCounterForTimerManager() const final
Definition DelegateInstancesImpl.h:978
void CreateCopy(TDelegateBase< FNotThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:1016
const void * GetObjectForTimerManager() const final
Definition DelegateInstancesImpl.h:973
bool HasSameObject(FDelegateUserObjectConst InContextObject) const final
Definition DelegateInstancesImpl.h:984
TWeakBaseFunctorDelegateInstance(UserClass *InContextObject, InFunctorType &&InFunctor, InVarTypes &&... Vars)
Definition DelegateInstancesImpl.h:948
void CreateCopy(TDelegateBase< FThreadSafeDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:1011
RetValType Execute(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:1026
bool IsCompactable() const final
Definition DelegateInstancesImpl.h:995
bool IsSafeToExecute() const final
Definition DelegateInstancesImpl.h:1004
bool ExecuteIfSafe(ParamTypes... Params) const final
Definition DelegateInstancesImpl.h:1031
void CreateCopy(TDelegateBase< FNotThreadSafeNotCheckedDelegateMode > &Base) const final
Definition DelegateInstancesImpl.h:1021
UObject * GetUObject() const final
Definition DelegateInstancesImpl.h:968
Definition DelegateInstancesImplFwd.h:59
Definition SharedPointer.h:1295
Definition UObjectBase.h:59
Definition DelegateHandle.cpp:9
constexpr bool IsUObjectPtr(const volatile UObjectBase *)
Definition DelegateInstancesImpl.h:39
Definition DelegateInstanceInterface.h:12
Definition DelegateInstanceInterface.h:49
Definition DelegateInstanceInterface.h:67
Definition DelegateInstanceInterface.h:104
Definition WeakObjectPtrTemplates.h:25
Definition DelegateBase.h:205