diff options
| author | Michael M <mchtly@gmail.com> | 2017-06-07 19:02:16 -0700 |
|---|---|---|
| committer | Michael M <mchtly@gmail.com> | 2017-09-14 12:53:35 -0700 |
| commit | 31f1c062264fcf8628e3a13c44de893d4bac0aa0 (patch) | |
| tree | a15bf2168587e11e257803b69e02f57015f5e4fa /Source/Core/InputCommon/ControlReference | |
| parent | c332580b83ea8cd5650d53378843ceadcbfeb9cb (diff) | |
ControlReference: don't reparse expression when references are updated
Diffstat (limited to 'Source/Core/InputCommon/ControlReference')
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 { |
