Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

kore::ServiceManager Class Reference

class kore::ServiceManager - provides Kore Service management. More...

#include <servicemanager.h>

Inheritance diagram for kore::ServiceManager::

kore::ServiceProvider kore::Module List of all members.

Public Methods

 ServiceManager ()
 Default constructor. More...

virtual ~ServiceManager ()
 Destructor. More...

virtual void registerProvider (ServiceProvider *provider)
 Registers all the services provided by the given ServiceProvider. More...

virtual void unregisterProvider (ServiceProvider *provider)
 Unregisters all the services provided by the given ServiceProvider. More...

virtual void registerProviders (ServiceProvider **providers)
 Registers all the services provided by the given ServiceProviders. More...

virtual void unregisterProviders ()
 Unregisters ALL the Services registered to this ServiceManager. More...

virtual void registerService (const Service *service)
 Registers the given Service to this ServiceManager. More...

virtual void unregisterService (const Service *service)
 Unregisters the given Service from this ServiceManager. More...

virtual void registerServices (const Service **srvs)
 Registers a list of Services to this ServiceManager. More...

virtual void unregisterServices ()
 Unregisters ALL the Services registered to this ServiceManager. More...

virtual const Service ** registeredServices () const
 Gets the list of Services registered to this ServiceManager. More...

virtual const Service ** registeredServices (ServiceProvider *provider) const
 Gets the list of Services provided by the given ServiceProvider AND registered to this ServiceManager. More...

virtual const Service ** registeredServices (const Service *service) const
 Gets the list of Services registered to this ServiceManager AND matching the given Service. More...

virtual const Service ** registeredServices (const char *service) const
 Gets the list of Services registered to this ServiceManager AND matching the given Service name. More...

virtual const Service * registeredService (const Service *service) const
 Gets the first Service best matching the given Service. More...

virtual const Service * registeredService (const char *service) const
 Gets the first Service best matching the given Service name. More...

virtual ServiceProvider ** registeredProviders () const
 Gets the list of ServiceProviders which have Services registered to this ServiceManager. More...

virtual ServiceProvider ** registeredProviders (const Service *service) const
 Gets the list of ServiceProviders which have Services registered to this ServiceManager AND matching the given Service. More...

virtual ServiceProvider ** registeredProviders (const char *service) const
 Gets the list of ServiceProviders which have Services registered to this ServiceManager AND matching the given Service name. More...

virtual ServiceProviderregisteredProvider (const Service *service) const
 Gets the first ServiceProvider which has a Service best matching the given Service. More...

virtual ServiceProviderregisteredProvider (const char *service) const
 Gets the first ServiceProvider which has a Service best matching the given Service name. More...


Private Types

typedef hash_multimap< const
char *, const Service *, hash<
const char *>, eqstr
srv_hash_type
typedef set< ServiceProvider *,
ltptr
sp_set_type

Private Attributes

const Version_smVersion
const Version_smAPIVersion
const Info * _smInfo
const Service * _smService
srv_hash_type _services

Detailed Description

class kore::ServiceManager - provides Kore Service management.

When creating a new ServiceProvider instance, you have to register the services it provides to the ServiceManager, as well as unregister them right before the instance will get destroyed. The ServiceManager can be queried (registered...(...)) for the existing registered Services and ServiceProviders.

Definition at line 27 of file servicemanager.h.


Member Typedef Documentation

typedef set<ServiceProvider* , ltptr> kore::ServiceManager::sp_set_type [private]
 

Definition at line 208 of file servicemanager.h.

Referenced by registeredProviders().

typedef hash_multimap<const char*,const Service*, hash<const char*>, eqstr> kore::ServiceManager::srv_hash_type [private]
 

Definition at line 199 of file servicemanager.h.


Constructor & Destructor Documentation

ServiceManager::ServiceManager  
 

Default constructor.

Creates a new ServiceManager instance.

Definition at line 21 of file servicemanager.cpp.

References _smAPIVersion, _smInfo, _smService, _smVersion, kore::ServiceProvider::addService(), kore::Module::setInfo(), SM_API_MAJOR, SM_API_MINOR, SM_API_REVISION, SM_API_VERSION, SM_DESCRIPTION, SM_MAJOR, SM_MINOR, SM_NAME, SM_REVISION, SM_SERVICE, SM_SERVICE_DESCRIPTION, SM_TYPE, and SM_VERSION.

