summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference/ExpressionParser.h
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2018-12-30 16:06:29 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2019-10-11 17:14:32 -0500
commite896835f86e52051b1998a344549dfa8ba79847a (patch)
tree3dd3d8523f1804400dc70550188cf6a932a0af3b /Source/Core/InputCommon/ControlReference/ExpressionParser.h
parent1efcf861ead76bbffb4ac22726d799975146707c (diff)
ExpressionParser: Renamed ControlFinder to ControlEnvironment. Added support for variables and assignment operator. ControlExpression objects now reference a matching input and output so the two can me mixed in any expression. (you can set rumble directly from inputs)
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/ExpressionParser.h')
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.h b/Source/Core/InputCommon/ControlReference/ExpressionParser.h
index 0a42d90c62..d9f7a5eb2b 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.h
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.h
@@ -4,6 +4,7 @@
#pragma once
+#include <map>
#include <memory>
#include <string>
#include <utility>
@@ -46,21 +47,26 @@ public:
}
};
-class ControlFinder
+class ControlEnvironment
{
public:
- ControlFinder(const Core::DeviceContainer& container_, const Core::DeviceQualifier& default_,
- const bool is_input_)
- : container(container_), default_device(default_), is_input(is_input_)
+ using VariableContainer = std::map<std::string, ControlState>;
+
+ ControlEnvironment(const Core::DeviceContainer& container_, const Core::DeviceQualifier& default_,
+ VariableContainer& vars)
+ : m_variables(vars), container(container_), default_device(default_)
{
}
+
std::shared_ptr<Core::Device> FindDevice(ControlQualifier qualifier) const;
- Core::Device::Control* FindControl(ControlQualifier qualifier) const;
+ Core::Device::Input* FindInput(ControlQualifier qualifier) const;
+ Core::Device::Output* FindOutput(ControlQualifier qualifier) const;
+ ControlState* GetVariablePtr(const std::string& name);
private:
+ VariableContainer& m_variables;
const Core::DeviceContainer& container;
const Core::DeviceQualifier& default_device;
- bool is_input;
};
class Expression
@@ -70,7 +76,7 @@ public:
virtual ControlState GetValue() const = 0;
virtual void SetValue(ControlState state) = 0;
virtual int CountNumControls() const = 0;
- virtual void UpdateReferences(ControlFinder& finder) = 0;
+ virtual void UpdateReferences(ControlEnvironment& finder) = 0;
virtual operator std::string() const = 0;
};