UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Conditions.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8
9class UScriptStruct;
10
12{
13 class ICoreProvider;
14
15namespace Queries
16{
29
30 template<typename T = void>
31 struct TColumn final : public FColumnBase
32 {
33 template <typename U = T> requires (!std::is_same_v<U, void>)
34 constexpr explicit TColumn(const FName& Identifier = NAME_None) : FColumnBase(T::StaticStruct(), Identifier) {}
35
36 template <typename U = T> requires (std::is_same_v<U, void>)
40 };
41
42 /*
43 * Compile Context used to resolve dynamic columns when FConditions are compiled
44 */
46 {
47 public:
48 virtual ~IQueryConditionCompileContext() = default;
50 };
51
52 /*
53 * Specialized compile context that accepts an ICoreProvider
54 */
64
65
71 class FConditions final
72 {
73 public:
75
80
85
87 // Not marked as "explicit" to allow conversion from a column. This means that conditions with a single
88 // argument can be written in the same way as ones that use combinations.
90
91 // Compile must be called before using any functions that access the columns
93
94 // Check whether these query conditions have been compiled
96
99
109 bool AvailableColumnsAreSorted = false) const;
112 bool AvailableColumnsAreSorted = false) const;
120 bool AvailableColumnsAreSorted = false) const;
125
134
135 private:
136 template<typename AvailableColumnType, typename ProjectionFunction>
138
139 void AppendName(FString& Output, TWeakObjectPtr<const UScriptStruct> TypeInfo) const;
140
141 bool EntersScopeNext(uint8_t Index) const;
142 bool EntersScope(uint8_t Index) const;
143 bool Contains(TWeakObjectPtr<const UScriptStruct> ColumnType, const TArray<FColumnBase>& AvailableColumns) const;
144
145 bool VerifyBootstrap(ContainsCallback Contains) const;
146 bool VerifyRange(uint8_t& TokenIndex, uint8_t& ColumnIndex, ContainsCallback Contains) const;
147
148 void ConvertColumnBitToArray(TArray<TWeakObjectPtr<const UScriptStruct>>& MatchedColumns, uint64 ColumnBits) const;
149
150 uint8_t MinimumColumnMatchRequiredRange(uint8_t& Front) const;
151
152 static void AppendQuery(FConditions& Target, const FConditions& Source);
153
154 static constexpr SIZE_T MaxColumnCount = 32;
155 static constexpr SIZE_T MaxTokenCount = 64;
156
157 enum class Token : uint8_t
158 {
159 None,
160 And,
161 Or,
162 ScopeOpen,
163 ScopeClose
164 };
165
166 enum class EColumnFlags : uint8_t
167 {
168 DynamicColumnTemplate = 1 << 0
169 };
170 FRIEND_ENUM_CLASS_FLAGS(EColumnFlags);
171
174 using IdentifierArray = TArray<FName, TInlineAllocator<MaxColumnCount>>;
176
177 ColumnArray Columns;
178 ColumnFlagArray ColumnFlags;
179 TokenArray Tokens;
180 IdentifierArray Identifiers;
181 uint8_t ColumnCount = 0;
182 uint8_t TokenCount = 0;
183 bool bIsCompiled = false;
184 };
185
186 TYPEDELEMENTFRAMEWORK_API FConditions operator&&(const FConditions& Lhs, FColumnBase Rhs);
187 TYPEDELEMENTFRAMEWORK_API FConditions operator&&(const FConditions& Lhs, const FConditions& Rhs);
188 TYPEDELEMENTFRAMEWORK_API FConditions operator&&(FColumnBase Lhs, FColumnBase Rhs);
189 TYPEDELEMENTFRAMEWORK_API FConditions operator&&(FColumnBase Lhs, const FConditions& Rhs);
190
191 TYPEDELEMENTFRAMEWORK_API FConditions operator||(const FConditions& Lhs, FColumnBase Rhs);
192 TYPEDELEMENTFRAMEWORK_API FConditions operator||(const FConditions& Lhs, const FConditions& Rhs);
193 TYPEDELEMENTFRAMEWORK_API FConditions operator||(FColumnBase Lhs, FColumnBase Rhs);
194 TYPEDELEMENTFRAMEWORK_API FConditions operator||(FColumnBase Lhs, const FConditions& Rhs);
195} // namespace Queries
196} // namespace UE::Editor::DataStorage
197
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define FRIEND_ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:17
const bool
Definition NetworkReplayStreaming.h:178
AUTORTFM_INFER constexpr auto Projection(Invocable0Type &&Invocable0, InvocableTypes &&... Invocables)
Definition Projection.h:108
Definition NameTypes.h:617
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition ContainerAllocationPolicies.h:894
Definition TypedElementDataStorageInterface.h:65
TYPEDELEMENTFRAMEWORK_API bool UsesDynamicTemplates() const
Definition Conditions.cpp:580
TYPEDELEMENTFRAMEWORK_API bool IsCompiled() const
Definition Conditions.cpp:408
TYPEDELEMENTFRAMEWORK_API uint8_t MinimumColumnMatchRequired() const
Definition Conditions.cpp:339
TYPEDELEMENTFRAMEWORK_API friend FConditions operator&&(const FConditions &Lhs, FColumnBase Rhs)
Definition Conditions.cpp:611
TYPEDELEMENTFRAMEWORK_API void AppendToString(FString &Output) const
Definition Conditions.cpp:41
TYPEDELEMENTFRAMEWORK_API TConstArrayView< TWeakObjectPtr< const UScriptStruct > > GetColumns() const
Definition Conditions.cpp:356
TYPEDELEMENTFRAMEWORK_API friend FConditions operator||(const FConditions &Lhs, FColumnBase Rhs)
Definition Conditions.cpp:669
TYPEDELEMENTFRAMEWORK_API bool IsEmpty() const
Definition Conditions.cpp:363
TYPEDELEMENTFRAMEWORK_API bool Verify(TConstArrayView< FColumnBase > AvailableColumns) const
Definition Conditions.cpp:160
TYPEDELEMENTFRAMEWORK_API FConditions()
Definition Conditions.cpp:23
virtual TYPEDELEMENTFRAMEWORK_API const UScriptStruct * GenerateDynamicColumn(const FDynamicColumnDescription &Description) const override
Definition Conditions.cpp:17
virtual const UScriptStruct * GenerateDynamicColumn(const FDynamicColumnDescription &) const =0
Definition Class.h:1720
FConditions operator&&(const FConditions &Lhs, FColumnBase Rhs)
Definition Conditions.cpp:611
FConditions operator||(const FConditions &Lhs, FColumnBase Rhs)
Definition Conditions.cpp:669
Definition CommonTypes.cpp:10
U16 Index
Definition radfft.cpp:71
Definition WeakObjectPtrTemplates.h:25
TWeakObjectPtr< const UScriptStruct > TypeInfo
Definition Conditions.h:19
constexpr FColumnBase(TWeakObjectPtr< const UScriptStruct > ColumnTypeInfo, const FName &InIdentifier)
Definition Conditions.h:24
FName Identifier
Definition Conditions.h:20
constexpr TColumn(TWeakObjectPtr< const UScriptStruct > ColumnTypeInfo, const FName &Identifier=NAME_None)
Definition Conditions.h:37
constexpr TColumn(const FName &Identifier=NAME_None)
Definition Conditions.h:34