GaudiHandle< T > Class Template Referenceabstract

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

#include <GaudiKernel/GaudiHandle.h>

Inheritance diagram for GaudiHandle< T >:
Collaboration diagram for GaudiHandle< T >:

Public Member Functions

 GaudiHandle (const GaudiHandle &other)
 Copy constructor needed for correct ref-counting. More...
 
GaudiHandleoperator= (const GaudiHandle &other)
 Assignment operator for correct ref-counting. More...
 
 ~GaudiHandle ()
 
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 () 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-> ()
 
T & operator* () const
 
T * operator-> () const
 
std::string getDefaultType ()
 Helper function to get default type string from the class type. More...
 
std::string getDefaultName ()
 
 GaudiHandle (const GaudiHandle &other)
 Copy constructor needed for correct ref-counting. More...
 
GaudiHandleoperator= (const GaudiHandle &other)
 Assignment operator for correct ref-counting. More...
 
 ~GaudiHandle ()
 
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 () 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-> ()
 
T & operator* () const
 
T * 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
 Name of the componentType with "Handle" appended. More...
 
std::string messageName () const
 name used for printing messages More...
 
virtual std::string pythonRepr () const
 Python representation of handle, i.e. More...
 
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
 Name of the componentType with "Handle" appended. More...
 
std::string messageName () const
 name used for printing messages More...
 
virtual std::string pythonRepr () const
 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...
 
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

 GaudiHandle (std::string myTypeAndName, std::string myComponentType, std::string myParentName)
 
virtual StatusCode retrieve (T *&) const =0
 Retrieve the component. More...
 
virtual StatusCode release (T *comp) const
 Release the component. More...
 
 GaudiHandle (std::string myTypeAndName, std::string myComponentType, std::string myParentName)
 
virtual StatusCode retrieve (T *&) const =0
 Retrieve the component. More...
 
virtual StatusCode release (T *comp) const
 Release the component. 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...
 
 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...
 
 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

void setDefaultTypeAndName ()
 Helper function to set default name and type. More...
 
void setDefaultType ()
 Helper function to set default type from the class type T. More...
 
void assertObject () const
 Load the pointer to the component. More...
 
void setDefaultTypeAndName ()
 Helper function to set default name and type. More...
 
void setDefaultType ()
 Helper function to set default type from the class type T. More...
 
void assertObject () const
 Load the pointer to the component. More...
 

Private Attributes

T * m_pObject = nullptr
 

Detailed Description

template<class T>
class GaudiHandle< T >

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

This allows better control through the framework of gaudi loading and usage. T is the type of the component interface (or concrete class).

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

Definition at line 171 of file GaudiHandle.h.

Constructor & Destructor Documentation

template<class T>
GaudiHandle< T >::GaudiHandle ( std::string  myTypeAndName,
std::string  myComponentType,
std::string  myParentName 
)
inlineprotected

Definition at line 176 of file GaudiHandle.h.

178  : GaudiHandleBase(std::move(myTypeAndName), std::move(myComponentType), std::move(myParentName))
179  {}
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle ('smart pointer') to a gaudi component.
Definition: GaudiHandle.h:109
template<class T>
GaudiHandle< T >::GaudiHandle ( const GaudiHandle< T > &  other)
inline

Copy constructor needed for correct ref-counting.

Definition at line 183 of file GaudiHandle.h.

184  : GaudiHandleBase( other ) {
185  m_pObject = other.m_pObject;
186  if ( m_pObject ) m_pObject->addRef();
187  }
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle ('smart pointer') to a gaudi component.
Definition: GaudiHandle.h:109
template<class T>
GaudiHandle< T >::~GaudiHandle ( )
inline

Definition at line 200 of file GaudiHandle.h.

200  {
201  //release();
202  }
template<class T>
GaudiHandle< T >::GaudiHandle ( std::string  myTypeAndName,
std::string  myComponentType,
std::string  myParentName 
)
inlineprotected

Definition at line 176 of file GaudiHandle.h.

178  : GaudiHandleBase(std::move(myTypeAndName), std::move(myComponentType), std::move(myParentName))
179  {}
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle ('smart pointer') to a gaudi component.
Definition: GaudiHandle.h:109
template<class T>
GaudiHandle< T >::GaudiHandle ( const GaudiHandle< T > &  other)
inline

