#include <virtual_sensor.h>
#include <unordered_set>
#include <algorithm>
+#include <memory>
#include <hrm_sensor.h>
sensor_loader::~sensor_loader()
{
- for (auto it = m_handles.begin(); it != m_handles.end(); ++it)
- dlclose(*it);
+ sensor_device_map_t::iterator it_device;
+ std::vector<void *>::iterator it_handle;
+
+ for (it_device = m_devices.begin(); it_device != m_devices.end();)
+ it_device = m_devices.erase(it_device);
+
+ for (it_handle = m_handles.begin(); it_handle != m_handles.end(); ++it_handle)
+ dlclose(*it_handle);
m_handles.clear();
}
for (int i = 0; i < device_size; ++i) {
device = static_cast<sensor_device *>(_devices[i]);
+ std::shared_ptr<sensor_device> device_ptr(device);
- int info_size = device->get_sensors(&infos);
+ int info_size = device_ptr->get_sensors(&infos);
for (int j = 0; j < info_size; ++j)
- m_devices[&infos[j]] = device;
+ m_devices[&infos[j]] = device_ptr;
}
handle = _handle;
for (it = m_devices.begin(); it != m_devices.end(); ++it) {
info = it->first;
- device = it->second;
- if (m_devices[info] == NULL)
- continue;
+ device = it->second.get();
if (type != UNKNOWN_SENSOR) {
if (type != (sensor_type_t)(info->type))
m_sensors.insert(std::make_pair(_type, sensor_ptr));
_I("created [%s] sensor", sensor->get_name());
-
- m_devices[info] = NULL;
}
}
class sensor_base;
typedef std::multimap<sensor_type_t, std::shared_ptr<sensor_base>> sensor_map_t;
-typedef std::map<const sensor_info_t *, sensor_device *> sensor_device_map_t;
+typedef std::map<const sensor_info_t *, std::shared_ptr<sensor_device>> sensor_device_map_t;
class sensor_loader {
private: