diff options
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/FunctionExpression.h')
| -rw-r--r-- | Source/Core/InputCommon/ControlReference/FunctionExpression.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.h b/Source/Core/InputCommon/ControlReference/FunctionExpression.h new file mode 100644 index 0000000000..f5332a0d25 --- /dev/null +++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.h @@ -0,0 +1,55 @@ +// Copyright 2019 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <string> +#include <variant> +#include <vector> + +#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<ArgumentsAreValid, ExpectedArguments>; + + int CountNumControls() const override; + void UpdateReferences(ControlEnvironment& env) override; + + ArgumentValidation SetArguments(std::vector<std::unique_ptr<Expression>>&& args); + + void SetValue(ControlState value) override; + +protected: + virtual ArgumentValidation + ValidateArguments(const std::vector<std::unique_ptr<Expression>>& args) = 0; + + Expression& GetArg(u32 number); + const Expression& GetArg(u32 number) const; + u32 GetArgCount() const; + +private: + std::vector<std::unique_ptr<Expression>> m_args; +}; + +std::unique_ptr<FunctionExpression> MakeFunctionExpression(std::string name); + +} // namespace ExpressionParser +} // namespace ciface |
