Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

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 >:

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

Collaboration graph
[legend]

List of all members.

Public Member Functions

 ServiceHandle (const std::string &serviceName, const std::string &theParentName)
 Create a handle ('smart pointer') to a service.
StatusCode retrieve () const
 Retrieve the Service.

Protected Member Functions

StatusCode retrieve (T *&service) const
 Release the Service.

Private Member Functions

SmartIF< ISvcLocator > & serviceLocator () const
 Do the real release of the Service.
SmartIF< IMessageSvc > & messageSvc () const

Private Attributes

SmartIF< ISvcLocatorm_pSvcLocator
SmartIF< IMessageSvcm_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:
Martin.Woudstra@cern.ch

Definition at line 30 of file ServiceHandle.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.

00043     : GaudiHandle<T>(serviceName, "Service", theParentName)
00044   {}


Member Function Documentation

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*& )

Reimplemented from GaudiHandle< T >.

Definition at line 48 of file ServiceHandle.h.

00048                               { // not really const, because it updates m_pObject
00049     return GaudiHandle<T>::retrieve();
00050   }

template<class T>
StatusCode ServiceHandle< T >::retrieve ( T *&  service  )  const [inline, protected, virtual]

Release the Service.

Function must be repeated here to avoid hiding the function release( T*& ) Do the real retrieval of the Service.

Implements GaudiHandle< T >.

Definition at line 60 of file ServiceHandle.h.

00060                                            {
00061     const ServiceLocatorHelper helper(*serviceLocator(), GaudiHandleBase::messageName(), this->parentName());
00062     return helper.getService(GaudiHandleBase::typeAndName(), true, T::interfaceID(), (void**)&service);
00063   }

template<class T>
SmartIF<ISvcLocator>& ServiceHandle< T >::serviceLocator (  )  const [inline, private]

Do the real release of the Service.

Definition at line 74 of file ServiceHandle.h.

00074                                                { // not really const, because it may change m_pSvcLocator
00075     if ( !m_pSvcLocator.isValid() ) {
00076       m_pSvcLocator = Gaudi::svcLocator();
00077       if ( !m_pSvcLocator.isValid() ) {
00078         throw GaudiException("SvcLocator not found", "Core component not found", StatusCode::FAILURE);
00079       }
00080     }
00081     return m_pSvcLocator;
00082   }

template<class T>
SmartIF<IMessageSvc>& ServiceHandle< T >::messageSvc (  )  const [inline, private]

Definition at line 84 of file ServiceHandle.h.

00084                                            { // not really const, because it may change m_pMessageSvc
00085     if ( !m_pMessageSvc.isValid() ) {
00086       m_pMessageSvc = serviceLocator(); // default message service
00087       if( !m_pMessageSvc.isValid() ) {
00088         throw GaudiException("Service [MessageSvc] not found",
00089                              this->parentName(), StatusCode::FAILURE);
00090       }
00091     }
00092     return m_pMessageSvc;
00093   }


Member Data Documentation

template<class T>
SmartIF<ISvcLocator> ServiceHandle< T >::m_pSvcLocator [mutable, private]

Definition at line 97 of file ServiceHandle.h.

template<class T>
SmartIF<IMessageSvc> ServiceHandle< T >::m_pMessageSvc [mutable, private]

Definition at line 98 of file ServiceHandle.h.


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

Generated at Mon May 3 12:26:22 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004