16 template<
typename T>
concept FunctorType =
requires{ &T::operator(); };
27 template<
typename Return,
typename... Args>
32 static constexpr bool bIsValidQueryFunction =
true;
36 template<
typename Class,
typename Return,
typename... Args>
45 template<
typename Class,
typename Return,
typename... Args>
54 template<
bool IsFunctor,
typename FunctionType>
57 template<
typename FunctionType>
63 template<
typename FunctionType>
69 template<
typename FunctionType>
79 Base::bIsValidQueryFunction &&
80 (ArgumentInfo::bIsSingle || ArgumentInfo::bIsBatch);
83 template<
typename RequestedReturnType>
86 static_assert(
bIsValidQueryFunction,
"The provided function is not compatible with a query callback. "
87 "One or more arguments are possibly incompatible.");
89 static_assert(ArgumentInfo::CountContexts() <= 1,
"Only zero or one context can be added as an argument.");
90 static_assert(ArgumentInfo::CountFlowControls() <= 1,
"Only zero or one flow control arguments can be added.");
92 if constexpr (std::is_same_v<RequestedReturnType, void>)
94 static_assert(ArgumentInfo::ResultIndex ==
INDEX_NONE,
95 "The query function being build has no return value and can't therefore accept a TResult.");
96 static_assert(std::is_same_v<ReturnType, void>,
97 "The return type of the provided query is expected to be void.");
103 if constexpr (ArgumentInfo::ResultIndex >= 0)
105 static_assert(ArgumentInfo::CountResults() == 1,
"Only one TResult can be present.");
106 static_assert(std::is_same_v<typename ArgumentInfo::ResultType, RequestedReturnType>,
107 "The type used for TResult is not compatible with the result type expected for the query function.");
108 static_assert(std::is_same_v<ReturnType, void>,
109 "The return type of the provided query is expected to be void when a TResult is provided.");
113 static_assert(std::is_convertible_v<ReturnType, RequestedReturnType>,
114 "The type returned is not compatible with the result type expected for the query function.");
119 static_assert(ArgumentInfo::ResultIndex >= 0,
120 "Batch processing a function that expects a result it's required that a TResult is used.");
121 static_assert(ArgumentInfo::CountResults() == 1,
"Only one TResult can be present.");
122 static_assert(std::is_same_v<typename ArgumentInfo::ResultType, RequestedReturnType>,
123 "The type used for TResult is not compatible with the result type expected for the query function.");
124 static_assert(std::is_same_v<ReturnType, void>,
125 "The return type of the provided query is expected to be void for batch processing functions.");
130 template<
typename RequestedReturnType>
133 if constexpr (!std::is_same_v<void, ContextType>)
135 Result.Capabilities = IContextContract::SupportedCapabilitiesList<typename ContextType::Capabilities>();
137 Result.ConstColumnTypes = ArgumentInfo::ListConstColumns();
138 Result.MutableColumnTypes = ArgumentInfo::ListMutableColumns();
143 template<
typename FunctionInfo,
typename ArgumentInfo,
typename ReturnType,
typename FunctionType>
151 using ArgumentList =
typename ArgumentInfo::ArgumentList;
164 ArgumentList Arguments;
165 ArgumentInfo::SetResult(Arguments, QueryResult);
166 ArgumentInfo::SetContext(Arguments, Contract);
167 ArgumentInfo::SetFlowControl(Arguments,
Flow);
179 if constexpr (FunctionInfo::bIsSingleRowProcessor)
183 if constexpr (ArgumentInfo::ResultIndex >= 0 || std::is_same_v<ReturnType, void>)
185 Arguments.ApplyBefore(Callback);
189 QueryResult.
Add(Arguments.ApplyBefore(Callback));
191 ArgumentInfo::IncrementColumns(Arguments);
196 Arguments.ApplyBefore(Callback);
207 template<
typename ReturnType>
208 template<EFunctionCallConfig Config>
235 template<
typename Return, FunctionType Function>
239 using ArgumentInfo =
typename FunctionInfo::ArgumentInfo;
243 FunctionInfo::SetupResult(Result);
257 template<
typename Return, FunctionType Function>
261 using ArgumentInfo =
typename FunctionInfo::ArgumentInfo;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
return true
Definition ExternalRpcRegistry.cpp:601
auto Response
Definition ExternalRpcRegistry.cpp:598
TConstArrayView< const UScriptStruct * > TConstArrayView< const UScriptStruct * >
Definition TypedElementQueryCapabilities.inl:16
Definition ArrayView.h:139
bool(*)(IQueryFunctionResponse &Response, TArrayView< const void * > ConstColumns, TArrayView< void * > MutableColumns) FunctionSpecializationCallback
Definition TypedElementQueryFunctions.h:50
void CallInternal(TResult< ReturnType > &Result, IContextContract &Contract, IQueryFunctionResponse &Response)
Definition TypedElementQueryFunctions.inl:209
Definition TypedElementQueryFunctions.h:73
Definition TypedElementQueryFunctions.h:39
Definition TypedElementQueryFunctionArguments.h:21
Definition TypedElementQueryFunctions.inl:16
Definition OverriddenPropertySet.cpp:45
void CallBody(TResult< ReturnType > &QueryResult, IContextContract &Contract, IQueryFunctionResponse &Response, typename TQueryFunction< ReturnType >::FunctionSpecializationCallback Specialization, FunctionType &&Callback)
Definition TypedElementQueryFunctions.inl:144
Definition Conditions.cpp:11
const UScriptStruct * Type(FTopLevelAssetPath Name)
Definition TypedElementQueryBuilder.cpp:15
EFlowControl
Definition TypedElementQueryFunctionArgumentTypes.h:32
TQueryFunction< Return > BuildQueryFunction(Function &&Callback)
Definition TypedElementQueryFunctions.inl:236
@ false
Definition radaudio_common.h:23
Definition TypedElementQueryContract.h:113
Definition TypedElementQueryFunctions.h:20
Definition TypedElementQueryFunctionArguments.h:190
Return ReturnType
Definition TypedElementQueryFunctions.inl:42
Return ReturnType
Definition TypedElementQueryFunctions.inl:51
Return ReturnType
Definition TypedElementQueryFunctions.inl:33
Definition TypedElementQueryFunctions.inl:20
void ReturnType
Definition TypedElementQueryFunctions.inl:24
static constexpr bool bIsValidQueryFunction
Definition TypedElementQueryFunctions.inl:23
Definition TypedElementQueryFunctions.inl:55
Definition TypedElementQueryFunctions.inl:71
static constexpr void StaticValidation()
Definition TypedElementQueryFunctions.inl:84
typename Base::ReturnType ReturnType
Definition TypedElementQueryFunctions.inl:74
static constexpr void SetupResult(TQueryFunction< RequestedReturnType > &Result)
Definition TypedElementQueryFunctions.inl:131
static constexpr bool bIsValidQueryFunction
Definition TypedElementQueryFunctions.inl:78
typename Base::ArgumentInfo ArgumentInfo
Definition TypedElementQueryFunctions.inl:75
static constexpr bool bIsSingleRowProcessor
Definition TypedElementQueryFunctions.inl:81
TFunctionInfoSelection< FunctorType< FunctionType >, FunctionType >::Type Base
Definition TypedElementQueryFunctions.inl:72
Definition TypedElementQueryFunctionArgumentTypes.h:46
virtual void Add(ResultType ResultValue)=0