| The Gaudi Framework v27r1

- 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
| GaudiHandle (const GaudiHandle &other)
| Copy constructor needed for correct ref-counting. More...
GaudiHandle & | operator= (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...
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 171 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 176 of file GaudiHandle.h.

178 : GaudiHandleBase(std::move(myTypeAndName), std::move(myComponentType), std::move(myParentName))
179 {}
std::move
T move(T...args)
GaudiHandleBase::GaudiHandleBase
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandleBase::GaudiHandleBase
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
| inline private

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 }
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:23
StatusCode::FAILURE
Definition: StatusCode.h:29
GaudiHandle::isValid
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Definition: GaudiHandle.h:225
GaudiHandleBase::typeAndName
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:120
GaudiHandleInfo::componentType
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
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::empty
T empty(T...args)
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
std::string
STL class.
GaudiHandleBase::type
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 }
System::typeinfoName
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 >::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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
GaudiHandle::retrieve
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 }
GaudiHandle::isValid
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::assertObject
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::assertObject
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::assertObject
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::assertObject
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
StatusCode::ignore
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 ) {
217 StatusCode sc = release( m_pObject );
218 m_pObject = nullptr;
219 return sc;
220 }
221 return StatusCode::SUCCESS;
222 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
merge_files.sc
int sc
Definition: merge_files.py:167
StatusCode::SUCCESS
Definition: StatusCode.h:30
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 if needed.

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

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 }
StatusCode::SUCCESS
Definition: StatusCode.h:30
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 }
GaudiHandle::m_pObject
T * m_pObject
Definition: GaudiHandle.h:310
GaudiHandle::release
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:215
StatusCode::FAILURE
Definition: StatusCode.h:29
StatusCode::SUCCESS
Definition: StatusCode.h:30
GaudiHandle::retrieve
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:205
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 295 of file GaudiHandle.h.

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

289 {
290 const std::string& myType = getDefaultType();
291 GaudiHandleBase::setTypeAndName(myType+'/'+myType);
292 }
GaudiHandle::getDefaultType
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:266
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 310 of file GaudiHandle.h.

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

- GaudiKernel/GaudiKernel/GaudiHandle.h