Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v31r0 (aeb156f0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SmartDataPtr.h
Go to the documentation of this file.
1 // ====================================================================
2 // SmartDataPtr.h
3 // --------------------------------------------------------------------
4 //
5 // Package : GaudiKernel ( The LHCb Offline System)
6 //
7 // Description: Implementation of a smart pointer class to access
8 // easily (and efficiently) data stores.
9 //
10 // Author : M.Frank
11 // ====================================================================
12 #ifndef GAUDIKERNEL_SMARTDATAPTR_H
13 #define GAUDIKERNEL_SMARTDATAPTR_H 1
14 
15 // Framework include files
16 #include "GaudiKernel/DataObject.h"
18 
46 template <class TYPE>
47 class SmartDataPtr : public SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader> {
48 public:
50 #if !defined( __ICC ) && !defined( __COVERITY__ )
51  // icc and Coverity do not like this line, they fail with
52  // SmartDataPtr.h(147): internal error: assertion failed: add_symbol_to_overload_list:
53  // symbol not in symbol header list (shared/edgcpfe/symbol_tbl.c, line 4804)
55 #endif
56 
64  SmartDataPtr( IDataProviderSvc* pService, const std::string& fullPath )
65  : SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader>( pService, nullptr, fullPath ) {}
66 
75  SmartDataPtr( IDataProviderSvc* pService, IRegistry* pDirectory )
76  : SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader>( pService, pDirectory, "" ) {}
77 
89  SmartDataPtr( IDataProviderSvc* pService, DataObject* pObject, const std::string& path )
90  : SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader>( pService, nullptr, path ) {
91  if ( pObject ) this->m_pRegistry = pObject->registry();
92  }
93 
103  SmartDataPtr( SmartDataObjectPtr& refObject, IRegistry* pDirectory )
104  : SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader>( refObject.service(), pDirectory, "" ) {}
105 
116  : SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader>( refObject.service(), refObject.directory(), path ) {}
117 
122 
125  virtual ~SmartDataPtr() = default;
126 
128  template <class OTHER>
129  SmartDataPtr& operator=( OTHER* pObj ) {
130  this->m_pObject = dynamic_cast<TYPE*>( pObj );
131  return *this;
132  }
133 
135  template <class OTHER>
136  SmartDataPtr& operator=( const OTHER* pObj ) {
137  this->m_pObject = dynamic_cast<TYPE*>( const_cast<OTHER*>( pObj ) );
138  return *this;
139  }
140 };
141 
142 #endif // GAUDIKERNEL_SMARTDATAPTR_H
SmartDataPtr(SmartDataObjectPtr &refObject, const std::string &path)
Standard constructor: Construct an SmartDataPtr instance which is able to connect to a DataObject ins...
Definition: SmartDataPtr.h:115
SmartDataPtr & operator=(const OTHER *pObj)
Automatic conversion to data type.
Definition: SmartDataPtr.h:136
Data provider interface definition.
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:72
IDataProviderSvc * service()
Retrieve data service.
STL class.
virtual ~SmartDataPtr()=default
Standard destructor.
Helper class to configure smart pointer functionality.
const std::string & path() const
Path name.
SmartDataPtr(const SmartDataObjectPtr &copy)
Copy constructor: Construct an copy of a SmartDataPtr instance.
Definition: SmartDataPtr.h:121
SmartDataPtr(IDataProviderSvc *pService, const std::string &fullPath)
Standard constructor: Construct an SmartDataPtr instance which is able to connect to a DataObject ins...
Definition: SmartDataPtr.h:64
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
SmartDataPtr(IDataProviderSvc *pService, IRegistry *pDirectory)
Standard constructor: Construct an SmartDataPtr instance which is able to connect to a DataObject ins...
Definition: SmartDataPtr.h:75
SmartDataPtr & operator=(OTHER *pObj)
Automatic conversion to data type.
Definition: SmartDataPtr.h:129
A small class used to access easily (and efficiently) data items residing in data stores...
A small class used to access easily (and efficiently) data items residing in data stores...
SmartDataPtr(SmartDataObjectPtr &refObject, IRegistry *pDirectory)
Standard constructor: Construct an SmartDataPtr instance which is able to connect to a DataObject ins...
Definition: SmartDataPtr.h:103
A small class used to access easily (and efficiently) data items residing in data stores...
Definition: SmartDataPtr.h:47
IRegistry * directory()
Access to data directory.
SmartDataPtr(IDataProviderSvc *pService, DataObject *pObject, const std::string &path)
Standard constructor: Construct an SmartDataPtr instance which is able to connect to a DataObject ins...
Definition: SmartDataPtr.h:89
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