| 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
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 >:
[legend]
Collaboration diagram for GaudiHandle< T >:
[legend]

## Public Member Functions
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
| 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...
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
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 172 of file GaudiHandle.h.

## Constructor & Destructor Documentation

template<class T>

GaudiHandle< T >::GaudiHandle | ( | std::string | myTypeAndName,
|  | std::string | myComponentType,
|  | std::string | myParentName
| ) |  |
| inline protected

Definition at line 177 of file GaudiHandle.h.

179 : GaudiHandleBase(std::move(myTypeAndName), std::move(myComponentType), std::move(myParentName))
180 {}
std::move
T move(T...args)
GaudiHandleBase::GaudiHandleBase
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle (&#39;smart pointer&#39;) to a gaudi component.
Definition: GaudiHandle.h:110
template<class T>
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>

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

Copy constructor needed for correct ref-counting.

Definition at line 187 of file GaudiHandle.h.

190 : GaudiHandleBase( other ) {
191 m_pObject = other.get();
192 if ( m_pObject ) nonConst(m_pObject)->addRef();
193 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::get
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:262
GaudiHandleBase::GaudiHandleBase
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle (&#39;smart pointer&#39;) to a gaudi component.
Definition: GaudiHandle.h:110
template<class T>

GaudiHandle< T >::GaudiHandle | ( | const GaudiHandle< T > & | other | ) |
| inline

Copy constructor needed for correct ref-counting.

Definition at line 196 of file GaudiHandle.h.

197 : GaudiHandleBase( other ) {
198 m_pObject = other.m_pObject;
199 if ( m_pObject ) nonConst(m_pObject)->addRef();
200 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandleBase::GaudiHandleBase
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle (&#39;smart pointer&#39;) to a gaudi component.
Definition: GaudiHandle.h:110

## Member Function Documentation

template<class T>

void GaudiHandle< T >::assertObject | ( |  | ) | const
| inline private

Load the pointer to the component.

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

Definition at line 341 of file GaudiHandle.h.

341 { // not really const, because it may update m_pObject
342 if ( UNLIKELY(!isValid()) ) {
343 throw GaudiException("Failed to retrieve " + componentType() + ": " + typeAndName(),
344 componentType() + " retrieve", StatusCode::FAILURE);
345 }
346 }
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:23
StatusCode::FAILURE
Definition: StatusCode.h:29
UNLIKELY
#define UNLIKELY(x)
Definition: Kernel.h:126
GaudiHandle::isValid
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:251
GaudiHandleBase::typeAndName
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:121
GaudiHandleInfo::componentType
const std::string & componentType() const
Definition: GaudiHandle.h:35
template<class T>

T* GaudiHandle< T >::get | ( |  | ) |
| inline

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

Definition at line 262 of file GaudiHandle.h.

262 { return m_pObject; }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
template<class T>

std::add_const<T>::type* GaudiHandle< T >::get | ( |  | ) | const
| inline

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

Definition at line 265 of file GaudiHandle.h.

265 {
266 return m_pObject;
267 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
template<class T>

std::string GaudiHandle< T >::getDefaultName | ( |  | ) |
| inline

Definition at line 301 of file GaudiHandle.h.

301 {
302 const auto defName = GaudiHandleBase::type();
303 return ( defName.empty() ? getDefaultType() : defName );
304 }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:297
GaudiHandleBase::type
std::string type() const
The concrete component class name: the part before the &#39;/&#39;.
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 297 of file GaudiHandle.h.

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

bool GaudiHandle< T >::isSet | ( |  | ) | const
| inline

True if the wrapped pointer is not null.

Definition at line 270 of file GaudiHandle.h.

270 {
271 return get();
272 }
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 251 of file GaudiHandle.h.

251 { // not really const, because it may update m_pObject
252 return m_pObject || retrieve().isSuccess();
253 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:228
template<class T>
template<class CLASS >

std::remove_const<CLASS>::type* GaudiHandle< T >::nonConst | ( | CLASS * | p | ) | const
| inline protected

Cast a pointer to a non const type.

Definition at line 321 of file GaudiHandle.h.

322 {
323 return const_cast< typename std::remove_const<CLASS>::type * >( p );
324 }
std::remove_const
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 257 of file GaudiHandle.h.

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

T& GaudiHandle< T >::operator* | ( |  | ) |
| inline

Definition at line 274 of file GaudiHandle.h.

274 {
275 assertObject();
276 return *m_pObject;
277 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:341
template<class T>

std::add_const<T>::type& GaudiHandle< T >::operator* | ( |  | ) | const
| inline

Definition at line 284 of file GaudiHandle.h.

284 {
285 // not really const, because it may update m_pObject
286 assertObject();
287 return *m_pObject;
288 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:341
template<class T>

T* GaudiHandle< T >::operator-> | ( |  | ) |
| inline

Definition at line 279 of file GaudiHandle.h.

279 {
280 assertObject();
281 return m_pObject;
282 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:341
template<class T>

std::add_const<T>::type* GaudiHandle< T >::operator-> | ( |  | ) | const
| inline

Definition at line 290 of file GaudiHandle.h.

290 {
291 // not really const, because it may update m_pObject
292 assertObject();
293 return m_pObject;
294 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:341
template<class T>
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 GaudiHandle< T >::operator= | ( | const GaudiHandle< NCT > & | other | ) |
| inline

Assignment operator for correct ref-counting.

Definition at line 206 of file GaudiHandle.h.

206 {
207 GaudiHandleBase::operator=( other );
208 // release any current tool
209 release().ignore();
210 m_pObject = other.get();
211 // update ref-counting
212 if ( m_pObject ) nonConst(m_pObject)->addRef();
213 return *this;
214 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:240
operator=
PropertyMgr & operator=(const PropertyMgr &)=delete
GaudiHandle::get
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:262
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:106
template<class T>

GaudiHandle& GaudiHandle< T >::operator= | ( | const GaudiHandle< T > & | other | ) |
| inline

Assignment operator for correct ref-counting.

Definition at line 217 of file GaudiHandle.h.

217 {
218 GaudiHandleBase::operator=( other );
219 // release any current tool
220 release().ignore();
221 m_pObject = other.m_pObject;
222 // update ref-counting
223 if ( m_pObject ) nonConst(m_pObject)->addRef();
224 return *this;
225 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:321
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:240
operator=
PropertyMgr & operator=(const PropertyMgr &)=delete
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:106
template<class T>

StatusCode GaudiHandle< T >::release | ( |  | ) | const
| inline

Release the component.

Definition at line 240 of file GaudiHandle.h.

240 { // not really const, because it updates m_pObject
241 StatusCode sc = StatusCode::SUCCESS;
242 if ( m_pObject )
243 {
244 sc = release( m_pObject );
245 m_pObject = nullptr;
246 }
247 return sc;
248 }
StatusCode::SUCCESS
Definition: StatusCode.h:30
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:240
StatusCode
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
| inline protected virtual

Release the component.

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

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

Definition at line 313 of file GaudiHandle.h.

313 { // not really const, because it updates m_pObject
314 // const cast to support T being a const type
315 nonConst(comp)->release();
316 return StatusCode::SUCCESS;
317 }
StatusCode::SUCCESS
Definition: StatusCode.h:30
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 GaudiHandle< T >::retrieve | ( |  | ) | const
| inline

Retrieve the component.

Release existing component if needed.

Definition at line 228 of file GaudiHandle.h.

228 { // not really const, because it updates m_pObject
229 StatusCode sc = StatusCode::SUCCESS;
230 if ( m_pObject && release().isFailure() ) { sc = StatusCode::FAILURE; }
231 if ( sc && retrieve( m_pObject ).isFailure() )
232 {
233 m_pObject = nullptr;
234 sc = StatusCode::FAILURE;
235 }
236 return sc;
237 }
StatusCode::SUCCESS
Definition: StatusCode.h:30
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:353
StatusCode::FAILURE
Definition: StatusCode.h:29
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:240
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:228
template<class T>

virtual StatusCode GaudiHandle< T >::retrieve | ( | T *& |  | ) | const
| protected pure virtual

Retrieve the component.

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

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

template<class T>

void GaudiHandle< T >::setDefaultType | ( |  | ) |
| inline private

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

Definition at line 335 of file GaudiHandle.h.

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

void GaudiHandle< T >::setDefaultTypeAndName | ( |  | ) |
| inline private

Helper function to set default name and type.

Definition at line 329 of file GaudiHandle.h.

329 {
330 const std::string& myType = getDefaultType();
331 GaudiHandleBase::setTypeAndName(myType+'/'+myType);
332 }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:297
GaudiHandleBase::setTypeAndName
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9
std::string
STL class.

## Member Data Documentation

template<class T>

T* GaudiHandle< T >::m_pObject = nullptr
| mutable private

Definition at line 353 of file GaudiHandle.h.

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

- GaudiKernel/GaudiKernel/GaudiHandle.h