| The Gaudi Framework v29r1 (5cd95fa2)

- 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 157 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 163 of file GaudiHandle.h.

164 : GaudiHandleBase( std::move( myTypeAndName ), std::move( myComponentType ), std::move( myParentName ) )
165 {
166 }
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:100
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 171 of file GaudiHandle.h.

173 : GaudiHandleBase( other )
174 {
175 m_pObject = other.get();
176 if ( m_pObject ) nonConst( m_pObject )->addRef();
177 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::get
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:251
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:100
template<class T>

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

Copy constructor needed for correct ref-counting.

Definition at line 180 of file GaudiHandle.h.

180 : GaudiHandleBase( other )
181 {
182 m_pObject = other.m_pObject;
183 if ( m_pObject ) nonConst( m_pObject )->addRef();
184 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
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:100

## 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 327 of file GaudiHandle.h.

328 { // not really const, because it may update m_pObject
329 if ( UNLIKELY( !isValid() ) ) {
330 throw GaudiException( "Failed to retrieve " + componentType() + ": " + typeAndName(),
331 componentType() + " retrieve", StatusCode::FAILURE );
332 }
333 }
UNLIKELY
#define UNLIKELY(x)
Definition: Kernel.h:128
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:22
StatusCode::FAILURE
Definition: StatusCode.h:31
GaudiHandle::isValid
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:238
GaudiHandleBase::typeAndName
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:111
GaudiHandleInfo::componentType
const std::string & componentType() const
Definition: GaudiHandle.h:38
template<class T>

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

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

Definition at line 251 of file GaudiHandle.h.

251 { return m_pObject; }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
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 254 of file GaudiHandle.h.

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

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

Definition at line 288 of file GaudiHandle.h.

289 {
290 const auto defName = GaudiHandleBase::type();
291 return ( defName.empty() ? getDefaultType() : defName );
292 }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:286
GaudiHandleBase::type
std::string type() const
The concrete component class name: the part before the &#39;/&#39;.
Definition: GaudiHandle.cpp:11
template<class T>

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

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

Definition at line 286 of file GaudiHandle.h.

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

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

True if the wrapped pointer is not null.

Definition at line 257 of file GaudiHandle.h.

257 { return get(); }
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 238 of file GaudiHandle.h.

239 { // not really const, because it may update m_pObject
240 return m_pObject || retrieve().isSuccess();
241 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:75
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:213
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 309 of file GaudiHandle.h.

310 {
311 return const_cast<typename std::remove_const<CLASS>::type*>( p );
312 }
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 245 of file GaudiHandle.h.

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

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

Definition at line 259 of file GaudiHandle.h.

260 {
261 assertObject();
262 return *m_pObject;
263 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:327
template<class T>

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

Definition at line 271 of file GaudiHandle.h.

272 {
273 // not really const, because it may update m_pObject
274 assertObject();
275 return *m_pObject;
276 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:327
template<class T>

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

Definition at line 265 of file GaudiHandle.h.

266 {
267 assertObject();
268 return m_pObject;
269 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:327
template<class T>

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

Definition at line 278 of file GaudiHandle.h.

279 {
280 // not really const, because it may update m_pObject
281 assertObject();
282 return m_pObject;
283 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:327
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 189 of file GaudiHandle.h.

190 {
191 GaudiHandleBase::operator=( other );
192 // release any current tool
193 release().ignore();
194 m_pObject = other.get();
195 // update ref-counting
196 if ( m_pObject ) nonConst( m_pObject )->addRef();
197 return *this;
198 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:227
operator=
PropertyMgr & operator=(const PropertyMgr &)=delete
GaudiHandle::get
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:251
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:109
template<class T>

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

Assignment operator for correct ref-counting.

Definition at line 201 of file GaudiHandle.h.

202 {
203 GaudiHandleBase::operator=( other );
204 // release any current tool
205 release().ignore();
206 m_pObject = other.m_pObject;
207 // update ref-counting
208 if ( m_pObject ) nonConst( m_pObject )->addRef();
209 return *this;
210 }
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:227
operator=
PropertyMgr & operator=(const PropertyMgr &)=delete
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:109
template<class T>

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

Release the component.

Definition at line 227 of file GaudiHandle.h.

228 { // not really const, because it updates m_pObject
229 StatusCode sc = StatusCode::SUCCESS;
230 if ( m_pObject ) {
231 sc = release( m_pObject );
232 m_pObject = nullptr;
233 }
234 return sc;
235 }
StatusCode::SUCCESS
Definition: StatusCode.h:31
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:227
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:28
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 300 of file GaudiHandle.h.

301 { // not really const, because it updates m_pObject
302 // const cast to support T being a const type
303 nonConst( comp )->release();
304 return StatusCode::SUCCESS;
305 }
StatusCode::SUCCESS
Definition: StatusCode.h:31
GaudiHandle::nonConst
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
template<class T>

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

Retrieve the component.

Release existing component if needed.

Definition at line 213 of file GaudiHandle.h.

214 { // not really const, because it updates m_pObject
215 StatusCode sc = StatusCode::SUCCESS;
216 if ( m_pObject && release().isFailure() ) {
217 sc = StatusCode::FAILURE;
218 }
219 if ( sc && retrieve( m_pObject ).isFailure() ) {
220 m_pObject = nullptr;
221 sc = StatusCode::FAILURE;
222 }
223 return sc;
224 }
StatusCode::SUCCESS
Definition: StatusCode.h:31
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:339
StatusCode::FAILURE
Definition: StatusCode.h:31
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:227
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:28
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:213
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 323 of file GaudiHandle.h.

323 { GaudiHandleBase::setTypeAndName( getDefaultType() ); }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:286
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 316 of file GaudiHandle.h.

317 {
318 const std::string& myType = getDefaultType();
319 GaudiHandleBase::setTypeAndName( myType + '/' + myType );
320 }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:286
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 339 of file GaudiHandle.h.

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

- GaudiKernel/GaudiKernel/GaudiHandle.h