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