/* * CommDeviceManager.h * * Copyright (C) ST-Ericsson SA 2011 * Authors: Srimanta Panda , * Ola Borgelin , * Karin Hedlund , * Markus Andersson for ST-Ericsson. * License terms: 3-clause BSD license * */ #pragma once #include "CDAL.h" #include "CommDevice.h" #include #ifdef _WIN32 #include #else #include #endif class CommDeviceManager { public: static const std::vector& getAllDevices(); static void destroyDevice(CommDevice* device); static void destroyAll(); template static T* createDevice(U port) { T* device = new T(port); T* existingDevice = dynamic_cast(getDevice(port)); if (0 != existingDevice) { destroyDevice(existingDevice); } devices_.push_back(device); return device; } template static T* getDevice(U port) { T* device; for (std::vector::iterator i = devices_.begin(); i != devices_.end(); ++i) { device = dynamic_cast(*i); if (0 != device && device->getPort() == port) { return device; } } return 0; } private: static std::vector devices_; private: CommDeviceManager() {} CommDeviceManager(const CommDeviceManager&) {} ~CommDeviceManager() {} }; // template specialization used to get device for LCD object mapping template <> inline CommDevice* CommDeviceManager::getDevice(void* object) { for (std::vector::iterator i = devices_.begin(); i != devices_.end(); ++i) { if ((*i)->getObject() == object) { return *i; } } return 0; }