diff options
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/ExpressionParser.h')
| -rw-r--r-- | Source/Core/InputCommon/ControlReference/ExpressionParser.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.h b/Source/Core/InputCommon/ControlReference/ExpressionParser.h new file mode 100644 index 0000000000..2c8f5a793f --- /dev/null +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.h @@ -0,0 +1,72 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <string> +#include "InputCommon/ControllerInterface/Device.h" + +namespace ciface +{ +namespace ExpressionParser +{ +class ControlQualifier +{ +public: + bool has_device; + Core::DeviceQualifier device_qualifier; + std::string control_name; + + ControlQualifier() : has_device(false) {} + operator std::string() + { + if (has_device) + return device_qualifier.ToString() + ":" + control_name; + else + return control_name; + } +}; + +class ControlFinder +{ +public: + ControlFinder(const Core::DeviceContainer& container_, const Core::DeviceQualifier& default_, + const bool is_input_) + : container(container_), default_device(default_), is_input(is_input_) + { + } + std::shared_ptr<Core::Device> FindDevice(ControlQualifier qualifier); + Core::Device::Control* FindControl(ControlQualifier qualifier); + +private: + const Core::DeviceContainer& container; + const Core::DeviceQualifier& default_device; + bool is_input; +}; + +class ExpressionNode; +class Expression +{ +public: + Expression() : node(nullptr) {} + Expression(ExpressionNode* node); + ~Expression(); + ControlState GetValue(); + void SetValue(ControlState state); + int num_controls; + ExpressionNode* node; +}; + +enum ExpressionParseStatus +{ + EXPRESSION_PARSE_SUCCESS = 0, + EXPRESSION_PARSE_SYNTAX_ERROR, + EXPRESSION_PARSE_NO_DEVICE, +}; + +ExpressionParseStatus ParseExpression(const std::string& expr, ControlFinder& finder, + Expression** expr_out); +} +} |
