| The Gaudi Framework v28r2p1 (f1a77ff4)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Private Member Functions | Private Attributes | List of all members
DataObjectHandle< T > Class Template Reference

DataObjectHandle.h GaudiKernel/DataObjectHandle.h. More...

`#include <GaudiKernel/AlgTool.h>`

Inheritance diagram for DataObjectHandle< T >:
[legend]
Collaboration diagram for DataObjectHandle< T >:
[legend]

## Public Member Functions
T * | get () const
| Retrieve object from transient data store. More...
T * | getIfExists () const
| Bypass check of existence of object in transient store Only uses main location of the. More...
bool | exist () const
| Check the existence of the object in the transient store. More...
T * | getOrCreate ()
| Get object from store or create a new one if it doesn't exist. More...
T * | put (T *object)
| Register object in transient store. More...
Public Member Functions inherited from DataObjectHandleBase
| DataObjectHandleBase (const DataObjID &k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
| DataObjectHandleBase (const std::string &k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
virtual | ~DataObjectHandleBase ()
| DataObjectHandleBase (const DataObjectHandleBase &)=delete
| DataObjectHandleBase (DataObjectHandleBase &&)
DataObjectHandleBase & | operator= (const DataObjectHandleBase &)
std::string | toString () const
std::string | pythonRepr () const override
void | fromString (const std::string &s)
bool | isOptional () const
| Check if the data object declared is optional for the algorithm. More...
void | setOptional (bool optional=true)
bool | initialized () const
bool | wasRead () const
bool | wasWritten () const
bool | isValid () const
Public Member Functions inherited from Gaudi::DataHandle
| DataHandle (const DataObjID &k, Mode a=Reader, IDataHandleHolder *owner=nullptr)
| DataHandle (const DataObjID &k, const bool &isCond, Mode a=Reader, IDataHandleHolder *owner=nullptr)
virtual | ~DataHandle ()=default
virtual void | setOwner (IDataHandleHolder *o)
virtual IDataHandleHolder * | owner () const
virtual Mode | mode () const
virtual void | setKey (const DataObjID &key) const
virtual void | updateKey (const std::string &key) const
virtual const std::string & | objKey () const
virtual const DataObjID & | fullKey () const
virtual void | reset (bool)
virtual StatusCode | commit ()
virtual bool | isCondition () const

## Private Member Functions
T * | get (bool mustExist) const
| Try to retrieve from the transient store. More...

## Private Attributes
bool | m_goodType = false

## Additional Inherited Members
Public Types inherited from Gaudi::DataHandle
enum | Mode { Reader = 1<<2, Writer = 1<<4, Updater = Reader | Writer }
Protected Member Functions inherited from DataObjectHandleBase
void | setRead (bool wasRead=true)
void | setWritten (bool wasWritten=true)
bool | init () override
DataObject * | fetch () const
Protected Attributes inherited from DataObjectHandleBase
SmartIF< IDataProviderSvc > | m_EDS
SmartIF< IMessageSvc > | m_MS
bool | m_init = false
bool | m_optional = false
bool | m_wasRead = false
bool | m_wasWritten = false
bool | m_searchDone = false
| Whether the search part of the fetch method (so dealing with alt names was already executed or not. More...
std::mutex | m_searchMutex
| A Mutex protecting the calls to the search part of the fetch method, so that we are sure that we only call it once. More...
Protected Attributes inherited from Gaudi::DataHandle
DataObjID | m_key = { "NONE" }
| The key of the object behind this DataHandle Although it may look strange to have it mutable, this can actually change in case the object had alternative names, and it should not be visible to the end user, for which the Handle is still the same. More...
IDataHandleHolder * | m_owner = nullptr

## Detailed Description

### template<typename T>
class DataObjectHandle< T >

DataObjectHandle.h GaudiKernel/DataObjectHandle.h.

Templated Handle class for objects in the event store

Inheritance: DataHandle->DataObjectHandleBase->DataObjectHandle<T>

Author
  Charles Leggett

Date
  2015-09-01

Definition at line 27 of file AlgTool.h.

## Member Function Documentation

template<typename T>

bool DataObjectHandle< T >::exist | ( |  | ) | const
| inline

Check the existence of the object in the transient store.

Definition at line 47 of file DataObjectHandle.h.

47 { return get(false) != nullptr; }
template<typename T>

T* DataObjectHandle< T >::get | ( |  | ) | const
| inline

Retrieve object from transient data store.

Definition at line 36 of file DataObjectHandle.h.

36 { return get(true); }
template<typename T >

T * DataObjectHandle< T >::get | ( | bool | mustExist | ) | const
| private

Try to retrieve from the transient store.

If the retrieval succeded and this is the first time we retrieve, perform a dynamic cast to the desired object. Then finally set the handle as Read. If this is not the first time we cast and the cast worked, just use the static cast: we do not need the checks of the dynamic cast for every access!

Definition at line 76 of file DataObjectHandle.h.

76 {
77
78 auto dataObj = fetch();
79
80 if (UNLIKELY(!dataObj) ) {
81 if (mustExist) { // Problems in getting from the store
82 throw GaudiException("Cannot retrieve " + objKey() +
83 " from transient store.",
84 m_owner ? owner()->name() : "no owner",
85 StatusCode::FAILURE);
86 }
87 return nullptr;
88 }
89
90 if (UNLIKELY(!m_goodType)) { // Check type compatibility once
91
92 T* obj = dynamic_cast<T*>(dataObj);
93 m_goodType = ( obj!=nullptr );
94
95 if (UNLIKELY(!m_goodType)) {
96
97 std::string errorMsg("The type provided for "+ objKey()
98 + " is " + System::typeinfoName(typeid(T))
99 + " and is different from the one of the object in the store.");
100 //log << MSG::ERROR << errorMsg << endmsg;
101 throw GaudiException (errorMsg,"Wrong DataObjectType",StatusCode::FAILURE);
102 }
103 //log << MSG::DEBUG << "The data type (" << typeid(T).name()
104 // << ") specified for the handle of " << dataProductName()
105 // << " is the same of the object in the store. "
106 // << "From now on the result of a static_cast will be returned." << endmsg;
107 return obj;
108 }
109
110 // setRead();
111 // From the second read on, this is safe
112 return static_cast<T*> (dataObj);
113 }
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:23
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:28
StatusCode::FAILURE
Definition: StatusCode.h:29
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:299
Gaudi::DataHandle::objKey
virtual const std::string & objKey() const
Definition: DataHandle.h:56
DataObjectHandle::m_goodType
bool m_goodType
Definition: DataObjectHandle.h:62
UNLIKELY
#define UNLIKELY(x)
Definition: Kernel.h:126
std::string
STL class.
Gaudi::DataHandle::m_owner
IDataHandleHolder * m_owner
Definition: DataHandle.h:77
DataObjectHandleBase::fetch
DataObject * fetch() const
Definition: DataObjectHandleBase.cpp:66
Gaudi::DataHandle::owner
virtual IDataHandleHolder * owner() const
Definition: DataHandle.h:49
template<typename T>

T* DataObjectHandle< T >::getIfExists | ( |  | ) | const
| inline

Bypass check of existence of object in transient store Only uses main location of the.

Definition at line 42 of file DataObjectHandle.h.

42 { return get(false); }
template<typename T >

T * DataObjectHandle< T >::getOrCreate | ( |  | ) |

Get object from store or create a new one if it doesn't exist.

Definition at line 130 of file DataObjectHandle.h.

130 {
131
132 //this process needs to be locking for multi-threaded applications
133 //lock(); --> done in caller
134
135 T* obj = get(false);
136
137 //object exists, we are done
138 if(obj){
139 //unlock();
140 return obj;
141 }
142
143 //create it
144 return put(new T{});
145
146 //unlock();
147 }
DataObjectHandle::put
T * put(T *object)
Register object in transient store.
Definition: DataObjectHandle.h:117
template<typename T>

T * DataObjectHandle< T >::put | ( | T * | object | ) |

Register object in transient store.

Definition at line 117 of file DataObjectHandle.h.

117 {
118 assert(m_init);
119 StatusCode rc = m_EDS->registerObject(objKey(), objectp);
120 if (!rc.isSuccess()) {
121 throw GaudiException("Error in put of " + objKey(),
122 "DataObjectHandle<T>::put",
123 StatusCode::FAILURE);
124 }
125 return objectp;
126 }
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:23
StatusCode::FAILURE
Definition: StatusCode.h:29
Gaudi::DataHandle::objKey
virtual const std::string & objKey() const
Definition: DataHandle.h:56
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
DataObjectHandleBase::m_EDS
SmartIF< IDataProviderSvc > m_EDS
Definition: DataObjectHandleBase.h:65
DataObjectHandleBase::m_init
bool m_init
Definition: DataObjectHandleBase.h:68
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
IOTest.rc
rc
Definition: IOTest.py:92
IDataProviderSvc::registerObject
virtual StatusCode registerObject(const std::string &fullPath, DataObject *pObject)=0
Register object with the data store.

## Member Data Documentation

template<typename T>

bool DataObjectHandle< T >::m_goodType = false
| mutable private

Definition at line 62 of file DataObjectHandle.h.

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

- GaudiKernel/GaudiKernel/AlgTool.h
- GaudiKernel/GaudiKernel/DataObjectHandle.h