ServiceManager::~ServiceManager   [virtual]
 

Destructor.

Definition at line 30 of file servicemanager.cpp.

References _services, _smAPIVersion, _smInfo, _smService, _smVersion, unregisterProviders(), and unregisterServices().

00031 {
00032     unregisterServices();
00033     unregisterProviders();
00034     delete _smInfo;
00035     delete _smVersion;
00036     delete _smAPIVersion;
00037     delete _smService;
00038 }


Member Function Documentation

ServiceProvider * ServiceManager::registeredProvider const char *    service const [virtual]
 

Gets the first ServiceProvider which has a Service best matching the given Service name.

Parameters:
service  - the service name to be used for matching.
Returns:
- the first best matching ServiceProvider.

Definition at line 152 of file servicemanager.cpp.

References registeredService(), and kore::ServiceProvider::service().

00153 {
00154     const Service* srv = registeredService(service);
00155     if( srv )
00156         return srv->provider();
00157     else
00158         return 0;
00159 }

ServiceProvider * ServiceManager::registeredProvider const Service *    service const [virtual]
 

Gets the first ServiceProvider which has a Service best matching the given Service.

Parameters:
service  - the service whos name is used for matching.
Returns:
- the first best matching ServiceProvider.

Definition at line 147 of file servicemanager.cpp.

References kore::ServiceProvider::service().

00148 {
00149     return registeredProvider(service->name());
00150 }

ServiceProvider ** ServiceManager::registeredProviders const char *    service const [virtual]
 

Gets the list of ServiceProviders which have Services registered to this ServiceManager AND matching the given Service name.

Parameters:
service  - the service name to be used for matching.
Returns:
- NULL-terminated array containing the ServicesProviders. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 166 of file servicemanager.cpp.

References registeredServices(), kore::ServiceProvider::service(), kore::ServiceProvider::ServiceProvider(), and sp_set_type.

00167 {
00168     sp_set_type sps;
00169     const Service** srvs = registeredServices(service);
00170     int i = 0;
00171     for(i = 0; srvs[i]; i++)
00172         sps.insert(srvs[i]->provider());
00173     delete[] srvs;
00174     int n = sps.size();
00175     ServiceProvider** res = new ServiceProvider*[n+1];
00176     i = 0;
00177     sp_set_type::const_iterator b,e;
00178     b = sps.begin();
00179     e = sps.end();
00180     for( sp_set_type::const_iterator j = b; j != e; ++j, ++i )
00181         res[i] = *j;
00182     res[i] = 0;
00183     return res;
00184 }

ServiceProvider ** ServiceManager::registeredProviders const Service *    service const [virtual]
 

Gets the list of ServiceProviders which have Services registered to this ServiceManager AND matching the given Service.

Parameters:
service  - the service whos name is used for matching.
Returns:
- NULL-terminated array containing the ServicesProviders. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 161 of file servicemanager.cpp.

References registeredProviders(), and kore::ServiceProvider::service().

00162 {
00163     return registeredProviders(service->name());
00164 }

ServiceProvider ** ServiceManager::registeredProviders   const [virtual]
 

Gets the list of ServiceProviders which have Services registered to this ServiceManager.

Returns:
- NULL-terminated array containing the ServicesProviders. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 186 of file servicemanager.cpp.

References registeredServices(), kore::ServiceProvider::ServiceProvider(), and sp_set_type.

Referenced by registeredProviders(), and unregisterProviders().

00187 {
00188     sp_set_type sps;
00189     const Service** srvs = registeredServices();
00190     int i = 0;
00191     for(i = 0; srvs[i]; i++)
00192         sps.insert(srvs[i]->provider());
00193     delete[] srvs;
00194     int n = sps.size();
00195     ServiceProvider** res = new ServiceProvider*[n+1];
00196     i = 0;
00197     sp_set_type::const_iterator b,e;
00198     b = sps.begin();
00199     e = sps.end();
00200     for( sp_set_type::const_iterator j = b; j != e; ++j, ++i )
00201         res[i] = *j;
00202     res[i] = 0;
00203     return res;
00204 }

