8#include "Containers/Array.h"
11#include "Containers/Set.h"
12#include "Containers/Map.h"
13#include "Misc/Optional.h"
37template <
typename CharType>
119template <
typename CharType>
187 const CharType* Start;
191 const CharType* ReadPos;
196#define DEFINE_EXPRESSION_NODE_TYPE(TYPE, ...) \
197template<> struct TGetExpressionNodeTypeId<TYPE>\
199 static const FGuid& GetTypeId()\
201 static FGuid Global(__VA_ARGS__);\
225 UE_REQUIRES(!std::is_convertible_v<T*, FExpressionNode*>)
242 const T*
Cast()
const;
249 static constexpr uint32 MaxStackAllocationSize = 64 -
sizeof(
FGuid);
261template <
typename CharType>
276template <
typename CharType>
302 return A.OperatorType ==
B.OperatorType &&
303 A.LeftOperandType ==
B.LeftOperandType &&
304 A.RightOperandType ==
B.RightOperandType;
315template <
typename ContextType,
typename CharType>
347 template<
typename OperatorType,
typename FuncType>
354 template<
typename OperatorType,
typename FuncType>
388 template<
typename OperatorType,
typename FuncType>
391 template<
typename OperatorType,
typename FuncType>
410template <
typename CharType>
422template <
typename ContextType,
typename CharType>
441 return Operators.
ExecBinary(Operator, L,
R, Context);
450 const ContextType* Context;
454template <
typename CharType>
492template <
typename CharType>
497template <
typename CharType>
519 bool bIgnoreWhitespace =
false;
560 template<
typename StartGroupType,
typename EndGroupType>
567 template<
typename ExpressionNodeType>
574 template<
typename ExpressionNodeType>
587 template<
typename ExpressionNodeType>
640#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TCopyQualifiersFromTo_T< From, To > * Cast(From *Src)
Definition Casts.h:95
TValueOrError< FExpressionNode, FExpressionError > FExpressionResult
Definition ExpressionParserTypesFwd.h:35
EAssociativity
Definition ExpressionParserTypes.h:528
#define DEFINE_EXPRESSION_NODE_TYPE(TYPE,...)
Definition ExpressionParserTypes.h:196
EParseState
Definition ExpressionParserTypes.h:107
const bool
Definition NetworkReplayStreaming.h:178
#define UE_REQUIRES(...)
Definition Requires.h:86
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition ExpressionParserTypes.h:557
CORE_API const FGuid * GetGrouping(const FGuid &TypeId) const
Definition ExpressionParser.cpp:454
void DefinePreUnaryOperator()
Definition ExpressionParserTypes.h:568
void DefineBinaryOperator(int32 InPrecedence, EAssociativity InAssociativity=EAssociativity::RightToLeft, bool bCanShortCircuit=false)
Definition ExpressionParserTypes.h:588
void DefineGrouping()
Definition ExpressionParserTypes.h:561
void DefinePostUnaryOperator()
Definition ExpressionParserTypes.h:575
CORE_API bool HasPostUnaryOperator(const FGuid &TypeId) const
Definition ExpressionParser.cpp:464
CORE_API const FOpParameters * GetBinaryOperatorDefParameters(const FGuid &TypeId) const
Definition ExpressionParser.cpp:469
CORE_API bool HasPreUnaryOperator(const FGuid &TypeId) const
Definition ExpressionParser.cpp:459
Definition ExpressionParserTypes.h:217
FExpressionNode()=default
FExpressionNode(const FExpressionNode &)=delete
FExpressionNode & operator=(const FExpressionNode &)=delete
Definition ExpressionParserTypes.h:456
TExpressionTokenConsumer & operator=(TExpressionTokenConsumer &&)=delete
CORE_API TTokenStream< CharType > & GetStream()
Definition ExpressionParser.cpp:303
TExpressionTokenConsumer(TExpressionTokenConsumer &&)=delete
~TExpressionTokenConsumer()=default
CORE_API TArray< TExpressionToken< CharType > > Extract()
Definition ExpressionParser.cpp:288
TExpressionTokenConsumer(const TExpressionTokenConsumer &)=delete
TExpressionTokenConsumer & operator=(const TExpressionTokenConsumer &)=delete
Definition ExpressionParserTypes.h:263
TStringToken< CharType > Context
Definition ExpressionParserTypes.h:272
FExpressionNode Node
Definition ExpressionParserTypes.h:271
TExpressionToken(const TStringToken< CharType > &InContext, FExpressionNode InNode)
Definition ExpressionParserTypes.h:265
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition ExpressionParserTypes.h:39
bool IsValid() const
Definition ExpressionParserTypes.h:50
int32 LineNumber
Definition ExpressionParserTypes.h:101
int32 GetLineNumber() const
Definition ExpressionParserTypes.h:74
TStringToken(const CharType *InStart, int32 Line=0, int32 Character=0)
Definition ExpressionParserTypes.h:91
const CharType * GetTokenStartPos() const
Definition ExpressionParserTypes.h:56
int32 CharacterIndex
Definition ExpressionParserTypes.h:102
const CharType * TokenEnd
Definition ExpressionParserTypes.h:100
const CharType * TokenStart
Definition ExpressionParserTypes.h:99
TString< CharType > GetString() const
Definition ExpressionParserTypes.h:44
const CharType * GetTokenEndPos() const
Definition ExpressionParserTypes.h:62
int32 GetCharacterIndex() const
Definition ExpressionParserTypes.h:68
void Accumulate(const TStringToken &InToken)
Definition ExpressionParserTypes.h:80
Definition ExpressionParserTypes.h:499
CORE_API void IgnoreWhitespace()
Definition ExpressionParser.cpp:309
CORE_API bool DoesIgnoreWhitespace()
Definition ExpressionParser.cpp:321
TTokenDefinitions()=default
CORE_API TOptional< FExpressionError > ConsumeTokens(TExpressionTokenConsumer< CharType > &Consumer) const
Definition ExpressionParser.cpp:373
CORE_API void DefineToken(TFunction< TExpressionDefinition< CharType > > &&Definition)
Definition ExpressionParser.cpp:315
Definition ExpressionParserTypes.h:121
CORE_API CharType PeekChar(int32 Offset=0) const
Definition ExpressionParser.cpp:29
CORE_API void SetReadPos(const TStringToken< CharType > &Token)
Definition ExpressionParser.cpp:273
CORE_API TOptional< TStringToken< CharType > > GenerateToken(int32 NumChars, TStringToken< CharType > *Accumulate=nullptr) const
Definition ExpressionParser.cpp:254
CORE_API bool IsReadPosValid(const CharType *InPos, int32 MinNumChars=1) const
Definition ExpressionParser.cpp:23
CORE_API int32 CharsRemaining() const
Definition ExpressionParser.cpp:40
CORE_API TOptional< TStringToken< CharType > > ParseSymbol(TStringToken< CharType > *Accumulate=nullptr) const
Definition ExpressionParser.cpp:132
CORE_API TOptional< TStringToken< CharType > > ParseWhitespace(TStringToken< CharType > *Accumulate=nullptr) const
Definition ExpressionParser.cpp:241
CORE_API TOptional< TStringToken< CharType > > ParseToken(TFunctionRef< EParseState(CharType)> Pred, TStringToken< CharType > *Accumulate=nullptr) const
Definition ExpressionParser.cpp:86
const CharType * GetRead() const
Definition ExpressionParserTypes.h:170
CORE_API FString GetErrorContext() const
Definition ExpressionParser.cpp:58
CORE_API TOptional< TStringToken< CharType > > ParseTokenIgnoreCase(const CharType *Symbol, TStringToken< CharType > *Accumulate=nullptr) const
Definition ExpressionParser.cpp:213
CORE_API int32 GetPosition() const
Definition ExpressionParser.cpp:52
CORE_API bool IsEmpty() const
Definition ExpressionParser.cpp:46
const CharType * GetEnd() const
Definition ExpressionParserTypes.h:174
const CharType * GetStart() const
Definition ExpressionParserTypes.h:166
Definition ValueOrError.h:58
Definition ExpressionParserTypes.h:21
Definition ExpressionParserTypes.h:27
FExpressionError(const FText &InText)
Definition ExpressionParserTypes.h:28
FText Text
Definition ExpressionParserTypes.h:33
Definition ExpressionParserTypes.h:537
int32 Precedence
Definition ExpressionParserTypes.h:539
bool bCanShortCircuit
Definition ExpressionParserTypes.h:545
FOpParameters(int32 InPrecedence, EAssociativity InAssociativity, bool bInCanShortCircuit)
Definition ExpressionParserTypes.h:547
EAssociativity Associativity
Definition ExpressionParserTypes.h:542
Definition ExpressionParserTypes.h:295
friend bool operator==(const FOperatorFunctionID &A, const FOperatorFunctionID &B)
Definition ExpressionParserTypes.h:300
FGuid LeftOperandType
Definition ExpressionParserTypes.h:297
FGuid OperatorType
Definition ExpressionParserTypes.h:296
friend uint32 GetTypeHash(const FOperatorFunctionID &In)
Definition ExpressionParserTypes.h:307
FGuid RightOperandType
Definition ExpressionParserTypes.h:298
Definition ExpressionParserTypes.inl:18
Definition ExpressionParserTypes.h:278
TOptional< int32 > ShortCircuitIndex
Definition ExpressionParserTypes.h:290
EType
Definition ExpressionParserTypes.h:280
@ PreUnaryOperator
Definition ExpressionParserTypes.h:280
@ Benign
Definition ExpressionParserTypes.h:280
@ ShortCircuit
Definition ExpressionParserTypes.h:280
@ PostUnaryOperator
Definition ExpressionParserTypes.h:280
@ BinaryOperator
Definition ExpressionParserTypes.h:280
@ Operand
Definition ExpressionParserTypes.h:280
TCompiledToken(EType InType, TExpressionToken< CharType > InToken, TOptional< int32 > InShortCircuitIndex=TOptional< int32 >())
Definition ExpressionParserTypes.h:282
EType Type
Definition ExpressionParserTypes.h:289
Definition ExpressionParserTypes.h:205
Definition ExpressionParserTypes.h:412
virtual FExpressionResult ExecPreUnary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &R) const =0
virtual FExpressionResult ExecBinary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L, const TExpressionToken< CharType > &R) const =0
virtual bool ShouldShortCircuit(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L) const =0
virtual FExpressionResult ExecPostUnary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L) const =0
Definition ExpressionParserTypes.h:424
virtual FExpressionResult ExecPreUnary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &R) const override
Definition ExpressionParserTypes.h:431
virtual FExpressionResult ExecBinary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L, const TExpressionToken< CharType > &R) const override
Definition ExpressionParserTypes.h:439
virtual FExpressionResult ExecPostUnary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L) const override
Definition ExpressionParserTypes.h:435
TOperatorEvaluationEnvironment(const TOperatorJumpTable< ContextType, CharType > &InOperators, const ContextType *InContext)
Definition ExpressionParserTypes.h:425
virtual bool ShouldShortCircuit(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L) const override
Definition ExpressionParserTypes.h:443
Definition ExpressionParserTypes.h:317
FExpressionResult ExecPreUnary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &R, const ContextType *Context) const
Definition ExpressionParserTypes.inl:316
void MapPostUnary(FuncType InFunc)
Definition ExpressionParserTypes.inl:362
FExpressionResult ExecPostUnary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L, const ContextType *Context) const
Definition ExpressionParserTypes.inl:331
bool ShouldShortCircuit(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L, const ContextType *Context) const
Definition ExpressionParserTypes.inl:304
FExpressionResult ExecBinary(const TExpressionToken< CharType > &Operator, const TExpressionToken< CharType > &L, const TExpressionToken< CharType > &R, const ContextType *Context) const
Definition ExpressionParserTypes.inl:288
void MapPreUnary(FuncType InFunc)
Definition ExpressionParserTypes.inl:347
void MapBinary(FuncType InFunc)
Definition ExpressionParserTypes.inl:377
void MapShortCircuit(FuncType InFunc)
Definition ExpressionParserTypes.inl:393
Definition Optional.h:131