The Gaudi Framework  master (594c33fa)
ISvcLocator Class Referenceabstract

#include <GaudiKernel/ISvcLocator.h>

Inheritance diagram for ISvcLocator:
Collaboration diagram for ISvcLocator:

Public Member Functions

 DeclareInterfaceID (ISvcLocator, 3, 0)
 InterfaceID. More...
 
virtual StatusCode getService (const Gaudi::Utils::TypeNameString &typeName, IService *&svc, const bool createIf=true)
 Get a reference to the service given a service name. More...
 
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. More...
 
virtual const std::list< IService * > & getServices () const =0
 Get a reference to a service and create it if it does not exists. More...
 
virtual bool existsService (std::string_view name) const =0
 Check the existence of a service given a service name. More...
 
template<class T >
StatusCode service (const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
 Templated method to access a service by name. More...
 
template<class T >
StatusCode service (std::string_view type, std::string_view name, T *&svc, bool createIf=true)
 Templated method to access a service by type and name. More...
 
virtual SmartIF< IService > & service (const Gaudi::Utils::TypeNameString &typeName, const bool createIf=true)=0
 Returns a smart pointer to a service. More...
 
template<typename T >
SmartIF< T > service (const Gaudi::Utils::TypeNameString &typeName, const bool createIf=true)
 Returns a smart pointer to the requested interface of a service. More...
 
template<typename IFace >
SmartIF< IFace > as ()
 
Gaudi::Interfaces::IOptionsSvcgetOptsSvc ()
 Direct access to Gaudi::Interfaces::IOptionsSvc implementation. More...
 
Gaudi::Monitoring::HubmonitoringHub ()
 
- Public Member Functions inherited from IInterface
virtual void * i_cast (const InterfaceID &) const =0
 main cast function More...
 
virtual std::vector< std::stringgetInterfaceNames () const =0
 Returns a vector of strings containing the names of all the implemented interfaces. More...
 
virtual unsigned long addRef ()=0
 Increment the reference count of Interface instance. More...
 
virtual unsigned long release ()=0
 Release Interface instance. More...
 
virtual unsigned long refCount () const =0
 Current reference count. More...
 
virtual StatusCode queryInterface (const InterfaceID &ti, void **pp)=0
 Set the void** to the pointer to the requested interface of the instance. More...
 
virtual ~IInterface ()=default
 Virtual destructor. More...
 

Additional Inherited Members

- Public Types inherited from IInterface
enum  Status : StatusCode::code_t {
  Status::FAILURE = 0, Status::SUCCESS = 1, Status::NO_INTERFACE, Status::VERSMISMATCH,
  Status::LAST_ERROR
}
 Return status. More...
 
using iid = Gaudi::InterfaceId< IInterface, 0, 0 >
 Interface ID. More...
 
using ext_iids = Gaudi::interface_list< iid >
 Extra interfaces. More...
 
- Static Public Member Functions inherited from IInterface
static const InterfaceIDinterfaceID ()
 Return an instance of InterfaceID identifying the interface. More...
 

Detailed Description

The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to locate services in the framework. Clients use this interface to locate references to interfaces of services existing in the application. This operation needs to be done before the service can be used by the client. Typically "locating the services" is done at the initialization phase of the clients.

Author
Pere Mato

Definition at line 46 of file ISvcLocator.h.

Member Function Documentation

◆ as()

template<typename IFace >
SmartIF<IFace> ISvcLocator::as ( )
inline

Definition at line 124 of file ISvcLocator.h.

124  {
125  return SmartIF<IFace>{ this };
126  }

◆ DeclareInterfaceID()

ISvcLocator::DeclareInterfaceID ( ISvcLocator  ,
,
 
)

◆ existsService()

virtual bool ISvcLocator::existsService ( std::string_view  name) const
pure virtual

Check the existence of a service given a service name.

◆ getOptsSvc()

Gaudi::Interfaces::IOptionsSvc & ISvcLocator::getOptsSvc ( )

Direct access to Gaudi::Interfaces::IOptionsSvc implementation.

Definition at line 19 of file ISvcLocator.cpp.

19  {
20  using namespace Gaudi::Interfaces;
21  auto p = dynamic_cast<IOptionsSvc*>( service( "JobOptionsSvc" ).get() );
22  if ( !p ) throw std::runtime_error( "cannot dynamic_cast JobOptionsSvc to IOptionsSvc*" );
23  return *p;
24 }

◆ getService() [1/2]

virtual StatusCode ISvcLocator::getService ( const Gaudi::Utils::TypeNameString typeName,
const InterfaceID iid,
IInterface *&  pinterface 
)
inlinevirtual

Get a specific interface pointer given a service name and interface id.

Parameters
nameService name
iidInterface ID
pinterfaceReturned pointer to the requested interface

Definition at line 72 of file ISvcLocator.h.

73  {
74  auto svc = service( typeName, false );
75  return svc ? svc->queryInterface( iid, (void**)&pinterface ) : StatusCode::FAILURE;
76  }

◆ getService() [2/2]

virtual StatusCode ISvcLocator::getService ( const Gaudi::Utils::TypeNameString typeName,
IService *&  svc,
const bool  createIf = true 
)
inlinevirtual

Get a reference to the service given a service name.

Parameters
nameService name
svcReturned service pointer

Definition at line 56 of file ISvcLocator.h.

57  {
58  SmartIF<IService>& s = service( typeName, createIf );
59  svc = s.get();
60  if ( svc ) {
61  svc->addRef(); // Needed to maintain the correct reference counting.
62  return StatusCode::SUCCESS;
63  }
64  return StatusCode::FAILURE;
65  }

◆ getServices()

virtual const std::list<IService*>& ISvcLocator::getServices ( ) const
pure virtual

Get a reference to a service and create it if it does not exists.

Parameters
nameService name
svcReturned service pointer
createIfflag to control the creation Return the list of Services

◆ monitoringHub()

Gaudi::Monitoring::Hub & ISvcLocator::monitoringHub ( )

Definition at line 26 of file ISvcLocator.cpp.

26 { return as<IAppMgrUI>()->monitoringHub(); }

◆ service() [1/4]

template<class T >
StatusCode ISvcLocator::service ( const Gaudi::Utils::TypeNameString name,
T *&  svc,
bool  createIf = true 
)
inline

Templated method to access a service by name.

Definition at line 97 of file ISvcLocator.h.

97  {
98  if ( createIf ) {
99  IService* s;
100  StatusCode sc = getService( name, s, true );
101  if ( !sc.isSuccess() ) return sc; // Must check if initialization was OK!
102  }
103  return getService( name, T::interfaceID(), (IInterface*&)svc );
104  }

◆ service() [2/4]

template<typename T >
SmartIF<T> ISvcLocator::service ( const Gaudi::Utils::TypeNameString typeName,
const bool  createIf = true 
)
inline

Returns a smart pointer to the requested interface of a service.

Definition at line 118 of file ISvcLocator.h.

118  {
119  return SmartIF<T>{ service( typeName, createIf ) };
120  }

◆ service() [3/4]

virtual SmartIF<IService>& ISvcLocator::service ( const Gaudi::Utils::TypeNameString typeName,
const bool  createIf = true 
)
pure virtual

Returns a smart pointer to a service.

◆ service() [4/4]

template<class T >
StatusCode ISvcLocator::service ( std::string_view  type,
std::string_view  name,
T *&  svc,
bool  createIf = true 
)
inline

Templated method to access a service by type and name.

Definition at line 108 of file ISvcLocator.h.

108  {
109  return service( std::string{ type }.append( "/" ).append( name ), svc, createIf );
110  }

The documentation for this class was generated from the following files:
IService
Definition: IService.h:28
Gaudi::Interfaces
Definition: IOptionsSvc.h:24
std::string
STL class.
IInterface::iid
Gaudi::InterfaceId< IInterface, 0, 0 > iid
Interface ID.
Definition: IInterface.h:240
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:314
gaudirun.s
string s
Definition: gaudirun.py:346
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:56
StatusCode
Definition: StatusCode.h:65
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:97
std::runtime_error
STL class.
SmartIF
Definition: IConverter.h:25
gaudirun.type
type
Definition: gaudirun.py:160
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
GaudiDict::typeName
std::string typeName(const std::type_info &typ)
Definition: Dictionary.cpp:31
IInterface
Definition: IInterface.h:237
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
Gaudi::Interfaces::IOptionsSvc
Interface for a component that manages application configuration options.
Definition: IOptionsSvc.h:46