| The Gaudi Framework v28r2p1 (f1a77ff4)

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

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
ServiceHandle< T > Class Template Reference

Handle to be used in lieu of naked pointers to services. More...

`#include <GaudiKernel/ServiceHandle.h>`

Inheritance diagram for ServiceHandle< T >:
[legend]
Collaboration diagram for ServiceHandle< T >:
[legend]

## Public Member Functions
| ServiceHandle (const std::string &serviceName, const std::string &theParentName)
| Create a handle ('smart pointer') to a service. More...
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>
| ServiceHandle (const ServiceHandle< NCT > &other, typename std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value >::type *=nullptr)
| Copy constructor from a non const T to const T service handle. More...
StatusCode | initialize (const std::string &serviceName, const std::string &theParentName)
StatusCode | retrieve () const
| Retrieve the Service. More...
T * | get () const
| Release the Service. More...
T * | operator-> () const
| Allow non const access to the service, even from a const handle... More...
T & | operator* () const
Public Member Functions inherited from GaudiHandle< T >
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>
| GaudiHandle (const GaudiHandle< NCT > &other, typename std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value >::type *=nullptr)
| Copy constructor needed for correct ref-counting. More...
| GaudiHandle (const GaudiHandle &other)
| Copy constructor needed for correct ref-counting. More...
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>
std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value, GaudiHandle & >::type | operator= (const GaudiHandle< NCT > &other)
| Assignment operator for correct ref-counting. More...
GaudiHandle & | operator= (const GaudiHandle &other)
| Assignment operator for correct ref-counting. More...
StatusCode | retrieve () const
| Retrieve the component. More...
StatusCode | release () const
| Release the component. More...
bool | isValid () const
| Check if the handle is valid (try to retrive the object is not done yet). More...
| operator bool () const
| For testing if handle has component. More...
T * | get ()
| Return the wrapped pointer, not calling retrieve() if null. More...
std::add_const< T >::type * | get () const
| Return the wrapped pointer, not calling retrieve() if null. More...
bool | isSet () const
| True if the wrapped pointer is not null. More...
T & | operator* ()
T * | operator-> ()
std::add_const< T >::type & | operator* () const
std::add_const< T >::type * | operator-> () const
std::string | getDefaultType ()
| Helper function to get default type string from the class type. More...
std::string | getDefaultName ()
Public Member Functions inherited from GaudiHandleBase
std::string | typeAndName () const
| The full type and name: "type/name". More...
std::string | type () const
| The concrete component class name: the part before the '/'. More...
std::string | name () const
| The instance name: the part after the '/'. More...
bool | empty () const
| Check if the handle has been set to empty string (i.e. More...
void | setTypeAndName (std::string myTypeAndName)
| The component "type/name" string. More...
void | setName (const std::string &myName)
| Set the instance name (part after the '/') without changing the class type. More...
std::string | pythonPropertyClassName () const override
| Name of the componentType with "Handle" appended. More...
std::string | messageName () const
| name used for printing messages More...
std::string | pythonRepr () const override
| Python representation of handle, i.e. More...
Public Member Functions inherited from GaudiHandleInfo
virtual | ~GaudiHandleInfo ()=default
| virtual destructor so that derived class destructor is called. More...
const std::string & | componentType () const
const std::string & | propertyName () const
| name as used in declareProperty(name,gaudiHandle) More...
void | setPropertyName (std::string propName)
| set name as used in declareProperty(name,gaudiHandle). More...
const std::string & | parentName () const
| The name of the parent. More...

## Protected Member Functions
StatusCode | retrieve (T *&service) const override
| Do the real retrieval of the Service. More...
Protected Member Functions inherited from GaudiHandle< T >
| GaudiHandle (std::string myTypeAndName, std::string myComponentType, std::string myParentName)
virtual StatusCode | release (T *comp) const
| Release the component. More...
template<class CLASS >
std::remove_const< CLASS >::type * | nonConst (CLASS *p) const
| Cast a pointer to a non const type. More...
Protected Member Functions inherited from GaudiHandleBase
| GaudiHandleBase (std::string myTypeAndName, std::string myComponentType, std::string myParentName)
| Create a handle ('smart pointer') to a gaudi component. More...
Protected Member Functions inherited from GaudiHandleInfo
| GaudiHandleInfo (std::string myComponentType, std::string myParentName)
| Some basic information and helper functions shared between various handles/arrays. More...
void | setComponentType (const std::string &componentType)
| The component type. More...
void | setParentName (const std::string &parent)
| The name of the parent. More...

## Private Member Functions
SmartIF< ISvcLocator > & | serviceLocator () const
| Do the real release of the Service. More...
SmartIF< IMessageSvc > & | messageSvc () const

## Private Attributes
SmartIF< ISvcLocator > | m_pSvcLocator
SmartIF< IMessageSvc > | m_pMessageSvc

## Detailed Description

### template<class T>
class ServiceHandle< T >

Handle to be used in lieu of naked pointers to services.

This allows better control through the framework of service loading and usage.

Author
  Marti.nosp@m.n.Wo.nosp@m.udstr.nosp@m.a@ce.nosp@m.rn.ch

Definition at line 32 of file PropertyHolder.h.

## Constructor & Destructor Documentation

template<class T>

ServiceHandle< T >::ServiceHandle | ( | const std::string & | serviceName,
|  | const std::string & | theParentName
| ) |  |
| inline

Create a handle ('smart pointer') to a service.

The arguments are passed on to ServiceSvc, and have the same meaning:

Parameters

  serviceName | name of the service
  parentName | name of the parent Algorithm, AlgTool or Service. It is used for log printout at retrieve(), and for retrieving a thread-dependent service (if applicable)

Definition at line 42 of file ServiceHandle.h.

43 : GaudiHandle<T>(serviceName, "Service", theParentName)
44 { }
GaudiHandle
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:172
template<class T>
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>

ServiceHandle< T >::ServiceHandle | ( | const ServiceHandle< NCT > & | other,
|  | typename std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value >::type * | = `nullptr`
| ) |  |
| inline

Copy constructor from a non const T to const T service handle.

Definition at line 49 of file ServiceHandle.h.

52 : GaudiHandle<CT>( other )
53 { }
GaudiHandle
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:172

## Member Function Documentation

template<class T>

T* ServiceHandle< T >::get | ( |  | ) | const
| inline

Release the Service.

Function must be repeated here to avoid hiding the function release( T*& ) Allow non const access to the service, even from a const handle...

Definition at line 76 of file ServiceHandle.h.

76 { return GaudiHandle<T>::nonConst( GaudiHandle<T>::get() ); }
GaudiHandle
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:172
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
template<class T>

StatusCode ServiceHandle< T >::initialize | ( | const std::string & | serviceName,
|  | const std::string & | theParentName
| ) |  |
| inline

Definition at line 55 of file ServiceHandle.h.

55 {
56
57 GaudiHandleBase::setTypeAndName(serviceName);
58 GaudiHandleBase::setParentName(theParentName);
59
60 return StatusCode::SUCCESS;
61 }
StatusCode::SUCCESS
Definition: StatusCode.h:30
GaudiHandleBase::setTypeAndName
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9
GaudiHandleInfo::setParentName
void setParentName(const std::string &parent)
The name of the parent.
Definition: GaudiHandle.h:73
template<class T>

SmartIF<IMessageSvc>& ServiceHandle< T >::messageSvc | ( |  | ) | const
| inline private

Definition at line 108 of file ServiceHandle.h.

108 { // not really const, because it may change m_pMessageSvc
109 if ( !m_pMessageSvc ) {
110 m_pMessageSvc = serviceLocator(); // default message service
111 if( !m_pMessageSvc ) {
112 throw GaudiException("Service [MessageSvc] not found",
113 this->parentName(), StatusCode::FAILURE);
114 }
115 }
116 return m_pMessageSvc;
117 }
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:23
StatusCode::FAILURE
Definition: StatusCode.h:29
ServiceHandle::m_pMessageSvc
SmartIF< IMessageSvc > m_pMessageSvc
Definition: ServiceHandle.h:122
GaudiHandleInfo::parentName
const std::string & parentName() const
The name of the parent.
Definition: GaudiHandle.h:50
ServiceHandle::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const
Do the real release of the Service.
Definition: ServiceHandle.h:98
template<class T>

T& ServiceHandle< T >::operator* | ( |  | ) | const
| inline

Definition at line 80 of file ServiceHandle.h.

80 { return * GaudiHandle<T>::nonConst( GaudiHandle<T>::operator->() ); }
GaudiHandle
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:172
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
template<class T>

T* ServiceHandle< T >::operator-> | ( |  | ) | const
| inline

Allow non const access to the service, even from a const handle...

Definition at line 79 of file ServiceHandle.h.

79 { return GaudiHandle<T>::nonConst( GaudiHandle<T>::operator->() ); }
GaudiHandle
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:172
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
template<class T>

StatusCode ServiceHandle< T >::retrieve | ( |  | ) | const
| inline

Retrieve the Service.

Release existing Service if needed. Function must be repeated here to avoid hiding the function retrieve( T*& )

Definition at line 65 of file ServiceHandle.h.

65 { // not really const, because it updates m_pObject
66 return GaudiHandle<T>::retrieve();
67 }
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:228
template<class T>

StatusCode ServiceHandle< T >::retrieve | ( | T *& | service | ) | const
| inline override protected virtual

Do the real retrieval of the Service.

Implements GaudiHandle< T >.

Definition at line 84 of file ServiceHandle.h.

84 {
85 const ServiceLocatorHelper helper(*serviceLocator(), GaudiHandleBase::messageName(), this->parentName());
86 return helper.getService(GaudiHandleBase::typeAndName(), true, T::interfaceID(), (void**)&service);
87 }
ServiceLocatorHelper
an helper to share the implementation of service() among the various kernel base classes ...
Definition: ServiceLocatorHelper.h:17
GaudiHandleBase::messageName
std::string messageName() const
name used for printing messages
Definition: GaudiHandle.cpp:48
GaudiHandleInfo::parentName
const std::string & parentName() const
The name of the parent.
Definition: GaudiHandle.h:50
ServiceHandle::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const
Do the real release of the Service.
Definition: ServiceHandle.h:98
GaudiHandleBase::typeAndName
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:121
template<class T>

SmartIF<ISvcLocator>& ServiceHandle< T >::serviceLocator | ( |  | ) | const
| inline private

Do the real release of the Service.

Definition at line 98 of file ServiceHandle.h.

98 { // not really const, because it may change m_pSvcLocator
99 if ( !m_pSvcLocator ) {
100 m_pSvcLocator = Gaudi::svcLocator();
101 if ( !m_pSvcLocator ) {
102 throw GaudiException("SvcLocator not found", "Core component not found", StatusCode::FAILURE);
103 }
104 }
105 return m_pSvcLocator;
106 }
ServiceHandle::m_pSvcLocator
SmartIF< ISvcLocator > m_pSvcLocator
Definition: ServiceHandle.h:121
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:23
StatusCode::FAILURE
Definition: StatusCode.h:29
Gaudi::svcLocator
GAUDI_API ISvcLocator * svcLocator()

## Member Data Documentation

template<class T>

SmartIF<IMessageSvc> ServiceHandle< T >::m_pMessageSvc
| mutable private

Definition at line 122 of file ServiceHandle.h.

template<class T>

SmartIF<ISvcLocator> ServiceHandle< T >::m_pSvcLocator
| mutable private

Definition at line 121 of file ServiceHandle.h.

The documentation for this class was generated from the following files:

- GaudiKernel/GaudiKernel/PropertyHolder.h
- GaudiKernel/GaudiKernel/ServiceHandle.h