From ea71a76ea965d03ccc600ce070a58b9c335fe63f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 13:50:44 -0500 Subject: [PATCH 1/3] ExpressionParser: Pass control qualifiers by const reference These aren't necessarily cheap to copy, since a control qualifier will have around 3 std::strings inside of it, so passing by value can churn allocations a little bit. --- .../Core/InputCommon/ControlReference/ExpressionParser.cpp | 6 +++--- Source/Core/InputCommon/ControlReference/ExpressionParser.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index c93dcc5c3d..4463118d39 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -600,7 +600,7 @@ private: std::unique_ptr m_rhs; }; -std::shared_ptr ControlEnvironment::FindDevice(ControlQualifier qualifier) const +std::shared_ptr ControlEnvironment::FindDevice(const ControlQualifier& qualifier) const { if (qualifier.has_device) return container.FindDevice(qualifier.device_qualifier); @@ -608,7 +608,7 @@ std::shared_ptr ControlEnvironment::FindDevice(ControlQualifier qualifie return container.FindDevice(default_device); } -Device::Input* ControlEnvironment::FindInput(ControlQualifier qualifier) const +Device::Input* ControlEnvironment::FindInput(const ControlQualifier& qualifier) const { const std::shared_ptr device = FindDevice(qualifier); if (!device) @@ -617,7 +617,7 @@ Device::Input* ControlEnvironment::FindInput(ControlQualifier qualifier) const return device->FindInput(qualifier.control_name); } -Device::Output* ControlEnvironment::FindOutput(ControlQualifier qualifier) const +Device::Output* ControlEnvironment::FindOutput(const ControlQualifier& qualifier) const { const std::shared_ptr device = FindDevice(qualifier); if (!device) diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.h b/Source/Core/InputCommon/ControlReference/ExpressionParser.h index 405445b8a0..bc39762127 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.h +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.h @@ -150,9 +150,9 @@ public: { } - std::shared_ptr FindDevice(ControlQualifier qualifier) const; - Core::Device::Input* FindInput(ControlQualifier qualifier) const; - Core::Device::Output* FindOutput(ControlQualifier qualifier) const; + std::shared_ptr FindDevice(const ControlQualifier& qualifier) const; + Core::Device::Input* FindInput(const ControlQualifier& qualifier) const; + Core::Device::Output* FindOutput(const ControlQualifier& qualifier) const; // Returns an existing variable by the specified name if already existing. Creates it otherwise. std::shared_ptr GetVariablePtr(const std::string& name); From a5bbeb721a0ef622158cef10e5bd080106d23559 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 14:00:17 -0500 Subject: [PATCH 2/3] ExpressionParser: Mark constructors explicit where applicable Makes for consistency with the surrounding code. --- .../Core/InputCommon/ControlReference/ExpressionParser.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index 4463118d39..1c6b00c715 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -438,7 +438,7 @@ protected: class LiteralReal : public LiteralExpression { public: - LiteralReal(ControlState value) : m_value(value) {} + explicit LiteralReal(ControlState value) : m_value(value) {} ControlState GetValue() const override { return m_value; } @@ -460,7 +460,7 @@ static ParseResult MakeLiteralExpression(Token token) class VariableExpression : public Expression { public: - VariableExpression(std::string name) : m_name(name) {} + explicit VariableExpression(std::string name) : m_name(name) {} ControlState GetValue() const override { return m_variable_ptr ? *m_variable_ptr : 0; } @@ -485,7 +485,7 @@ protected: class HotkeyExpression : public Expression { public: - HotkeyExpression(std::vector> inputs) + explicit HotkeyExpression(std::vector> inputs) : m_modifiers(std::move(inputs)) { m_final_input = std::move(m_modifiers.back()); From ded2d55438fa010cd162c9f77d97ad530f89bb24 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 12 Dec 2023 14:03:39 -0500 Subject: [PATCH 3/3] ExpressionParser: Avoid some miscellaneous copies Just some trivial copies that can be eliminated or turned into moves. --- .../Core/InputCommon/ControlReference/ExpressionParser.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index 1c6b00c715..414a5aa888 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -248,7 +248,7 @@ ParseStatus Lexer::Tokenize(std::vector& tokens) class ControlExpression : public Expression { public: - explicit ControlExpression(ControlQualifier qualifier) : m_qualifier(qualifier) {} + explicit ControlExpression(ControlQualifier qualifier) : m_qualifier(std::move(qualifier)) {} ControlState GetValue() const override { @@ -448,7 +448,7 @@ private: const ControlState m_value{}; }; -static ParseResult MakeLiteralExpression(Token token) +static ParseResult MakeLiteralExpression(const Token& token) { ControlState val{}; if (TryParse(token.data, &val)) @@ -460,7 +460,7 @@ static ParseResult MakeLiteralExpression(Token token) class VariableExpression : public Expression { public: - explicit VariableExpression(std::string name) : m_name(name) {} + explicit VariableExpression(std::string name) : m_name(std::move(name)) {} ControlState GetValue() const override { return m_variable_ptr ? *m_variable_ptr : 0; }