summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControlReference
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2020-02-16 13:09:12 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2020-09-25 22:51:33 -0500
commit44927da420e8715cf041a50a38de08bc649e6685 (patch)
treee7c175dfe38573e5043a1358512d90a617bf7494 /Source/Core/InputCommon/ControlReference
parent48b76ff90f62183d5ad25a33ce9855b22e33dd97 (diff)
ExpressionParser: Replace ScopeGuard with custom deleter unique_ptr.
Diffstat (limited to 'Source/Core/InputCommon/ControlReference')
-rw-r--r--Source/Core/InputCommon/ControlReference/ExpressionParser.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
index cbc4a1462b..7636f6f1aa 100644
--- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
+++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp
@@ -15,7 +15,6 @@
#include "Common/Common.h"
#include "Common/Logging/Log.h"
-#include "Common/ScopeGuard.h"
#include "Common/StringUtil.h"
#include "InputCommon/ControlReference/ExpressionParser.h"
@@ -31,7 +30,17 @@ class HotkeySuppressions
{
public:
using Modifiers = std::vector<std::unique_ptr<ControlExpression>>;
- using Suppressor = std::unique_ptr<Common::ScopeGuard>;
+
+ struct InvokingDeleter
+ {
+ template <typename T>
+ void operator()(T* func)
+ {
+ (*func)();
+ }
+ };
+
+ using Suppressor = std::unique_ptr<std::function<void()>, InvokingDeleter>;
bool IsSuppressed(Device::Input* input) const
{
@@ -309,10 +318,11 @@ HotkeySuppressions::MakeSuppressor(const Modifiers* modifiers,
for (auto& modifier : *modifiers)
++m_suppressions[{(*final_input)->GetInput(), modifier->GetInput()}];
- return std::make_unique<Common::ScopeGuard>([this, modifiers, final_input]() {
- for (auto& modifier : *modifiers)
- RemoveSuppression(modifier->GetInput(), (*final_input)->GetInput());
- });
+ return Suppressor(std::make_unique<std::function<void()>>([this, modifiers, final_input]() {
+ for (auto& modifier : *modifiers)
+ RemoveSuppression(modifier->GetInput(), (*final_input)->GetInput());
+ }).release(),
+ InvokingDeleter{});
}
class BinaryExpression : public Expression