Copy constructor needed for correct ref-counting.

Definition at line 183 of file GaudiHandle.h.

184  : GaudiHandleBase( other ) {
185  m_pObject = other.m_pObject;
186  if ( m_pObject ) m_pObject->addRef();
187  }
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle ('smart pointer') to a gaudi component.
Definition: GaudiHandle.h:109
template<class T>
GaudiHandle< T >::~GaudiHandle ( )
inline

Definition at line 200 of file GaudiHandle.h.

200  {
201  //release();
202  }

Member Function Documentation

template<class T>
void GaudiHandle< T >::assertObject ( ) const
inlineprivate

Load the pointer to the component.

Do a retrieve if needed. Throw an exception if retrieval fails.

Definition at line 301 of file GaudiHandle.h.

301  { // not really const, because it may update m_pObject
302  if ( !isValid() ) {
303  throw GaudiException("Failed to retrieve " + componentType() + ": " + typeAndName(),
304  componentType() + " retrieve", StatusCode::FAILURE);
305  }
306  }
Define general base for Gaudi exception.
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:225
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:120
const std::string & componentType() const
Definition: GaudiHandle.h:34
template<class T>
void GaudiHandle< T >::assertObject ( ) const
inlineprivate

Load the pointer to the component.

Do a retrieve if needed. Throw an exception if retrieval fails.

Definition at line 301 of file GaudiHandle.h.

301  { // not really const, because it may update m_pObject
302  if ( !isValid() ) {
303  throw GaudiException("Failed to retrieve " + componentType() + ": " + typeAndName(),
304  componentType() + " retrieve", StatusCode::FAILURE);
305  }
306  }
Define general base for Gaudi exception.
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:225
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:120
const std::string & componentType() const
Definition: GaudiHandle.h:34
template<class T>
T* GaudiHandle< T >::get ( ) const
inline

Return the wrapped pointer, not calling retrieve() if null.

Definition at line 236 of file GaudiHandle.h.

236  {
237  return m_pObject;
238  }
template<class T>
T* GaudiHandle< T >::get ( ) const
inline

Return the wrapped pointer, not calling retrieve() if null.

Definition at line 236 of file GaudiHandle.h.

236  {
237  return m_pObject;
238  }
template<class T>
std::string GaudiHandle< T >::getDefaultName ( )
inline

Definition at line 270 of file GaudiHandle.h.

270  {
271  std::string defName = GaudiHandleBase::type();
272  if ( defName.empty() ) defName = getDefaultType();
273  return defName;
274  }
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
std::string type() const
The concrete component class name: the part before the '/'.
Definition: GaudiHandle.cpp:13
template<class T>
std::string GaudiHandle< T >::getDefaultName ( )
inline

Definition at line 270 of file GaudiHandle.h.

270  {
271  std::string defName = GaudiHandleBase::type();
272  if ( defName.empty() ) defName = getDefaultType();
273  return defName;
274  }
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
std::string type() const
The concrete component class name: the part before the '/'.
Definition: GaudiHandle.cpp:13
template<class T>
std::string GaudiHandle< T >::getDefaultType ( )
inline

Helper function to get default type string from the class type.

Definition at line 266 of file GaudiHandle.h.

266  {
267  return System::typeinfoName( typeid(T) );
268  }
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
template<class T>
std::string GaudiHandle< T >::getDefaultType ( )
inline

Helper function to get default type string from the class type.

Definition at line 266 of file GaudiHandle.h.

266  {
267  return System::typeinfoName( typeid(T) );
268  }
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
template<class T>
bool GaudiHandle< T >::isSet ( ) const
inline

True if the wrapped pointer is not null.

Definition at line 241 of file GaudiHandle.h.

241  {
242  return get();
243  }
template<class T>
bool GaudiHandle< T >::isSet ( ) const
inline

True if the wrapped pointer is not null.

Definition at line 241 of file GaudiHandle.h.

241  {
242  return get();
243  }
template<class T>
bool GaudiHandle< T >::isValid ( ) const
inline

Check if the handle is valid (try to retrive the object is not done yet).

Definition at line 225 of file GaudiHandle.h.