const ServiceProvider::Service * ServiceManager::registeredService const char *    service const [virtual]
 

Gets the first Service best matching the given Service name.

Parameters:
service  - the service name to be used for matching.
Returns:
- the first best matching Service.

Definition at line 139 of file servicemanager.cpp.

References _services, and kore::ServiceProvider::service().

00140 {
00141     pair<srv_hash_type::const_iterator, srv_hash_type::const_iterator> p = _services.equal_range(service);
00142     for( srv_hash_type::const_iterator j = p.first; j != p.second; ++j)
00143         return j->second;
00144     return 0;
00145 }

const ServiceProvider::Service * ServiceManager::registeredService const Service *    service const [virtual]
 

Gets the first Service best matching the given Service.

Parameters:
service  - the service whos name is used for matching.
Returns:
- the first best matching Service.

Definition at line 134 of file servicemanager.cpp.

References kore::ServiceProvider::service().

Referenced by registeredProvider().

00135 {
00136     return registeredService(service->name());
00137 }

const ServiceProvider::Service ** ServiceManager::registeredServices const char *    service const [virtual]
 

Gets the list of Services registered to this ServiceManager AND matching the given Service name.

Parameters:
service  - the service name to be used for matching.
Returns:
- NULL-terminated array containing the Services. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 122 of file servicemanager.cpp.

References _services, and kore::ServiceProvider::service().

00123 {
00124     int n = _services.count(service);
00125     const Service** srvs = new const Service*[n+1];
00126     pair<srv_hash_type::const_iterator, srv_hash_type::const_iterator> p = _services.equal_range(service);
00127     int i = 0;
00128     for( srv_hash_type::const_iterator j = p.first; j != p.second; ++j, ++i )
00129         srvs[i] = j->second;
00130     srvs[i] = 0;
00131     return srvs;
00132 }

const ServiceProvider::Service ** ServiceManager::registeredServices const Service *    service const [virtual]
 

Gets the list of Services registered to this ServiceManager AND matching the given Service.

Parameters:
service  - the service whos name is used for matching.
Returns:
- NULL-terminated array containing the Services. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 117 of file servicemanager.cpp.

References registeredServices(), and kore::ServiceProvider::service().

00118 {
00119     return registeredServices(service->name());
00120 }

const ServiceProvider::Service ** ServiceManager::registeredServices ServiceProvider   prov const [virtual]
 

Gets the list of Services provided by the given ServiceProvider AND registered to this ServiceManager.

Parameters:
provider  - the ServiceProvider whos services to be returned.
Returns:
- NULL-terminated array containing the Services. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 99 of file servicemanager.cpp.

References _services.

00100 {
00101     vector<const Service*> srvs;
00102     srv_hash_type::const_iterator b,e;
00103     b = _services.begin();
00104     e = _services.end();
00105     for( srv_hash_type::const_iterator j = b; j != e; ++j )
00106         if( j->second->provider() == prov )
00107             srvs.push_back( j->second );
00108     int n = srvs.size();
00109     const Service** res = new const Service*[n+1];
00110     int i;
00111     for( i= 0; i < n; i++ )
00112         res[i] = srvs[i];
00113     res[i] = 0;
00114     return res;
00115 }

const ServiceProvider::Service ** ServiceManager::registeredServices   const [virtual]
 

Gets the list of Services registered to this ServiceManager.

Returns:
- NULL-terminated array containing all the Services registered to this ServiceManager. Please note that it's the user's responsability to delete[] the returned array when it's no longer needed.

Definition at line 85 of file servicemanager.cpp.

References _services.

Referenced by registeredProviders(), registeredServices(), and unregisterServices().

00086 {
00087     int n = _services.size();
00088     const Service** srvs = new const Service*[n+1];
00089     srv_hash_type::const_iterator b,e;
00090     b = _services.begin();
00091     e = _services.end();
00092     int i = 0;
00093     for( srv_hash_type::const_iterator j = b; j != e; ++j, ++i )
00094         srvs[i] = j->second;
00095     srvs[i] = 0;
00096     return srvs;
00097 }

void ServiceManager::registerProvider ServiceProvider   provider [virtual]
 

Registers all the services provided by the given ServiceProvider.

Parameters:
provider  - the ServiceProvider whos services to be registered.

