Plugins can add services to the ServiceManager, these services can later be used without knowing their implementation. More...
#include <OBTServiceManager.h>
Private Types | |
typedef std::map< std::string, std::map< unsigned int, IService * > > | ServicesMap |
Registered services. | |
Private Member Functions | |
ServiceManager () | |
constructor | |
ServiceManager (const ServiceManager &) | |
copy constructor | |
virtual | ~ServiceManager () |
destructor | |
const ServiceManager & | operator= (const ServiceManager &) |
assignment | |
Private Attributes | |
ServicesMap | _services |
Friends | |
class | Singleton< ServiceManager > |
template<class TService > | |
TService * | getService (unsigned int ID=0) |
Get a service. | |
template<class TService > | |
const std::map< unsigned int, IService * > * | getServices () |
Get all the services of the given type. | |
template<class TService > | |
void | addService (TService *service, unsigned int ID=0) |
Add a service. | |
template<class TService > | |
void | removeService (unsigned int ID=0) |
Remove a service. |
Plugins can add services to the ServiceManager, these services can later be used without knowing their implementation.
Loaded plugins can add services the ServiceManager. One service interface may be realized by several implementation classes. A user of this service can then choose between these implementations, according to a specific criterion (e.g file extension for a loader). Services have to be queried via a call to ServiceManager
Definition at line 22 of file OBTServiceManager.h.
typedef std::map< std::string, std::map< unsigned int, IService* > > OBT::ServiceManager::ServicesMap [private] |
Registered services.
Definition at line 74 of file OBTServiceManager.h.
ServiceManager::ServiceManager | ( | ) | [private] |
OBT::ServiceManager::ServiceManager | ( | const ServiceManager & | ) | [private] |
copy constructor
ServiceManager::~ServiceManager | ( | ) | [private, virtual] |
const ServiceManager& OBT::ServiceManager::operator= | ( | const ServiceManager & | ) | [private] |
assignment
void addService | ( | TService * | service, | |
unsigned int | ID = 0 | |||
) | [friend] |
Add a service.
service | to add. |
[DEBUG | ONLY] if service is null |
Definition at line 125 of file OBTServiceManager.h.
00126 { 00127 OBT_DBG_ASSERT( service != NULL ) ; 00128 ServiceManager::ServicesMap::mapped_type& serviceMap 00129 ( Singleton< ServiceManager >::getInstance()._services[ typeid( TService ).name() ] ) ; 00130 serviceMap[ ID ] = service ; 00131 }
TService* getService | ( | unsigned int | ID = 0 |
) | [friend] |
Get a service.
TService | type of the service to get. | |
ID | id of the service to get. |
Definition at line 85 of file OBTServiceManager.h.
00086 { 00087 ServiceManager::ServicesMap& services( Singleton< ServiceManager >::getInstance()._services ) ; 00088 ServiceManager::ServicesMap::iterator servicesIte( services.find( typeid( TService ).name() ) ) ; 00089 if ( servicesIte != services.end() ) 00090 { 00091 std::map< unsigned int, IService* >::iterator ite( servicesIte->second.find( ID ) ) ; 00092 if ( ite != servicesIte->second.end() ) 00093 { 00094 return static_cast<TService*>( ite->second ) ; 00095 } 00096 } 00097 TRACE_WARNING( "The following service was not found : " << typeid( TService ).name() << " with id " << ID ) ; 00098 return NULL ; 00099 }
const std::map< unsigned int, IService* >* getServices | ( | ) | [friend] |
Get all the services of the given type.
TService | type of the services to get. |
Definition at line 105 of file OBTServiceManager.h.
00106 { 00107 const std::map< unsigned int, IService* >* servicesFound = 0 ; 00108 ServiceManager::ServicesMap& services( Singleton< ServiceManager >::getInstance()._services ) ; 00109 ServiceManager::ServicesMap::const_iterator servicesIte( services.find( typeid( TService ).name() ) ) ; 00110 if ( servicesIte != services.end() ) 00111 { 00112 servicesFound = &servicesIte->second ; 00113 } 00114 else 00115 { 00116 TRACE_WARNING( "The following services was not found : " << typeid( TService ).name() ) ; 00117 } 00118 return servicesFound ; 00119 }
void removeService | ( | unsigned int | ID = 0 |
) | [friend] |
Remove a service.
[DEBUG | ONLY] if service is null |
Definition at line 137 of file OBTServiceManager.h.
00138 { 00139 ServiceManager::ServicesMap::iterator servicesIte 00140 ( Singleton< ServiceManager >::getInstance()._services.find( typeid( TService ).name() ) ) ; 00141 if ( servicesIte != Singleton< ServiceManager >::getInstance()._services.end() ) 00142 { 00143 std::map< unsigned int, IService* >::iterator ite( servicesIte->second.find( ID ) ) ; 00144 if ( ite != servicesIte->second.end() ) 00145 { 00146 servicesIte->second.erase( ite ) ; 00147 if ( servicesIte->second.empty() ) 00148 { 00149 Singleton< ServiceManager >::getInstance()._services.erase( servicesIte ) ; 00150 } 00151 } 00152 } 00153 }
friend class Singleton< ServiceManager > [friend] |
Definition at line 24 of file OBTServiceManager.h.
ServicesMap OBT::ServiceManager::_services [private] |
Definition at line 76 of file OBTServiceManager.h.