Files
UnrealEngine/Engine/Source/Runtime/TimeManagement/Public/FrameNumberTimeEvaluator.h
2025-05-18 13:04:45 +08:00

44 lines
2.3 KiB
C

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreTypes.h"
#include "Math/BasicMathExpressionEvaluator.h"
#include "Misc/ExpressionParserTypes.h"
#include "Misc/Optional.h"
#include "Templates/ValueOrError.h"
struct FFrameRate;
struct FFrameTime;
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FHour, 0x702443E8, 0xEF9A48A0, 0x8DC56394, 0x48F2632A);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FMinute, 0x4FED0D41, 0x298D481C, 0xAC022899, 0xF196E817);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FSecond, 0x43365BB1, 0x9A6B457E, 0xA6C71BB3, 0xCE6D5ACD);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FMillisecond, 0xBFA9E4FB, 0x45799275, 0x0EFA76E3, 0x76E3533F);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FFrames, 0xA0D341C4, 0xA51D40D3, 0xA9DBDD45, 0x83E1A21A);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FTimecodeDelimiter, 0x6E947008, 0x523D4A17, 0xB5F7BCDA, 0xA43B62FC);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FDropcodeDelimiter, 0x80AF2C2C, 0x544A451F, 0x822E5B24, 0xAFC78EEF);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FBracketStart, 0xA7358BD1, 0xB4EF466D, 0xA336CD84, 0x14C93D2E);
DEFINE_EXPRESSION_OPERATOR_NODE(TIMEMANAGEMENT_API, FBracketEnd, 0xE49500E9, 0x03E64440, 0x87802630, 0xF1C1DDDF);
struct FFrameNumberTimeEvaluator
{
/** Constructor that sets up the parser's lexer and compiler */
TIMEMANAGEMENT_API FFrameNumberTimeEvaluator();
/** Evaluate the given expression, resulting in either a double value, or an error */
TIMEMANAGEMENT_API TValueOrError<FFrameTime, FExpressionError> EvaluateTimecode(const TCHAR* InExpression, const FFrameRate& InDisplayFrameRate, const FFrameRate& InTickResolution, bool& OutDirectlyParsed) const;
TIMEMANAGEMENT_API TValueOrError<FFrameTime, FExpressionError> EvaluateFrame(const TCHAR* InExpression, const FFrameRate& InDisplayFrameRate, const FFrameRate& InTickResolution, bool& OutDirectlyParsed) const;
TIMEMANAGEMENT_API TValueOrError<FFrameTime, FExpressionError> EvaluateTime(const TCHAR* InExpression, FFrameRate InFrameRate, bool& OutDirectlyParsed) const;
FTokenDefinitions TimecodeTokenDefinitions;
FTokenDefinitions FrameTokenDefinitions;
FTokenDefinitions TimeTokenDefinitions;
FExpressionGrammar FrameGrammar;
FExpressionGrammar TimecodeGrammar;
FExpressionGrammar TimeGrammar;
FOperatorJumpTable TimeJumpTable;
};