| # Gaudi Framework, version v25r0 |

Home |  | Generated: Mon Feb 17 2014

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

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups 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/SmartDataStorePtr.h"
17 #include "GaudiKernel/DataObject.h"
18
46 template<class TYPE> class SmartDataPtr : public SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader> {
47 public:
48
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)
54 using SmartDataStorePtr<TYPE, SmartDataObjectPtr::ObjectLoader>::operator=;
55 #endif
56
64 SmartDataPtr(IDataProviderSvc* pService, const std::string& fullPath)
65 : SmartDataStorePtr<TYPE,SmartDataObjectPtr::ObjectLoader>( pService,0,fullPath)
66 {
67 }
68
77 SmartDataPtr(IDataProviderSvc* pService, IRegistry* pDirectory)
78 : SmartDataStorePtr<TYPE,SmartDataObjectPtr::ObjectLoader>( pService,pDirectory,"")
79 {
80 }
81
93 SmartDataPtr(IDataProviderSvc* pService, DataObject* pObject, const std::string& path)
94 : SmartDataStorePtr<TYPE,SmartDataObjectPtr::ObjectLoader>( pService,0,path)
95 {
96 if ( 0 != pObject ) {
97 this->m_pRegistry = pObject->registry();
98 }
99 }
100
110 SmartDataPtr(SmartDataObjectPtr& refObject, IRegistry* pDirectory)
111 : SmartDataStorePtr<TYPE,SmartDataObjectPtr::ObjectLoader>( refObject.service(), pDirectory, "")
112 {
113 }
114
124 SmartDataPtr(SmartDataObjectPtr& refObject, const std::string& path)
125 : SmartDataStorePtr<TYPE,SmartDataObjectPtr::ObjectLoader>( refObject.service(), refObject.directory(), path)
126 {
127 }
128
132 SmartDataPtr(const SmartDataObjectPtr& copy)
133 : SmartDataStorePtr<TYPE,SmartDataObjectPtr::ObjectLoader>( copy )
134 {
135 }
136
139 virtual ~SmartDataPtr() {
140 }
141
143 template <class OTHER>
144 SmartDataPtr& operator=( OTHER* pObj ) {
145 this->m_pObject = dynamic_cast<TYPE*>(pObj);
146 return *this;
147 }
148
150 template <class OTHER>
151 SmartDataPtr& operator=( const OTHER* pObj ) {
152 this->m_pObject = dynamic_cast<TYPE*>(const_cast<OTHER*>(pObj));
153 return *this;
154 }
155 };
156
157 #endif // GAUDIKERNEL_SMARTDATAPTR_H