Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v31r0 (aeb156f0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SmartDataObjectPtr.cpp
Go to the documentation of this file.
1 // ====================================================================
2 // SmartDataObjectPtr.cpp
3 // --------------------------------------------------------------------
4 //
5 // Package :
6 //
7 // Author : Markus Frank
8 //
9 // ====================================================================
10 #define GAUDIKERNEL_SMARTDATAOBJECTPTR_CPP 1
11 
12 // Framework include files
14 #include "GaudiKernel/DataObject.h"
16 
18 
20 
23  m_path = copy.m_path;
24  m_pRegistry = copy.m_pRegistry;
26  return *this;
27 }
28 
31  return ( m_dataProvider && pRegistry ) ? m_dataProvider->retrieveObject( pRegistry, path, refpObject )
33 }
34 
37  return m_dataProvider ? m_dataProvider->retrieveObject( fullPath, refpObject ) : StatusCode::FAILURE;
38 }
39 
42  return ( m_dataProvider && pDirectory ) ? m_dataProvider->findObject( pDirectory, path, refpObject )
44  ;
45 }
46 
48 StatusCode SmartDataObjectPtr::find( const std::string& fullPath, DataObject*& refpObject ) {
49  return m_dataProvider ? m_dataProvider->findObject( fullPath, refpObject ) : StatusCode::FAILURE;
50 }
51 
54  return ( m_dataProvider && pRegistry ) ? m_dataProvider->updateObject( pRegistry ) : StatusCode::FAILURE;
55 }
56 
60 }
61 
68  DataObject* pObj = nullptr;
69  m_status = ( !m_pRegistry ? retrieve( m_path, pObj ) : retrieve( m_pRegistry, m_path, pObj ) );
70  if ( m_status.isSuccess() ) {
71  m_pRegistry = pObj->registry();
72  m_path.clear();
73  }
74  return pObj;
75 }
76 
83  DataObject* pObj = nullptr;
84  m_status = ( m_pRegistry ? find( m_pRegistry, m_path, pObj ) : find( m_path, pObj ) );
85  if ( m_status.isSuccess() ) {
86  m_pRegistry = pObj->registry();
87  m_path.clear();
88  }
89  return pObj;
90 }
91 
98  DataObject* pObj = accessData(); // Have to load AND update if not present.
99  if ( m_status.isSuccess() ) {
101  if ( !m_status.isSuccess() ) pObj = nullptr;
102  }
103  return pObj;
104 }
105 
118 bool operator&&( SmartDataObjectPtr& object_1, SmartDataObjectPtr& object_2 ) {
119  return object_1.accessData() && object_2.accessData();
120 }
121 
138 bool operator||( SmartDataObjectPtr& object_1, SmartDataObjectPtr& object_2 ) {
139  return object_1.accessData() || object_2.accessData();
140 }
static DataObject * find(SmartDataObjectPtr *ptr)
Static Object find method.
bool operator||(SmartDataObjectPtr &object_1, SmartDataObjectPtr &object_2)
Helper to test Smart data objects efficiently This construct allows statements like: SmartEvtDataPtr<...
DataObject * retrieveObject()
Object retrieve method.
virtual StatusCode findObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Find object identified by its directory entry.
bool isSuccess() const
Definition: StatusCode.h:267
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
static DataObject * update(SmartDataObjectPtr *ptr)
Static Object update method.
static DataObject * retrieve(SmartDataObjectPtr *ptr)
Static Object retrieval method.
STL class.
bool operator&&(SmartDataObjectPtr &object_1, SmartDataObjectPtr &object_2)
Helper to test Smart data objects efficiently This construct allows statements like: SmartEvtDataPtr<...
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
virtual StatusCode updateObject(IRegistry *pDirectory)=0
Update object identified by its directory entry.
std::string m_path
Path to object.
DataObject * accessData()
Static Object retrieval method: must call specific function.
const std::string & path() const
Path name.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
virtual StatusCode retrieveObject(IRegistry *pDirectory, boost::string_ref path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
T clear(T...args)
virtual SmartDataObjectPtr & operator=(const SmartDataObjectPtr &)
Assignment operator.
StatusCode m_status
Keep track of the last error.
A small class used to access easily (and efficiently) data items residing in data stores...
DataObject * findObject()
Object find method.
IDataProviderSvc * m_dataProvider
Pointer to contained object.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
DataObject *(*)(SmartDataObjectPtr *ptr) AccessFunction
IRegistry * m_pRegistry
Pointer to the data registry containing the object.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
DataObject * updateObject()
Object update method.