The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
DataObjectHandle< T > Class Template Reference

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

#include </builds/gaudi/Gaudi/GaudiKernel/include/GaudiKernel/DataObjectHandle.h>

Inheritance diagram for DataObjectHandle< T >:
Collaboration diagram for DataObjectHandle< T >:

Public Member Functions

T * get () const
 Retrieve object from transient data store.
 
T * getIfExists () const
 Bypass check of existence of object in transient store Only uses main location of the.
 
bool exist () const
 Check the existence of the object in the transient store.
 
T * getOrCreate () const
 Get object from store or create a new one if it doesn't exist.
 
T * put (std::unique_ptr< T > object) const
 Register object in transient store.
 
std::string pythonRepr () const override
 
 DataObjectHandleBase (DataObjID k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
 
 DataObjectHandleBase (std::string k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
 
 DataObjectHandleBase (const DataObjectHandleBase &)=delete
 
 DataObjectHandleBase (DataObjectHandleBase &&)
 
template<std::derived_from< IProperty > OWNER, class K>
 DataObjectHandleBase (OWNER *owner, Gaudi::DataHandle::Mode m, std::string name, K key={}, std::string doc="")
 Autodeclaring constructor with property name, mode, key and documentation.
 
- Public Member Functions inherited from DataObjectHandleBase
 DataObjectHandleBase (DataObjID k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
 
 DataObjectHandleBase (std::string k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
 
 ~DataObjectHandleBase () override
 
 DataObjectHandleBase (const DataObjectHandleBase &)=delete
 
 DataObjectHandleBase (DataObjectHandleBase &&)
 
DataObjectHandleBaseoperator= (const DataObjectHandleBase &)
 
template<std::derived_from< IProperty > OWNER, class K>
 DataObjectHandleBase (OWNER *owner, Gaudi::DataHandle::Mode m, std::string name, K key={}, std::string doc="")
 Autodeclaring constructor with property name, mode, key and documentation.
 
bool isOptional () const
 Check if the data object declared is optional for the algorithm.
 
void setOptional (bool optional=true)
 
bool isValid () const
 
- Public Member Functions inherited from Gaudi::DataHandle
 DataHandle (DataObjID k, Mode a=Reader, IDataHandleHolder *owner=nullptr)
 
 DataHandle (DataObjID k, bool isCond, Mode a=Reader, IDataHandleHolder *owner=nullptr)
 
virtual ~DataHandle ()=default
 
virtual void setOwner (IDataHandleHolder *o)
 
virtual IDataHandleHolderowner () const
 
virtual Mode mode () const
 
virtual void setKey (DataObjID key)
 
virtual void updateKey (std::string key)
 
virtual const std::string & objKey () const
 
virtual const DataObjIDfullKey () const
 
virtual void reset (bool)
 
virtual bool isCondition () const
 

Private Member Functions

T * get (bool mustExist) const
 Try to retrieve from the transient store.
 

Private Attributes

bool m_goodType = false
 

Additional Inherited Members

- Public Types inherited from Gaudi::DataHandle
enum  Mode { Reader = 1 << 2 , Writer = 1 << 4 }
 
using PropertyType = DataHandleProperty
 
- Protected Member Functions inherited from DataObjectHandleBase
bool init () override
 
DataObjectfetch () const
 
- Protected Attributes inherited from DataObjectHandleBase
SmartIF< IDataProviderSvcm_EDS
 
SmartIF< IMessageSvcm_MS
 
bool m_init = false
 
bool m_optional = false
 
- 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.
 
IDataHandleHolderm_owner = nullptr
 
- Static Protected Attributes inherited from Gaudi::DataHandle
static const std::string default_type = "unknown_t"
 

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 110 of file DataObjectHandle.h.

Member Function Documentation

◆ DataObjectHandleBase() [1/5]

template<typename T>
DataObjectHandleBase::DataObjectHandleBase ( const DataObjectHandleBase & )
delete

◆ DataObjectHandleBase() [2/5]

template<typename T>
DataObjectHandleBase::DataObjectHandleBase ( DataObjectHandleBase && other)

Definition at line 42 of file DataObjectHandleBase.cpp.

29 , m_MS( std::move( other.m_MS ) )
32 m_owner->declare( *this );
33}
SmartIF< IDataProviderSvc > m_EDS
SmartIF< IMessageSvc > m_MS
DataObjectHandle.h GaudiKernel/DataObjectHandle.h.
IDataHandleHolder * m_owner
Definition DataHandle.h:80

◆ DataObjectHandleBase() [3/5]

template<typename T>
DataObjectHandleBase::DataObjectHandleBase ( DataObjID k,
Gaudi::DataHandle::Mode a,
IDataHandleHolder * owner )

Definition at line 37 of file DataObjectHandleBase.cpp.

49 m_owner->declare( *this );
50}
virtual IDataHandleHolder * owner() const
Definition DataHandle.h:52

◆ DataObjectHandleBase() [4/5]

template<typename T>
template<std::derived_from< IProperty > OWNER, class K>
DataObjectHandleBase::DataObjectHandleBase ( OWNER * owner,
Gaudi::DataHandle::Mode m,
std::string name,
K key = {},
std::string doc = "" )
inline

Autodeclaring constructor with property name, mode, key and documentation.

Note
the use of requires is required to avoid ambiguities

Definition at line 48 of file DataObjectHandleBase.h.

48 {},
49 std::string doc = "" )
51 auto p = owner->declareProperty( std::move( name ), *this, std::move( doc ) );
52 p->template setOwnerType<OWNER>();
53 }
DataObjectHandleBase(DataObjID k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)

