diff options
| author | Michael Maltese <michaeljosephmaltese@gmail.com> | 2016-10-11 17:48:38 -0700 |
|---|---|---|
| committer | Michael Maltese <michaeljosephmaltese@gmail.com> | 2017-02-07 22:59:10 -0800 |
| commit | a509f56116d308c96e38898e07d3538f26a1b7af (patch) | |
| tree | 1df255d62c9057cb3b53869afab04e737e96f0e0 /Source/Core/InputCommon/ControlReference/ExpressionParser.h | |
| parent | f621a6af431e53a71890f916dd812ccf987ab429 (diff) | |
InputCommon: Extract ControlReference from ControllerInterface
Better separation of concerns. Relegates `ControllerInterface` to
enumerating input controls, and the new `ControlReference` deals with
combining inputs and configuration expression parsing.
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); +} +} |
