summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference/ExpressionParser.h
diff options
context:
space:
mode:
authorMichael Maltese <michaeljosephmaltese@gmail.com>2016-10-11 17:48:38 -0700
committerMichael Maltese <michaeljosephmaltese@gmail.com>2017-02-07 22:59:10 -0800
commita509f56116d308c96e38898e07d3538f26a1b7af (patch)
tree1df255d62c9057cb3b53869afab04e737e96f0e0 /Source/Core/InputCommon/ControlReference/ExpressionParser.h
parentf621a6af431e53a71890f916dd812ccf987ab429 (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.h72
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);
+}
+}