◆ DataObjectHandleBase() [5/5]

template<typename T>
DataObjectHandleBase::DataObjectHandleBase ( std::string k,
Gaudi::DataHandle::Mode a,
IDataHandleHolder * owner )

Definition at line 38 of file DataObjectHandleBase.cpp.

◆ exist()

template<typename T>
bool DataObjectHandle< T >::exist ( ) const
inline

Check the existence of the object in the transient store.

Definition at line 128 of file DataObjectHandle.h.

128{ return get( false ) != nullptr; }
T * get() const
Retrieve object from transient data store.

◆ get() [1/2]

template<typename ValueType>
auto DataObjectHandle< ValueType >::get ( ) const
inline

Retrieve object from transient data store.

Definition at line 117 of file DataObjectHandle.h.

117{ return get( true ); }

◆ get() [2/2]

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 160 of file DataObjectHandle.h.

160 {
161 auto dataObj = fetch();
162 if ( !dataObj ) {
163 if ( mustExist ) { // Problems in getting from the store
164 throw GaudiException( "Cannot retrieve \'" + objKey() + "\' from transient store.",
165 m_owner ? owner()->name() : "no owner", StatusCode::FAILURE );
166 }
167 return nullptr;
168 }
170 return static_cast<T*>( dataObj );
171}
DataObject * fetch() const
virtual const std::string & objKey() const
Definition DataHandle.h:59
bool verifyType(const DataObject *dataObj)

◆ getIfExists()

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 123 of file DataObjectHandle.h.

123{ return get( false ); }

◆ getOrCreate()

template<typename T>
T * DataObjectHandle< T >::getOrCreate ( ) const

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

Definition at line 184 of file DataObjectHandle.h.

184 {
185 T* obj = get( false );
186 return obj ? obj : put( std::make_unique<T>() );
187}
T * put(std::unique_ptr< T > object) const
Register object in transient store.

◆ put()

template<typename T>
T * DataObjectHandle< T >::put ( std::unique_ptr< T > object) const

Register object in transient store.

Definition at line 175 of file DataObjectHandle.h.

175 {
176 assert( m_init );
177 StatusCode sc = m_EDS->registerObject( objKey(), objectp.get() );
178 if ( !sc.isSuccess() ) { throw GaudiException( "Error in put of " + objKey(), "DataObjectHandle<T>::put", sc ); }
179 return objectp.release();
180}

◆ pythonRepr()

template<typename T>
std::string DataObjectHandle< T >::pythonRepr ( ) const
inlineoverridevirtual

Reimplemented from Gaudi::DataHandle.

Definition at line 140 of file DataObjectHandle.h.

140 {
142 System::typeinfoName( typeid( T ) ) );
143 }
static const std::string default_type
Definition DataHandle.h:82

Member Data Documentation

◆ m_goodType

template<typename T>
bool DataObjectHandle< T >::m_goodType = false
mutableprivate

Definition at line 147 of file DataObjectHandle.h.


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