8 template<
typename...
TArgs>
15 template<ContextCapability RequestedCapability>
18 if constexpr (
sizeof...(SupportedCapabilities) > 0)
20 return std::is_base_of_v<RequestedCapability, QueryContext> && (std::is_same_v<RequestedCapability, SupportedCapabilities> || ...);
24 return std::is_base_of_v<RequestedCapability, QueryContext>;
29 bool TQueryContextImpl<QueryContext, SupportedCapabilities...>::SupportsCapability(
const FName& Capability)
31 if constexpr (
sizeof...(SupportedCapabilities) > 0)
33 return IContextContract::SupportsCapability<QueryContext>(Capability) && ((SupportedCapabilities::Name == Capability) || ...);
37 return IContextContract::SupportsCapability<QueryContext>(Capability);
44 for (
const FName& Capability : Capabilities)
46 if (!SupportsCapability(Capability))
56#define CallFunction(Capability, ReturnValue, FunctionName, ...) \
57 if constexpr (SupportsCapability< Capability >()) \
59 return Implementation.FunctionName( __VA_ARGS__ ); \
63 checkf(false, TEXT("Function '" #FunctionName "' in capability '" #Capability"' is not supported by the current query context implementation.")); \
64 return ReturnValue {} ; \
67#define ArgTypeName(Type, Name) Type Name
68#define ArgName(Type, Name) Name
70#define FunctionCommon(ReturnType) \
71 template<typename QueryContext, ContextCapability... SupportedCapabilities> \
72 ReturnType TQueryContextImpl<QueryContext, SupportedCapabilities...>::
74#define Function0(Capability, Return, Function) \
75 FunctionCommon(Return) Function() \
77 CallFunction(Capability, Return, Function ) \
79#define Function1(Capability, Return, Function, Arg1) \
80 FunctionCommon(Return) Function(ArgTypeName Arg1) \
82 CallFunction(Capability, Return, Function, ArgName Arg1 ) \
84#define Function2(Capability, Return, Function, Arg1, Arg2) \
85 FunctionCommon(Return) Function(ArgTypeName Arg1, ArgTypeName Arg2) \
87 CallFunction(Capability, Return, Function, ArgName Arg1, ArgName Arg2 ) \
89#define Function3(Capability, Return, Function, Arg1, Arg2, Arg3) \
90 FunctionCommon(Return) Function(ArgTypeName Arg1, ArgTypeName Arg2, ArgTypeName Arg3) \
92 CallFunction(Capability, Return, Function, ArgName Arg1, ArgName Arg2, ArgName Arg3 ) \
94#define Function4(Capability, Return, Function, Arg1, Arg2, Arg3, Arg4) \
95 FunctionCommon(Return) Function(ArgTypeName Arg1, ArgTypeName Arg2, ArgTypeName Arg3, ArgTypeName Arg4) \
97 CallFunction(Capability, Return, Function, ArgName Arg1, ArgName Arg2, ArgName Arg3, ArgName Arg4 ) \
100#define ConstFunction0(Capability, Return, Function) \
101 FunctionCommon(Return) Function() const \
103 CallFunction(Capability, Return, Function ) \
105#define ConstFunction1(Capability, Return, Function, Arg1) \
106 FunctionCommon(Return) Function(ArgTypeName Arg1) const \
108 CallFunction(Capability, Return, Function, ArgName Arg1 ) \
110#define ConstFunction2(Capability, Return, Function, Arg1, Arg2) \
111 FunctionCommon(Return) Function(ArgTypeName Arg1, ArgTypeName Arg2) const \
113 CallFunction(Capability, Return, Function, ArgName Arg1, ArgName Arg2 ) \
115#define ConstFunction3(Capability, Return, Function, Arg1, Arg2, Arg3) \
116 FunctionCommon(Return) Function(ArgTypeName Arg1, ArgTypeName Arg2, ArgTypeName Arg3) const \
118 CallFunction(Capability, Return, Function, ArgName Arg1, ArgName Arg2, ArgName Arg3 ) \
120#define ConstFunction4(Capability, Return, Function, Arg1, Arg2, Arg3, Arg4) \
121 FunctionCommon(Return) Function(ArgTypeName Arg1, ArgTypeName Arg2, ArgTypeName Arg3, ArgTypeName Arg4) const \
123 CallFunction(Capability, Return, Function, ArgName Arg1, ArgName Arg2, ArgName Arg3, ArgName Arg4 ) \
126#define CapabilityStart(Capability, Flags)
127#define CapabilityEnd(Capability)
144#undef CapabilityStart
153 template<
typename ReturnType>
159 if (!SupportsCapability(Capability))
162 checkf(
false,
TEXT(
"Requested query context '%s' is not supported by query context implementation."),
163 *Capability.ToString());
172 return Implementation;
178 return Implementation;
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition NameTypes.h:617
Definition TypedElementQueryContextImplementation.h:42
TQueryContextImpl(TArgs &&... Args)
Definition TypedElementQueryContextImplementation.inl:9
const ImplementationType & GetContextImplementation() const
Definition TypedElementQueryContextImplementation.inl:170
bool CheckCompatiblity(const TQueryFunction< ReturnType > &Function) const
Definition TypedElementQueryContextImplementation.inl:154
static bool SupportsCapabilities(TConstArrayView< FName > Capabilities)
Definition TypedElementQueryContextImplementation.inl:42
Definition TypedElementQueryFunctions.h:73
Definition TypedElementQueryContext.h:14
Definition Conditions.cpp:11