From d2821e14fa9735ece3be6eec9d6bdf4cf96c1280 Mon Sep 17 00:00:00 2001 From: Michael M Date: Wed, 7 Jun 2017 14:53:41 -0700 Subject: ParseExpression: return a std::pair --- Source/Core/InputCommon/ControlReference/ControlReference.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/InputCommon/ControlReference/ControlReference.cpp') diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp index e4162e22a7..e5e4c1a578 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp +++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp @@ -30,9 +30,9 @@ bool ControlReference::InputGateOn() void ControlReference::UpdateReference(const ciface::Core::DeviceContainer& devices, const ciface::Core::DeviceQualifier& default_device) { - Expression* expr; ControlFinder finder(devices, default_device, IsInput()); - m_parse_status = ParseExpression(expression, finder, &expr); + Expression* expr; + std::tie(m_parse_status, expr) = ParseExpression(expression, finder); m_parsed_expression.reset(expr); } -- cgit v1.2.3 From 3df945f8d0c34677b009c210dd0400b2e9655024 Mon Sep 17 00:00:00 2001 From: Michael M Date: Wed, 7 Jun 2017 15:29:00 -0700 Subject: ExpressionParser: replace bare pointers with unique_ptrs --- Source/Core/InputCommon/ControlReference/ControlReference.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'Source/Core/InputCommon/ControlReference/ControlReference.cpp') diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp index e5e4c1a578..92577496c5 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp +++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp @@ -31,9 +31,7 @@ void ControlReference::UpdateReference(const ciface::Core::DeviceContainer& devi const ciface::Core::DeviceQualifier& default_device) { ControlFinder finder(devices, default_device, IsInput()); - Expression* expr; - std::tie(m_parse_status, expr) = ParseExpression(expression, finder); - m_parsed_expression.reset(expr); + std::tie(m_parse_status, m_parsed_expression) = ParseExpression(expression, finder); } int ControlReference::BoundCount() const -- cgit v1.2.3 From 7e74961eb150f28a56405403335f4904f888e058 Mon Sep 17 00:00:00 2001 From: Michael M Date: Wed, 7 Jun 2017 17:30:07 -0700 Subject: ExpressionParser: expose ExpressionNode directly --- Source/Core/InputCommon/ControlReference/ControlReference.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControlReference/ControlReference.cpp') diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp index 92577496c5..09bcdaa59f 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp +++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp @@ -37,7 +37,7 @@ void ControlReference::UpdateReference(const ciface::Core::DeviceContainer& devi int ControlReference::BoundCount() const { if (m_parsed_expression) - return m_parsed_expression->num_controls; + return m_parsed_expression->CountNumControls(); else return 0; } -- cgit v1.2.3 From c332580b83ea8cd5650d53378843ceadcbfeb9cb Mon Sep 17 00:00:00 2001 From: Michael M Date: Wed, 7 Jun 2017 18:48:17 -0700 Subject: ControlReference/ExpressionParser: separate parsing from binding --- Source/Core/InputCommon/ControlReference/ControlReference.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/ControlReference/ControlReference.cpp') diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp index 09bcdaa59f..e53c5c3877 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp +++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp @@ -31,7 +31,9 @@ void ControlReference::UpdateReference(const ciface::Core::DeviceContainer& devi const ciface::Core::DeviceQualifier& default_device) { ControlFinder finder(devices, default_device, IsInput()); - std::tie(m_parse_status, m_parsed_expression) = ParseExpression(expression, finder); + std::tie(m_parse_status, m_parsed_expression) = ParseExpression(expression); + if (m_parsed_expression) + m_parsed_expression->UpdateReferences(finder); } int ControlReference::BoundCount() const -- cgit v1.2.3 From 31f1c062264fcf8628e3a13c44de893d4bac0aa0 Mon Sep 17 00:00:00 2001 From: Michael M Date: Wed, 7 Jun 2017 19:02:16 -0700 Subject: ControlReference: don't reparse expression when references are updated --- .../Core/InputCommon/ControlReference/ControlReference.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'Source/Core/InputCommon/ControlReference/ControlReference.cpp') 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) { } -- cgit v1.2.3