FunctionExpression.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright 2019 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include <string>
  6. #include <string_view>
  7. #include <variant>
  8. #include <vector>
  9. #include "Common/CommonTypes.h"
  10. #include "InputCommon/ControlReference/ExpressionParser.h"
  11. namespace ciface::ExpressionParser
  12. {
  13. constexpr ControlState CONDITION_THRESHOLD = 0.5;
  14. class FunctionExpression : public Expression
  15. {
  16. public:
  17. struct ArgumentsAreValid
  18. {
  19. };
  20. struct ExpectedArguments
  21. {
  22. std::string text;
  23. };
  24. using ArgumentValidation = std::variant<ArgumentsAreValid, ExpectedArguments>;
  25. int CountNumControls() const override;
  26. void UpdateReferences(ControlEnvironment& env) override;
  27. void SetArguments(std::vector<std::unique_ptr<Expression>>&& args);
  28. virtual ArgumentValidation ValidateArguments() = 0;
  29. void SetValue(ControlState value) override;
  30. protected:
  31. Expression& GetArg(u32 number);
  32. u32 GetArgCount() const;
  33. private:
  34. std::vector<std::unique_ptr<Expression>> m_args;
  35. };
  36. std::unique_ptr<FunctionExpression> MakeFunctionExpression(std::string_view name);
  37. } // namespace ciface::ExpressionParser