Chromium Code Reviews| Index: device/bluetooth/bluetooth_adapter_win.cc |
| diff --git a/device/bluetooth/bluetooth_adapter_win.cc b/device/bluetooth/bluetooth_adapter_win.cc |
| index 1bacaacf9b369bc692758ba72d4a1a483fdca2f0..38e10534e17ead65b5ec720b32465b7a29cb0730 100644 |
| --- a/device/bluetooth/bluetooth_adapter_win.cc |
| +++ b/device/bluetooth/bluetooth_adapter_win.cc |
| @@ -227,14 +227,15 @@ void BluetoothAdapterWin::AdapterStateChanged( |
| } |
| void BluetoothAdapterWin::DevicesPolled( |
| - const ScopedVector<BluetoothTaskManagerWin::DeviceState>& devices) { |
| + const std::vector<std::unique_ptr<BluetoothTaskManagerWin::DeviceState>>& |
| + devices) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| // We are receiving a new list of all devices known to the system. Merge this |
| // new list with the list we know of (|devices_|) and raise corresponding |
| // DeviceAdded, DeviceRemoved and DeviceChanged events. |
| - typedef std::set<std::string> DeviceAddressSet; |
| + using DeviceAddressSet = std::set<std::string>; |
| DeviceAddressSet known_devices; |
| for (DevicesMap::const_iterator iter = devices_.begin(); |
| iter != devices_.end(); |
| @@ -243,11 +244,8 @@ void BluetoothAdapterWin::DevicesPolled( |
| } |
| DeviceAddressSet new_devices; |
| - for (ScopedVector<BluetoothTaskManagerWin::DeviceState>::const_iterator iter = |
| - devices.begin(); |
| - iter != devices.end(); |
| - ++iter) { |
| - new_devices.insert((*iter)->address); |
| + for (auto& device : devices) { |
| + new_devices.insert(device->address); |
| } |
| // Process device removal first |
| @@ -256,8 +254,12 @@ void BluetoothAdapterWin::DevicesPolled( |
| for (DeviceAddressSet::const_iterator iter = removed_devices.begin(); |
| iter != removed_devices.end(); |
| ++iter) { |
| - std::unique_ptr<BluetoothDevice> device_win = |
| - devices_.take_and_erase(*iter); |
| + auto found = devices_.find(*iter); |
| + if (found == devices_.end()) { |
| + continue; |
| + } |
|
Reilly Grant (use Gerrit)
2016/12/21 22:25:13
nit: no curly braces around single-line ifs.
dougt
2016/12/22 01:18:02
Done.
|
| + auto device_win = std::move(found->second); |
| + devices_.erase(*iter); |
| for (auto& observer : observers_) |
| observer.DeviceRemoved(this, device_win.get()); |
| } |
| @@ -267,25 +269,23 @@ void BluetoothAdapterWin::DevicesPolled( |
| base::STLSetDifference<DeviceAddressSet>(new_devices, known_devices); |
| DeviceAddressSet changed_devices = |
| base::STLSetIntersection<DeviceAddressSet>(known_devices, new_devices); |
| - for (ScopedVector<BluetoothTaskManagerWin::DeviceState>::const_iterator iter = |
| - devices.begin(); |
| - iter != devices.end(); |
| - ++iter) { |
| - BluetoothTaskManagerWin::DeviceState* device_state = (*iter); |
| + for (auto& device_state : devices) { |
| if (added_devices.find(device_state->address) != added_devices.end()) { |
| - BluetoothDeviceWin* device_win = |
| + auto device_win = |
|
Reilly Grant (use Gerrit)
2016/12/21 22:25:13
auto*, in clang we have a plugin that prevents aut
dougt
2016/12/22 01:18:02
Done.
|
| new BluetoothDeviceWin(this, *device_state, ui_task_runner_, |
| socket_thread_, NULL, net::NetLogSource()); |
| - devices_.set(device_state->address, |
| - std::unique_ptr<BluetoothDevice>(device_win)); |
| + auto insertion = devices_.insert( |
| + std::make_pair(device_state->address, std::move(device_win))); |
| + if (!insertion.second) |
| + continue; |
|
Reilly Grant (use Gerrit)
2016/12/21 22:25:13
The previous code used set and so didn't care abou
dougt
2016/12/22 01:18:02
Sadly, I need insert() instead of set because I wa
|
| for (auto& observer : observers_) |
| - observer.DeviceAdded(this, device_win); |
| + observer.DeviceAdded(this, insertion.first->second.get()); |
| } else if (changed_devices.find(device_state->address) != |
| changed_devices.end()) { |
| DevicesMap::const_iterator iter = devices_.find(device_state->address); |
| DCHECK(iter != devices_.end()); |
| BluetoothDeviceWin* device_win = |
| - static_cast<BluetoothDeviceWin*>(iter->second); |
| + static_cast<BluetoothDeviceWin*>(iter->second.get()); |
| if (!device_win->IsEqual(*device_state)) { |
| device_win->Update(*device_state); |
| for (auto& observer : observers_) |