summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@innovatetechnologi.es>2016-07-14 17:45:59 +0200
committerLéo Lam <leo@innovatetechnologi.es>2016-07-29 17:18:37 +0200
commit93f5df419521171c11e16d6a8ff84b9d0d8fd6c0 (patch)
treef0d915225a6221acc88716b6f7f8c62a1963fc7a /Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
parent0d783f0869eaef163a318ab4d79744f592ed1cc5 (diff)
ControllerInterface: Add RemoveDevice()
This adds RemoveDevice() to ControllerInterface, fixes ExpressionParser and some other code to support device removals without crashing, and adds an IsValid() method to Device, to prepare for hotplugging.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
index cc80b7b234..cf726698f1 100644
--- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
@@ -160,6 +160,14 @@ void ControllerInterface::AddDevice(std::shared_ptr<ciface::Core::Device> device
m_devices.emplace_back(std::move(device));
}
+void ControllerInterface::RemoveDevice(std::function<bool(const ciface::Core::Device*)> callback)
+{
+ std::lock_guard<std::mutex> lk(m_devices_mutex);
+ m_devices.erase(std::remove_if(m_devices.begin(), m_devices.end(),
+ [&callback](const auto& dev) { return callback(dev.get()); }),
+ m_devices.end());
+}
+
//
// UpdateInput
//