// Copyright 2019 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include #include #include #include "InputCommon/ControlReference/ExpressionParser.h" #include "InputCommon/ControlReference/FunctionExpression.h" namespace ciface { namespace ExpressionParser { class FunctionExpression : public Expression { public: struct ArgumentsAreValid { }; struct ExpectedArguments { std::string text; }; using ArgumentValidation = std::variant; int CountNumControls() const override; void UpdateReferences(ControlEnvironment& env) override; ArgumentValidation SetArguments(std::vector>&& args); void SetValue(ControlState value) override; protected: virtual ArgumentValidation ValidateArguments(const std::vector>& args) = 0; Expression& GetArg(u32 number); const Expression& GetArg(u32 number) const; u32 GetArgCount() const; private: std::vector> m_args; }; std::unique_ptr MakeFunctionExpression(std::string name); } // namespace ExpressionParser } // namespace ciface