| The Gaudi Framework v32r1 (f65d50dc)

ISvcLocator.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_ISVCLOCATOR_H
2 #define GAUDIKERNEL_ISVCLOCATOR_H 1
3
4 // Include files
5 #include "GaudiKernel/IInterface.h"
6 #include "GaudiKernel/ISvcManager.h"
7 #include "GaudiKernel/SmartIF.h"
8 #include "GaudiKernel/TypeNameString.h"
9 #include <list>
10 #include <string>
11
12 // Forward class declaration
13 class IService;
14
25 class GAUDI_API ISvcLocator : virtual public IInterface {
26 public:
28 DeclareInterfaceID( ISvcLocator, 3, 0 );
29
30 #if !defined( GAUDI_V22_API ) || defined( G22_NEW_SVCLOCATOR )
31
35 virtual StatusCode getService( const Gaudi::Utils::TypeNameString& typeName, IService*& svc,
36 const bool createIf = true ) {
37 SmartIF<IService>& s = service( typeName, createIf );
38 svc = s.get();
39 if ( svc ) {
40 svc->addRef(); // Needed to maintain the correct reference counting.
41 return StatusCode::SUCCESS;
42 }
43 return StatusCode::FAILURE;
44 }
45
51 virtual StatusCode getService( const Gaudi::Utils::TypeNameString& typeName, const InterfaceID& iid,
52 IInterface*& pinterface ) {
53 auto svc = service( typeName, false );
54 return svc ? svc->queryInterface( iid, (void**)&pinterface ) : StatusCode::FAILURE;
55 }
56
62 // virtual StatusCode getService( const Gaudi::Utils::TypeNameString& name,
63 // IService*& svc,
64 // bool createIf ) = 0;
65 #endif
66
68 virtual const std::list<IService*>& getServices() const = 0;
69
71 virtual bool existsService( const std::string& name ) const = 0;
72
73 #if !defined( GAUDI_V22_API ) || defined( G22_NEW_SVCLOCATOR )
74 template <class T>
76 StatusCode service( const Gaudi::Utils::TypeNameString& name, T*& svc, bool createIf = true ) {
77 if ( createIf ) {
78 IService* s;
79 StatusCode sc = getService( name, s, true );
80 if ( !sc.isSuccess() ) return sc; // Must check if initialization was OK!
81 }
82 return getService( name, T::interfaceID(), (IInterface*&)svc );
83 }
84
86 template <class T>
87 StatusCode service( const std::string& type, const std::string& name, T*& svc, bool createIf = true ) {
88 return service( type + "/" + name, svc, createIf );
89 }
90 #endif
91
93 virtual SmartIF<IService>& service( const Gaudi::Utils::TypeNameString& typeName, const bool createIf = true ) = 0;
94
96 template <typename T>
97 inline SmartIF<T> service( const Gaudi::Utils::TypeNameString& typeName, const bool createIf = true ) {
98 return SmartIF<T>{service( typeName, createIf )};
99 }
100
101 // try to access a different interface of the _current_ serviceLocator...
102 template <typename IFace>
103 SmartIF<IFace> as() {
104 return SmartIF<IFace>{this};
105 }
106 };
107
108 #endif // GAUDI_ISVCLOCATOR_H
SmartIF< IService >
ISvcLocator
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:41
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
ISvcLocator::service
SmartIF< T > service(const Gaudi::Utils::TypeNameString &typeName, const bool createIf=true)
Returns a smart pointer to the requested interface of a service.
Definition: ISvcLocator.h:97
ISvcLocator::service
StatusCode service(const std::string &type, const std::string &name, T *&svc, bool createIf=true)
Templated method to access a service by type and name.
Definition: ISvcLocator.h:87
ISvcLocator::as
SmartIF< IFace > as()
Definition: ISvcLocator.h:103
ISvcManager.h
std::string
STL class.
ISvcLocator::service
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
InterfaceID
Interface ID class.
Definition: IInterface.h:29
Gaudi::Utils::TypeNameString
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:10
IService
General service interface definition.
Definition: IService.h:18
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
IInterface
Definition of the basic interface.
Definition: IInterface.h:244
gaudirun.type
type
Definition: gaudirun.py:142
SmartIF.h
ISvcLocator::getService
virtual StatusCode getService(const Gaudi::Utils::TypeNameString &typeName, IService *&svc, const bool createIf=true)
Get a reference to the service given a service name.
Definition: ISvcLocator.h:35
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:267
std::list< IService * >
DeclareInterfaceID
#define DeclareInterfaceID(iface, major, minor)
Macro to declare the interface ID when using the new mechanism of extending and implementing interfac...
Definition: IInterface.h:13
ISvcLocator::getService
virtual StatusCode getService(const Gaudi::Utils::TypeNameString &typeName, const InterfaceID &iid, IInterface *&pinterface)
Get a specific interface pointer given a service name and interface id.
Definition: ISvcLocator.h:51
gaudirun.s
string s
Definition: gaudirun.py:316
TypeNameString.h
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:86
GaudiDict::typeName
std::string typeName(const std::type_info &typ)
Definition: Dictionary.cpp:21
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:71
IInterface.h
getService
IInterface *PyHelper() getService(IInterface *app, char *name)
Definition: Bootstrap.cpp:229
IInterface::iid
Gaudi::InterfaceId< IInterface, 0, 0 > iid
Interface ID.
Definition: IInterface.h:247