| # Gaudi Framework, version v25r0 |

Home |  | Generated: Mon Feb 17 2014

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ServiceManager.h
Go to the documentation of this file.
1 // $Id: ServiceManager.h,v 1.9 2008/11/10 15:29:09 marcocle Exp $
2 #ifndef GAUDISVC_ServiceManager_H
3 #define GAUDISVC_ServiceManager_H
4
5 // Include files
6 #include "GaudiKernel/Kernel.h"
7 #include "GaudiKernel/ISvcManager.h"
8 #include "GaudiKernel/ISvcLocator.h"
9 #include "GaudiKernel/IStateful.h"
10 #include "GaudiKernel/SmartIF.h"
11 #include "GaudiKernel/ComponentManager.h"
12 #include "GaudiKernel/Map.h"
13 #include <string>
14 #include <list>
15 #include <map>
16 #include <algorithm>
17 #include "boost/thread.hpp"
18
19 // Forward declarations
20 class IService;
21 class IMessageSvc;
22 class Property;
23
36 class ServiceManager : public extends2<ComponentManager, ISvcManager, ISvcLocator>{
37 public:
38
39 struct ServiceItem {
40 ServiceItem(IService *s, long p = 0, bool act = false):
41 service(s), priority(p), active(act) {}
42 SmartIF<IService> service;
43 long priority;
44 bool active;
45 inline bool operator==(const std::string &name) const {
46 return service->name() == name;
47 }
48 inline bool operator==(const IService *ptr) const {
49 return service.get() == ptr;
50 }
51 inline bool operator<(const ServiceItem& rhs) const {
52 return priority < rhs.priority;
53 }
54 };
55
56 // typedefs and classes
57 typedef std::list<ServiceItem> ListSvc;
58 typedef GaudiUtils::Map<std::string, std::string> MapType;
59
61 ServiceManager(IInterface* application);
62
64 inline SmartIF<ISvcLocator>& serviceLocator() const {
65 return m_svcLocator;
66 }
67
69 virtual ~ServiceManager();
70
72 virtual const std::list<IService*>& getServices() const;
73
75 virtual bool existsService(const std::string& name) const;
76
78 virtual StatusCode addService(IService* svc, int prio = DEFAULT_SVC_PRIORITY);
80 virtual StatusCode addService(const Gaudi::Utils::TypeNameString& typeName, int prio = DEFAULT_SVC_PRIORITY);
82 virtual StatusCode removeService(IService* svc);
84 virtual StatusCode removeService(const std::string& name);
85
87 virtual StatusCode declareSvcType(const std::string& svcname, const std::string& svctype);
88
90 virtual SmartIF<IService>& createService(const Gaudi::Utils::TypeNameString& nametype);
91
93 virtual StatusCode initialize();
95 virtual StatusCode start();
97 virtual StatusCode stop();
99 virtual StatusCode finalize();
100
102 virtual StatusCode reinitialize();
104 virtual StatusCode restart();
105
107 virtual int getPriority(const std::string& name) const;
108 virtual StatusCode setPriority(const std::string& name, int pri);
109
111 virtual bool loopCheckEnabled() const;
113 virtual void setLoopCheckEnabled(bool en);
114
116 const std::string &name() const {
117 static std::string _name = "ServiceManager";
118 return _name;
119 }
120
122 virtual SmartIF<IService> &service(const Gaudi::Utils::TypeNameString &typeName, const bool createIf = true);
123
124 #if !defined(GAUDI_V22_API) || defined(G22_NEW_SVCLOCATOR)
125 using ISvcManager::createService;
126 using ISvcManager::addService;
127 #endif
128
129 private:
130
131 inline ListSvc::iterator find(const std::string &name) {
132 return std::find(m_listsvc.begin(), m_listsvc.end(), name);
133 }
134 inline ListSvc::const_iterator find(const std::string &name) const {
135 return std::find(m_listsvc.begin(), m_listsvc.end(), name);
136 }
137 inline ListSvc::iterator find(const IService *ptr) {
138 return std::find(m_listsvc.begin(), m_listsvc.end(), ptr);
139 }
140 inline ListSvc::const_iterator find(const IService *ptr) const {
141 return std::find(m_listsvc.begin(), m_listsvc.end(), ptr);
142 }
143
144 private:
145 ListSvc m_listsvc;
146 MapType m_maptype;
147 bool m_loopCheck;
148
150 SmartIF<IService> m_appSvc;
151
153 mutable std::list<IService*> m_listOfPtrs;
154
155 GaudiUtils::Map<InterfaceID, SmartIF<IInterface> > m_defaultImplementations;
156
158 boost::recursive_mutex m_svcinitmutex;
159
160 private:
161 void dump() const;
162
163 };
164 #endif // GAUDISVC_ServiceManager_H
165