diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2016-07-14 10:25:52 +0200 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2016-07-14 10:50:53 +0200 |
| commit | 788e19f54d86ba45cdc83d39c0488b17aa1d00dd (patch) | |
| tree | 38cf7b1db29bbcdb400d717806fb5900ff6bcaed /Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp | |
| parent | 89a03174ccfcc0dc80c9f59b84338f508919a555 (diff) | |
ControllerInterface: Make the ID assigning code common
This makes the device ID assigning code common to all backends, by
moving it to AddDevice() instead of copy-pasting or replicating
the logic in the backends.
Also, to prepare for hotplugging, instead of relying on a name usage
count, the new ID assigning system always starts from ID 0 and tries
to assign the first ID that is not used.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp index cbf2c4dfbb..700d390b92 100644 --- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp @@ -143,6 +143,20 @@ void ControllerInterface::Shutdown() void ControllerInterface::AddDevice(std::shared_ptr<ciface::Core::Device> device) { std::lock_guard<std::mutex> lk(m_devices_mutex); + // Try to find an ID for this device + int id = 0; + while (true) + { + const auto it = std::find_if(m_devices.begin(), m_devices.end(), [&device, &id](const auto& d) { + return d->GetSource() == device->GetSource() && d->GetName() == device->GetName() && + d->GetId() == id; + }); + if (it == m_devices.end()) // no device with the same name with this ID, so we can use it + break; + else + id++; + } + device->SetId(id); m_devices.emplace_back(std::move(device)); } |