Definition at line 65 of file servicemanager.cpp.

References registerService().

Referenced by registerProviders().

00066 {
00067     provider->registeringProvider(this);
00068     const Service** srvs = provider->services();
00069     for(int i=0; srvs[i]; i++)
00070         registerService(srvs[i]);
00071     delete[] srvs;
00072     provider->providerRegistered(this);
00073 }

void ServiceManager::registerProviders ServiceProvider **    providers [virtual]
 

Registers all the services provided by the given ServiceProviders.

Parameters:
providers  - NULL-teminated array with ServiceProviders whos services to be registered.

Definition at line 219 of file servicemanager.cpp.

References registerProvider().

00220 {
00221     for( int i = 0; providers[i]; i++ )
00222         registerProvider(providers[i]);
00223 }

virtual void kore::ServiceManager::registerService const Service *    service [virtual]
 

Registers the given Service to this ServiceManager.

Parameters:
service  - the Service to be registered.

Referenced by registerProvider(), and registerServices().

void ServiceManager::registerServices const Service **    srvs [virtual]
 

Registers a list of Services to this ServiceManager.

Parameters:
srvs  - NULL-terminated array of Services to be registered.

Definition at line 206 of file servicemanager.cpp.

References registerService().

00207 {
00208     for( int i = 0; srvs[i]; i++ )
00209         registerService(srvs[i]);
00210 }

void ServiceManager::unregisterProvider ServiceProvider   provider [virtual]
 

Unregisters all the services provided by the given ServiceProvider.

Parameters:
provider  - the ServiceProvider whos services to be unregistered.

Definition at line 75 of file servicemanager.cpp.

References unregisterService().

Referenced by unregisterProviders().

00076 {
00077     provider->unregisteringProvider(this);
00078     const Service** srvs = provider->services();
00079     for(int i=0; srvs[i]; i++)
00080         unregisterService(srvs[i]);
00081     delete[] srvs;
00082     provider->providerUnregistered(this);
00083 }

void ServiceManager::unregisterProviders   [virtual]
 

Unregisters ALL the Services registered to this ServiceManager.

Definition at line 224 of file servicemanager.cpp.

References registeredProviders(), kore::ServiceProvider::ServiceProvider(), and unregisterProvider().

Referenced by ~ServiceManager().

00225 {
00226     ServiceProvider** srvs = registeredProviders();
00227     for(int i = 0; srvs[i]; i++)
00228         unregisterProvider(srvs[i]);
00229     delete[] srvs;
00230 }

virtual void kore::ServiceManager::unregisterService const Service *    service [virtual]
 

Unregisters the given Service from this ServiceManager.

Parameters:
service  - the Service to be unregistered.

Referenced by unregisterProvider(), and unregisterServices().

void ServiceManager::unregisterServices   [virtual]
 

Unregisters ALL the Services registered to this ServiceManager.

Definition at line 211 of file servicemanager.cpp.

References registeredServices(), and unregisterService().

Referenced by ~ServiceManager().

00212 {
00213     const Service** srvs = registeredServices();
00214     for(int i = 0; srvs[i]; i++)
00215         unregisterService(srvs[i]);
00216     delete[] srvs;
00217 }


Member Data Documentation

srv_hash_type kore::ServiceManager::_services [private]
 

Reimplemented from kore::ServiceProvider.

Definition at line 212 of file servicemanager.h.

Referenced by registeredService(), registeredServices(), and ~ServiceManager().

const Version* kore::ServiceManager::_smAPIVersion [private]
 

Definition at line 175 of file servicemanager.h.

Referenced by ServiceManager(), and ~ServiceManager().

const Info* kore::ServiceManager::_smInfo [private]
 

Definition at line 177 of file servicemanager.h.

Referenced by ServiceManager(), and ~ServiceManager().

const Service* kore::ServiceManager::_smService [private]
 

Definition at line 179 of file servicemanager.h.

Referenced by ServiceManager(), and ~ServiceManager().

const Version* kore::ServiceManager::_smVersion [private]
 

Definition at line 173 of file servicemanager.h.

Referenced by ServiceManager(), and ~ServiceManager().


The documentation for this class was generated from the following files:
Generated on Thu Feb 14 12:01:21 2002 for Korelib by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001