OBT::ServiceManager Class Reference

Plugins can add services to the ServiceManager, these services can later be used without knowing their implementation. More...

#include <OBTServiceManager.h>

Collaboration diagram for OBT::ServiceManager:

Collaboration graph
[legend]

List of all members.

Private Types

typedef std::map
< std::string,
std::map< unsigned
int, IService * > > 
ServicesMap
 Registered services.

Private Member Functions

 ServiceManager ()
 ServiceManager (const ServiceManager &)
virtual ~ServiceManager ()
const ServiceManageroperator= (const ServiceManager &)

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 ()
template<class TService>
void addService (TService *service, unsigned int ID=0)
template<class TService>
void removeService (unsigned int ID=0)


Detailed Description

Plugins can add services to the ServiceManager, these services can later be used without knowing their implementation.

Author:
Michaël Rouillé <michael.rouille@gmail.com>
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.


Member Typedef Documentation

typedef std::map< std::string, std::map< unsigned int, IService* > > OBT::ServiceManager::ServicesMap [private]

Registered services.

Definition at line 74 of file OBTServiceManager.h.


Constructor & Destructor Documentation

ServiceManager::ServiceManager (  )  [private]

constructor

Definition at line 8 of file OBTServiceManager.cpp.

00009 {
00010 }

OBT::ServiceManager::ServiceManager ( const ServiceManager  )  [private]

copy constructor

ServiceManager::~ServiceManager (  )  [private, virtual]

destructor

Definition at line 15 of file OBTServiceManager.cpp.

00016 {
00017 }


Member Function Documentation

const ServiceManager& OBT::ServiceManager::operator= ( const ServiceManager  )  [private]

assignment


Friends And Related Function Documentation

friend class Singleton< ServiceManager > [friend]

Definition at line 24 of file OBTServiceManager.h.

template<class TService>
TService* getService ( unsigned int  ID = 0  )  [friend]

Get a service.

Parameters:
TService type of the service to get.
ID id of the service to get.
Returns:
the service if found, NULL otherwise.

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         }

template<class TService>
const std::map< unsigned int, IService* >* getServices (  )  [friend]

Get all the services of the given type.

Parameters:
TService type of the services to get.
Returns:
the service if found, NULL otherwise.

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         }

template<class TService>
void addService ( TService *  service,
unsigned int  ID = 0 
) [friend]

Add a service

Parameters:
service to add.
Exceptions:
[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         }

template<class TService>
void removeService ( unsigned int  ID = 0  )  [friend]

Remove a service

Exceptions:
[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         }


Member Data Documentation

ServicesMap OBT::ServiceManager::_services [private]

Definition at line 76 of file OBTServiceManager.h.


Generated on Wed Oct 1 11:34:19 2008 for OBT by  doxygen 1.5.3