diff options
| author | Michael M <mchtly@gmail.com> | 2017-06-07 15:54:59 -0700 |
|---|---|---|
| committer | Michael M <mchtly@gmail.com> | 2017-09-14 12:53:35 -0700 |
| commit | f1ff1e3d084c1dd8ae28f2dd8cc409949e378334 (patch) | |
| tree | 49de80977a266528f5042b7ba009c46f2b4bf992 /Source/Core/InputCommon/ControlReference/ExpressionParser.cpp | |
| parent | 3df945f8d0c34677b009c210dd0400b2e9655024 (diff) | |
ExpressionParser: clean up ControlExpression
Diffstat (limited to 'Source/Core/InputCommon/ControlReference/ExpressionParser.cpp')
| -rw-r--r-- | Source/Core/InputCommon/ControlReference/ExpressionParser.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index 4f498d6f37..277cfb3c70 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -234,19 +234,19 @@ class ControlExpression : public ExpressionNode public: ControlQualifier qualifier; Device::Control* control; + // Keep a shared_ptr to the device so the control pointer doesn't become invalid + std::shared_ptr<Device> m_device; ControlExpression(ControlQualifier qualifier_, std::shared_ptr<Device> device, Device::Control* control_) - : qualifier(qualifier_), control(control_), m_device(device) + : qualifier(qualifier_), control(control_), m_device(std::move(device)) { } ControlState GetValue() const override { return control->ToInput()->GetState(); } void SetValue(ControlState value) override { control->ToOutput()->SetState(value); } int CountNumControls() const override { return 1; } - operator std::string() const override { return "`" + (std::string)qualifier + "`"; } -private: - std::shared_ptr<Device> m_device; + operator std::string() const override { return "`" + static_cast<std::string>(qualifier) + "`"; } }; class BinaryExpression : public ExpressionNode @@ -405,7 +405,7 @@ private: return {ParseStatus::NoDevice, std::make_unique<DummyExpression>(tok.qualifier)}; return {ParseStatus::Successful, - std::make_unique<ControlExpression>(tok.qualifier, device, control)}; + std::make_unique<ControlExpression>(tok.qualifier, std::move(device), control)}; } case TOK_LPAREN: return Paren(); @@ -550,8 +550,8 @@ std::pair<ParseStatus, std::unique_ptr<Expression>> ParseExpression(const std::s if (control) { return std::make_pair(ParseStatus::Successful, - std::make_unique<Expression>( - std::make_unique<ControlExpression>(qualifier, device, control))); + std::make_unique<Expression>(std::make_unique<ControlExpression>( + qualifier, std::move(device), control))); } return ParseExpressionInner(str, finder); |
