UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TypedElementQueryFunctionArguments.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#include <functional>
4#include <type_traits>
5
7{
8 template<EArgumentFlags TypeFlag, int32 Index>
10 {
11 return -1;
12 }
13
14 template<EArgumentFlags TypeFlag, int32 Index, typename Arg, typename... Args>
16 {
18 {
19 return Index;
20 }
21 else
22 {
23 return FirstIndexOfTypeImpl<TypeFlag, Index + 1, Args...>();
24 }
25 }
26
27 template<typename... Args>
28 template<EArgumentFlags TypeFlag>
29 constexpr int32 TArgumentInfo<Args...>::FirstIndexOfType()
30 {
31 if constexpr (sizeof...(Args) > 0)
32 {
33 return FirstIndexOfTypeImpl<TypeFlag, 0, Args...>();
34 }
35 else
36 {
37 return INDEX_NONE;
38 }
39 }
40
41 template<typename... Args>
42 template<EArgumentFlags Flags>
43 constexpr int32 TArgumentInfo<Args...>::CountFlags()
44 {
45 return (0 + ... + (EnumHasAllFlags(TArgument<Args>::Flags, Flags) ? 1 : 0));
46 }
47
48 template<typename... Args>
49 template<typename T>
51 {
52 if constexpr (ResultIndex >= 0)
53 {
54 SetResultUnguarded<ResultIndex>(Arguments, Result);
55 }
56 }
57
58 template<typename... Args>
63
64 template<typename... Args>
66 {
67 if constexpr (ContextIndex >= 0)
68 {
69 SetContextUnguarded<ContextIndex>(Arguments, Contract);
70 }
71 }
72
73 template<typename... Args>
78
79 template<typename... Args>
81 {
82 if constexpr (FlowIndex >= 0)
83 {
85 }
86 }
87
88 template<typename... Args>
93
94 template<typename... Args>
99
100 template<typename... Args>
105
106 template<typename... Args>
107 template<EArgumentFlags Flags>
109 {
110 constexpr int32 ColumnCount = CountFlags<Flags>();
111 if constexpr (ColumnCount > 0)
112 {
114 [&]()
115 {
116 static const UScriptStruct* ResultColumns[ColumnCount];
117 int32 Index = 0;
118 (
119 [&]
120 {
122 {
124 }
125 }(), ...
126 );
127
129 }();
130 return Result;
131 }
132 else
133 {
135 }
136 }
137
138 template<typename... Args>
143
144 template<typename... Args>
149
150 template<typename... Args>
152 {
153 const void* const* ColumnIt = Columns.GetData();
154 ([&]{
155 using ArgumentType = TArgument<Args>;
156 if constexpr (EnumHasAllFlags(ArgumentType::Flags, EArgumentFlags::IsConst | EArgumentFlags::Type_Column))
157 {
158 Arguments.template Get<typename ArgumentType::ArgumentType>() = static_cast<typename ArgumentType::PointerCastType>(*ColumnIt++);
159 }
160 }(), ...);
161 }
162
163 template<typename... Args>
165 {
166 void* const* ColumnIt = Columns.GetData();
167 ([&]{
168 using ArgumentType = TArgument<Args>;
169 if constexpr (EnumHasAllFlags(ArgumentType::Flags, EArgumentFlags::IsMutable | EArgumentFlags::Type_Column))
170 {
171 Arguments.template Get<typename ArgumentType::ArgumentType>() = static_cast<typename ArgumentType::PointerCastType>(*ColumnIt++);
172 }
173 }(), ...);
174 }
175
176 template<typename... Args>
178 {
179 ([&] {
180 using ArgumentType = TArgument<Args>;
182 {
184 }
185 }(), ...);
186 }
187
188 template<typename... Args>
189 template<int32 Index, typename T>
190 void TArgumentInfo<Args...>::SetResultUnguarded(ArgumentList& Arguments, TResult<T>& Result)
191 {
192 static_assert(std::is_same_v<T, typename TIndexToArgInfo<Index, Args...>::BaseType>,
193 "Result type used doesn't match the result type in the function's arguments.");
194 Arguments.template Get<Index>() = &Result;
195 }
196
197 template<typename... Args>
198 template<int32 Index>
199 void TArgumentInfo<Args...>::SetContextUnguarded(ArgumentList& Arguments, IContextContract& Contract)
200 {
201 Arguments.template Get<Index>() = typename TTupleElement<Index, ArgumentList>::Type(Contract);
202 }
203
204 template<typename... Args>
205 template<int32 Index>
206 void TArgumentInfo<Args...>::SetFlowControlUnguarded(ArgumentList& Arguments, EFlowControl& FlowControl)
207 {
208 Arguments.template Get<Index>() = &FlowControl;
209 }
210
211 template<typename... Args>
212 template<typename ArgumentType>
213 void TArgumentInfo<Args...>::IncrementColumnUnguarded(ArgumentList& Arguments)
214 {
215 Arguments.template Get<ArgumentType>().Increment();
216 }
217} // namespace UE::Editor::DataStorage::Queries::Private
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
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
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
TConstArrayView< const UScriptStruct * > TConstArrayView< const UScriptStruct * >
Definition TypedElementQueryCapabilities.inl:16
Definition Class.h:1720
Definition TypedElementQueryBuilder.cpp:566
typename TIndexToArgInfoImpl< Index, Args... >::Type TIndexToArgInfo
Definition TypedElementQueryFunctionArguments.h:186
EArgumentFlags
Definition TypedElementQueryFunctionArguments.h:24
constexpr int32 FirstIndexOfTypeImpl()
Definition TypedElementQueryFunctionArguments.inl:9
EFlowControl
Definition TypedElementQueryFunctionArgumentTypes.h:32
U16 Index
Definition radfft.cpp:71
Definition Tuple.h:652
Definition TypedElementQueryContract.h:113
Definition TypedElementQueryFunctionArguments.h:190
static void SetContext(ArgumentList &Arguments, IContextContract &Contract)
Definition TypedElementQueryFunctionArguments.inl:65
static void SetConstColumns(ArgumentList &Arguments, TConstArrayView< const void * > Columns)
Definition TypedElementQueryFunctionArguments.inl:151
static void IncrementColumns(ArgumentList &Arguments)
Definition TypedElementQueryFunctionArguments.inl:177
static void SetMutableColumns(ArgumentList &Arguments, TConstArrayView< void * > Columns)
Definition TypedElementQueryFunctionArguments.inl:164
static TConstArrayView< const UScriptStruct * > ListMutableColumns()
Definition TypedElementQueryFunctionArguments.inl:145
static void SetResult(ArgumentList &Arguments, TResult< T > &Result)
Definition TypedElementQueryFunctionArguments.inl:50
static TConstArrayView< const UScriptStruct * > ListConstColumns()
Definition TypedElementQueryFunctionArguments.inl:139
static constexpr int32 CountMutableColumns()
Definition TypedElementQueryFunctionArguments.inl:101
static void SetFlowControl(ArgumentList &Arguments, EFlowControl &FlowControl)
Definition TypedElementQueryFunctionArguments.inl:80
static constexpr int32 CountFlowControls()
Definition TypedElementQueryFunctionArguments.inl:89
static constexpr int32 CountConstColumns()
Definition TypedElementQueryFunctionArguments.inl:95
static constexpr int32 CountResults()
Definition TypedElementQueryFunctionArguments.inl:59
static constexpr int32 CountContexts()
Definition TypedElementQueryFunctionArguments.inl:74
Definition TypedElementQueryFunctionArguments.h:55
Definition TypedElementQueryFunctionArgumentTypes.h:46