| The Gaudi Framework v30r0 (c919700c)

- 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...
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 167 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 173 of file GaudiHandle.h.

174 : GaudiHandleBase( std::move( myTypeAndName ), std::move( myComponentType ), std::move( myParentName ) )
175 {
176 }
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 181 of file GaudiHandle.h.

183 : GaudiHandleBase( other )
184 {
185 m_pObject = other.get();
186 if ( m_pObject ) details::nonConst( m_pObject )->addRef();
187 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
details::nonConst
std::remove_const_t< T > * nonConst(T *p)
Cast a pointer to a non const type.
Definition: GaudiHandle.h:20
GaudiHandle::get
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:261
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 190 of file GaudiHandle.h.

190 : GaudiHandleBase( other )
191 {
192 m_pObject = other.m_pObject;
193 if ( m_pObject ) details::nonConst( m_pObject )->addRef();
194 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
details::nonConst
std::remove_const_t< T > * nonConst(T *p)
Cast a pointer to a non const type.
Definition: GaudiHandle.h:20
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 330 of file GaudiHandle.h.

331 { // not really const, because it may update m_pObject
332 if ( UNLIKELY( !isValid() ) ) {
333 throw GaudiException( "Failed to retrieve " + componentType() + ": " + typeAndName(),
334 componentType() + " retrieve", StatusCode::FAILURE );
335 }
336 }
UNLIKELY
#define UNLIKELY(x)
Definition: Kernel.h:128
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:22
GaudiHandle::isValid
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:248
StatusCode::FAILURE
Definition: StatusCode.h:29
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:48
template<class T>

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

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

Definition at line 261 of file GaudiHandle.h.

261 { return m_pObject; }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
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 264 of file GaudiHandle.h.

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

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

Definition at line 298 of file GaudiHandle.h.

299 {
300 const auto defName = GaudiHandleBase::type();
301 return ( defName.empty() ? getDefaultType() : defName );
302 }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:296
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 296 of file GaudiHandle.h.

296 { 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:336
template<class T>

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

True if the wrapped pointer is not null.

Definition at line 267 of file GaudiHandle.h.

267 { 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 248 of file GaudiHandle.h.

249 { // not really const, because it may update m_pObject
250 return m_pObject || retrieve().isSuccess();
251 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:50
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:223
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 255 of file GaudiHandle.h.

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

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

Definition at line 269 of file GaudiHandle.h.

270 {
271 assertObject();
272 return *m_pObject;
273 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:330
template<class T>

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

Definition at line 281 of file GaudiHandle.h.

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

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

Definition at line 275 of file GaudiHandle.h.

276 {
277 assertObject();
278 return m_pObject;
279 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:330
template<class T>

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

Definition at line 288 of file GaudiHandle.h.

289 {
290 // not really const, because it may update m_pObject
291 assertObject();
292 return m_pObject;
293 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::assertObject
void assertObject() const
Load the pointer to the component.
Definition: GaudiHandle.h:330
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 199 of file GaudiHandle.h.

200 {
201 GaudiHandleBase::operator=( other );
202 // release any current tool
203 release().ignore();
204 m_pObject = other.get();
205 // update ref-counting
206 if ( m_pObject ) details::nonConst( m_pObject )->addRef();
207 return *this;
208 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:237
operator=
PropertyMgr & operator=(const PropertyMgr &)=delete
details::nonConst
std::remove_const_t< T > * nonConst(T *p)
Cast a pointer to a non const type.
Definition: GaudiHandle.h:20
GaudiHandle::get
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:261
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:84
template<class T>

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

Assignment operator for correct ref-counting.

Definition at line 211 of file GaudiHandle.h.

212 {
213 GaudiHandleBase::operator=( other );
214 // release any current tool
215 release().ignore();
216 m_pObject = other.m_pObject;
217 // update ref-counting
218 if ( m_pObject ) details::nonConst( m_pObject )->addRef();
219 return *this;
220 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:237
operator=
PropertyMgr & operator=(const PropertyMgr &)=delete
details::nonConst
std::remove_const_t< T > * nonConst(T *p)
Cast a pointer to a non const type.
Definition: GaudiHandle.h:20
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:84
template<class T>

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

Release the component.

Definition at line 237 of file GaudiHandle.h.

238 { // not really const, because it updates m_pObject
239 StatusCode sc = StatusCode::SUCCESS;
240 if ( m_pObject ) {
241 sc = release( m_pObject );
242 m_pObject = nullptr;
243 }
244 return sc;
245 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:237
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 310 of file GaudiHandle.h.

311 { // not really const, because it updates m_pObject
312 // const cast to support T being a const type
313 details::nonConst( comp )->release();
314 return StatusCode::SUCCESS;
315 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
details::nonConst
std::remove_const_t< T > * nonConst(T *p)
Cast a pointer to a non const type.
Definition: GaudiHandle.h:20
template<class T>

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

Retrieve the component.

Release existing component if needed.

Definition at line 223 of file GaudiHandle.h.

224 { // not really const, because it updates m_pObject
225 StatusCode sc = StatusCode::SUCCESS;
226 if ( m_pObject && release().isFailure() ) {
227 sc = StatusCode::FAILURE;
228 }
229 if ( sc && retrieve( m_pObject ).isFailure() ) {
230 m_pObject = nullptr;
231 sc = StatusCode::FAILURE;
232 }
233 return sc;
234 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:342
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:237
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:223
StatusCode::FAILURE
Definition: StatusCode.h:29
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 326 of file GaudiHandle.h.

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

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

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

- GaudiKernel/GaudiKernel/GaudiHandle.h