1 // Copyright 2019 Dolphin Emulator Project 2 // Licensed under GPLv2+ 3 // Refer to the license.txt file included. 4 5 #pragma once 6 7 #include <memory> 8 #include <string> 9 #include <string_view> 10 #include <variant> 11 #include <vector> 12 13 #include "Common/CommonTypes.h" 14 #include "InputCommon/ControlReference/ExpressionParser.h" 15 16 namespace ciface::ExpressionParser 17 { 18 constexpr ControlState CONDITION_THRESHOLD = 0.5; 19 20 class FunctionExpression : public Expression 21 { 22 public: 23 struct ArgumentsAreValid 24 { 25 }; 26 27 struct ExpectedArguments 28 { 29 std::string text; 30 }; 31 32 using ArgumentValidation = std::variant<ArgumentsAreValid, ExpectedArguments>; 33 34 int CountNumControls() const override; 35 void UpdateReferences(ControlEnvironment& env) override; 36 37 ArgumentValidation SetArguments(std::vector<std::unique_ptr<Expression>>&& args); 38 39 void SetValue(ControlState value) override; 40 41 protected: 42 virtual ArgumentValidation 43 ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) = 0; 44 45 Expression& GetArg(u32 number); 46 const Expression& GetArg(u32 number) const; 47 u32 GetArgCount() const; 48 49 private: 50 std::vector<std::unique_ptr<Expression>> m_args; 51 }; 52 53 std::unique_ptr<FunctionExpression> MakeFunctionExpression(std::string_view name); 54 55 } // namespace ciface::ExpressionParser 56