225  { // not really const, because it may update m_pObject
226  return m_pObject || retrieve().isSuccess();
227  }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:205
template<class T>
bool GaudiHandle< T >::isValid ( ) const
inline

Check if the handle is valid (try to retrive the object is not done yet).

Definition at line 225 of file GaudiHandle.h.

225  { // not really const, because it may update m_pObject
226  return m_pObject || retrieve().isSuccess();
227  }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:205
template<class T>
GaudiHandle< T >::operator bool ( ) const
inline

For testing if handle has component.

Does retrieve() if needed. If this returns false, the component could not be retrieved.

Definition at line 231 of file GaudiHandle.h.

231  { // not really const, because it may update m_pObject
232  return isValid();
233  }
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:225
template<class T>
GaudiHandle< T >::operator bool ( ) const
inline

For testing if handle has component.

Does retrieve() if needed. If this returns false, the component could not be retrieved.

Definition at line 231 of file GaudiHandle.h.

231  { // not really const, because it may update m_pObject
232  return isValid();
233  }
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:225
template<class T>
T& GaudiHandle< T >::operator* ( )
inline

Definition at line 245 of file GaudiHandle.h.

245  {
246  assertObject();
247  return *m_pObject;
248  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T& GaudiHandle< T >::operator* ( )
inline

Definition at line 245 of file GaudiHandle.h.

245  {
246  assertObject();
247  return *m_pObject;
248  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T& GaudiHandle< T >::operator* ( ) const
inline

Definition at line 255 of file GaudiHandle.h.

255  { // not really const, because it may update m_pObject
256  assertObject();
257  return *m_pObject;
258  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T& GaudiHandle< T >::operator* ( ) const
inline

Definition at line 255 of file GaudiHandle.h.

255  { // not really const, because it may update m_pObject
256  assertObject();
257  return *m_pObject;
258  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T* GaudiHandle< T >::operator-> ( )
inline

Definition at line 250 of file GaudiHandle.h.

250  {
251  assertObject();
252  return m_pObject;
253  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T* GaudiHandle< T >::operator-> ( )
inline

Definition at line 250 of file GaudiHandle.h.

250  {
251  assertObject();
252  return m_pObject;
253  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T* GaudiHandle< T >::operator-> ( ) const
inline

Definition at line 260 of file GaudiHandle.h.

260  { // not really const, because it may update m_pObject
261  assertObject();
262  return m_pObject;
263  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
T* GaudiHandle< T >::operator-> ( ) const
inline

Definition at line 260 of file GaudiHandle.h.

260  { // not really const, because it may update m_pObject
261  assertObject();
262  return m_pObject;
263  }
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:301
template<class T>
GaudiHandle& GaudiHandle< T >::operator= ( const GaudiHandle< T > &  other)
inline

Assignment operator for correct ref-counting.

Definition at line 190 of file GaudiHandle.h.

190  {
191  GaudiHandleBase::operator=( other );
192  // release any current tool
193  release().ignore();
194  m_pObject = other.m_pObject;
195  // update ref-counting
196  if ( m_pObject ) m_pObject->addRef();
197  return *this;
198  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
void ignore() const
Definition: StatusCode.h:108
template<class T>
GaudiHandle& GaudiHandle< T >::operator= ( const GaudiHandle< T > &  other)
inline

Assignment operator for correct ref-counting.

Definition at line 190 of file GaudiHandle.h.

190  {
191  GaudiHandleBase::operator=( other );
192  // release any current tool
193  release().ignore();
194  m_pObject = other.m_pObject;
195  // update ref-counting
196  if ( m_pObject ) m_pObject->addRef();
197  return *this;
198  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
void ignore() const
Definition: StatusCode.h:108
template<class T>
StatusCode GaudiHandle< T >::release ( ) const
inline

Release the component.

Definition at line 215 of file GaudiHandle.h.

215  { // not really const, because it updates m_pObject
216  if ( m_pObject ) {
218  m_pObject = nullptr;
219  return sc;
220  }
221  return StatusCode::SUCCESS;
222  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
template<class T>
StatusCode GaudiHandle< T >::release ( ) const
inline

Release the component.

Definition at line 215 of file GaudiHandle.h.

215  { // not really const, because it updates m_pObject
216  if ( m_pObject ) {
218  m_pObject = nullptr;
219  return sc;
220  }
221  return StatusCode::SUCCESS;
222  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
template<class T>
virtual StatusCode GaudiHandle< T >::release ( T *  comp) const
inlineprotectedvirtual

Release the component.

Default implementation calls release() on the component. Can be overridden by the derived class if something else if needed.

Reimplemented in ToolHandle< T >, and ToolHandle< T >.

Definition at line 282 of file GaudiHandle.h.

282  { // not really const, because it updates m_pObject
283  comp->release();
284  return StatusCode::SUCCESS;
285  }
template<class T>
virtual StatusCode GaudiHandle< T >::release ( T *  comp) const
inlineprotectedvirtual

Release the component.

Default implementation calls release() on the component. Can be overridden by the derived class if something else if needed.

Reimplemented in ToolHandle< T >, and ToolHandle< T >.

Definition at line 282 of file GaudiHandle.h.

282  { // not really const, because it updates m_pObject
283  comp->release();
284  return StatusCode::SUCCESS;
285  }
template<class T>
StatusCode GaudiHandle< T >::retrieve ( ) const
inline

Retrieve the component.

Release existing component if needed.

Definition at line 205 of file GaudiHandle.h.

205  { // not really const, because it updates m_pObject
206  if ( m_pObject && release().isFailure() ) return StatusCode::FAILURE;
207  if ( retrieve( m_pObject ).isFailure() ) {
208  m_pObject = nullptr;
209  return StatusCode::FAILURE;
210  }
211  return StatusCode::SUCCESS;
212  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:205
template<class T>
StatusCode GaudiHandle< T >::retrieve ( ) const
inline

Retrieve the component.

Release existing component if needed.

Definition at line 205 of file GaudiHandle.h.

205  { // not really const, because it updates m_pObject
206  if ( m_pObject && release().isFailure() ) return StatusCode::FAILURE;
207  if ( retrieve( m_pObject ).isFailure() ) {
208  m_pObject = nullptr;
209  return StatusCode::FAILURE;
210  }
211  return StatusCode::SUCCESS;
212  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:205
template<class T>
virtual StatusCode GaudiHandle< T >::retrieve ( T *&  ) const
protectedpure virtual

Retrieve the component.

To be implemented by the derived class. It will pass the pointer

Implemented in ToolHandle< T >, ToolHandle< T >, ServiceHandle< T >, ServiceHandle< T >, ServiceHandle< IToolSvc >, and ServiceHandle< IToolSvc >.

template<class T>
virtual StatusCode GaudiHandle< T >::retrieve ( T *&  ) const
protectedpure virtual

Retrieve the component.

To be implemented by the derived class. It will pass the pointer

Implemented in ToolHandle< T >, ToolHandle< T >, ServiceHandle< T >, ServiceHandle< T >, ServiceHandle< IToolSvc >, and ServiceHandle< IToolSvc >.

template<class T>
void GaudiHandle< T >::setDefaultType ( )
inlineprivate

Helper function to set default type from the class type T.

Definition at line 295 of file GaudiHandle.h.

295  {
297  }
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9
template<class T>
void GaudiHandle< T >::setDefaultType ( )
inlineprivate

Helper function to set default type from the class type T.

Definition at line 295 of file GaudiHandle.h.

295  {
297  }
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9
template<class T>
void GaudiHandle< T >::setDefaultTypeAndName ( )
inlineprivate

Helper function to set default name and type.

Definition at line 289 of file GaudiHandle.h.

289  {
290  const std::string& myType = getDefaultType();
291  GaudiHandleBase::setTypeAndName(myType+'/'+myType);
292  }
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9
template<class T>
void GaudiHandle< T >::setDefaultTypeAndName ( )
inlineprivate

Helper function to set default name and type.

Definition at line 289 of file GaudiHandle.h.

289  {
290  const std::string& myType = getDefaultType();
291  GaudiHandleBase::setTypeAndName(myType+'/'+myType);
292  }
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9

Member Data Documentation

template<class T>
T * GaudiHandle< T >::m_pObject = nullptr
mutableprivate

Definition at line 310 of file GaudiHandle.h.


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