summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference
diff options
context:
space:
mode:
authorMichael M <mchtly@gmail.com>2017-06-07 19:02:16 -0700
committerMichael M <mchtly@gmail.com>2017-09-14 12:53:35 -0700
commit31f1c062264fcf8628e3a13c44de893d4bac0aa0 (patch)
treea15bf2168587e11e257803b69e02f57015f5e4fa /Source/Core/InputCommon/ControlReference
parentc332580b83ea8cd5650d53378843ceadcbfeb9cb (diff)
ControlReference: don't reparse expression when references are updated
Diffstat (limited to 'Source/Core/InputCommon/ControlReference')
-rw-r--r--Source/Core/InputCommon/ControlReference/ControlReference.cpp14
-rw-r--r--Source/Core/InputCommon/ControlReference/ControlReference.h4
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.cpp2
3 files changed, 16 insertions, 4 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp
index e53c5c3877..c7d652f15b 100644
--- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp
+++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp
@@ -25,13 +25,12 @@ bool ControlReference::InputGateOn()
// UpdateReference
//
// Updates a controlreference's binded devices/controls
-// need to call this to re-parse a control reference's expression after changing it
+// need to call this to re-bind a control reference after changing its expression
//
void ControlReference::UpdateReference(const ciface::Core::DeviceContainer& devices,
const ciface::Core::DeviceQualifier& default_device)
{
ControlFinder finder(devices, default_device, IsInput());
- std::tie(m_parse_status, m_parsed_expression) = ParseExpression(expression);
if (m_parsed_expression)
m_parsed_expression->UpdateReferences(finder);
}
@@ -49,6 +48,17 @@ ParseStatus ControlReference::GetParseStatus() const
return m_parse_status;
}
+std::string ControlReference::GetExpression() const
+{
+ return m_expression;
+}
+
+void ControlReference::SetExpression(std::string expr)
+{
+ m_expression = std::move(expr);
+ std::tie(m_parse_status, m_parsed_expression) = ParseExpression(m_expression);
+}
+
ControlReference::ControlReference() : range(1), m_parsed_expression(nullptr)
{
}
diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.h b/Source/Core/InputCommon/ControlReference/ControlReference.h
index 48ce6434e1..6740ed8be0 100644
--- a/Source/Core/InputCommon/ControlReference/ControlReference.h
+++ b/Source/Core/InputCommon/ControlReference/ControlReference.h
@@ -34,12 +34,14 @@ public:
ciface::ExpressionParser::ParseStatus GetParseStatus() const;
void UpdateReference(const ciface::Core::DeviceContainer& devices,
const ciface::Core::DeviceQualifier& default_device);
+ std::string GetExpression() const;
+ void SetExpression(std::string expr);
ControlState range;
- std::string expression;
protected:
ControlReference();
+ std::string m_expression;
std::unique_ptr<ciface::ExpressionParser::Expression> m_parsed_expression;
ciface::ExpressionParser::ParseStatus m_parse_status;
};
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
index ce58b0f968..c9cf998ea9 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
@@ -216,7 +216,7 @@ public:
// Keep a shared_ptr to the device so the control pointer doesn't become invalid
std::shared_ptr<Device> m_device;
- ControlExpression(ControlQualifier qualifier_) : qualifier(qualifier_) {}
+ explicit ControlExpression(ControlQualifier qualifier_) : qualifier(qualifier_) {}
ControlState GetValue() const override { return control ? control->ToInput()->GetState() : 0.0; }
void SetValue(ControlState value) override
{