Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
DataSvc.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
19 #include <GaudiKernel/Service.h>
20 #include <GaudiKernel/SmartIF.h>
21 #include <string_view>
22 
23 class IOpaqueAddress;
24 class DataObject;
25 class IDataStoreAgent;
26 
27 // Do not clutter global namespace for helpers...
28 namespace DataSvcHelpers {
29  // Map of objects where loading is inhibited
30  class InhibitMap;
31 } // namespace DataSvcHelpers
32 
43 class GAUDI_API DataSvc : public extends<Service, IDataProviderSvc, IDataManagerSvc> {
44 
46  SmartIF<IConversionSvc> m_dataLoader = nullptr;
47 
48 protected:
50  SmartIF<IIncidentSvc> m_incidentSvc = nullptr;
51 
52  Gaudi::Property<CLID> m_rootCLID{ this, "RootCLID", 110 /*CLID_Event*/, "CLID of root entry" };
53  Gaudi::Property<std::string> m_rootName{ this, "RootName", "/Event", "name of root entry" };
54 
55 private:
56  Gaudi::Property<bool> m_forceLeaves{ this, "ForceLeaves", false,
57  "force creation of default leaves on registerObject" };
58  Gaudi::Property<std::vector<std::string>> m_inhibitPathes{ this, "InhibitPaths", {}, "inhibited leaves" };
59 
60  Gaudi::Property<bool> m_enableFaultHdlr{ this, "EnableFaultHandler", false,
61  "enable incidents on data creation requests" };
62  Gaudi::Property<std::string> m_faultName{ this, "DataFaultName", "DataFault", "Name of the data fault incident" };
63 
64  Gaudi::Property<bool> m_enableAccessHdlr{ this, "EnableAccessHandler", false,
65  "enable incidents on data access requests" };
66  Gaudi::Property<std::string> m_accessName{ this, "DataAccessName", "DataAccess", "Name of the data access incident" };
67 
69  std::vector<DataStoreItem> m_preLoads;
70 
71 protected:
73  std::unique_ptr<DataSvcHelpers::RegistryEntry> m_root;
74 
75 public:
77  CLID rootCLID() const override;
78 
80  const std::string& rootName() const override;
81 
83  StatusCode registerAddress( std::string_view fullPath, IOpaqueAddress* pAddress ) override;
84 
86 
88  StatusCode registerAddress( IRegistry* parentObj, std::string_view objectPath, IOpaqueAddress* pAddress ) override;
89 
91 
93  StatusCode unregisterAddress( std::string_view fullPath ) override;
94 
96  StatusCode unregisterAddress( IRegistry* pParent, std::string_view objPath ) override;
97 
101  StatusCode objectLeaves( const DataObject* pObject, std::vector<IRegistry*>& refLeaves ) override;
105  StatusCode objectLeaves( const IRegistry* pRegistry, std::vector<IRegistry*>& refLeaves ) override;
106 
108  StatusCode objectParent( const DataObject* pObject, IRegistry*& refpParent ) override;
110  StatusCode objectParent( const IRegistry* pRegistry, IRegistry*& refpParent ) override;
111 
115  StatusCode clearSubTree( std::string_view sub_tree_path ) override;
116 
120  StatusCode clearSubTree( DataObject* pObject ) override;
121 
123  StatusCode clearStore() override;
124 
128  StatusCode traverseSubTree( std::string_view sub_tree_path, IDataStoreAgent* pAgent ) override;
129 
131  StatusCode traverseSubTree( DataObject* pObject, IDataStoreAgent* pAgent ) override;
132 
134  StatusCode traverseTree( IDataStoreAgent* pAgent ) override;
135 
138  StatusCode setRoot( std::string root_name, DataObject* pRootObj ) override;
139 
143  virtual StatusCode i_setRoot( std::string root_name, DataObject* pRootObj );
144 
147  StatusCode setRoot( std::string root_path, IOpaqueAddress* pRootAddr ) override;
148 
153  virtual StatusCode i_setRoot( std::string root_path, IOpaqueAddress* pRootAddr );
154 
158  StatusCode setDataLoader( IConversionSvc* svc, IDataProviderSvc* dpsvc = nullptr ) override;
159 
161  StatusCode addPreLoadItem( const DataStoreItem& item ) override;
162 
164  StatusCode removePreLoadItem( const DataStoreItem& item ) override;
165 
167  StatusCode resetPreLoad() override;
168 
176  virtual StatusCode preLoad( int depth, int load_depth, DataObject* pObject );
177 
179  StatusCode preLoad() override;
180 
182 
184  StatusCode registerObject( std::string_view parentPath, std::string_view objPath, DataObject* pObject ) override;
185 
187  StatusCode registerObject( DataObject* parentObj, std::string_view objPath, DataObject* pObject ) override;
188 
190  StatusCode unregisterObject( std::string_view fullPath ) override;
191 
193  StatusCode unregisterObject( DataObject* pObject ) override;
194 
196  StatusCode unregisterObject( DataObject* pObject, std::string_view objectPath ) override;
197 
199 
201  StatusCode retrieveObject( IRegistry* pDirectory, std::string_view path, DataObject*& pObject ) override;
202 
204 
206  StatusCode findObject( std::string_view fullPath, DataObject*& pObject ) override;
207 
209  StatusCode findObject( IRegistry* pDirectory, std::string_view path, DataObject*& pObject ) override;
210 
212 
214  StatusCode linkObject( IRegistry* from, std::string_view objPath, DataObject* to ) override;
215 
217  StatusCode linkObject( std::string_view fullPath, DataObject* to ) override;
218 
220 
222  StatusCode unlinkObject( IRegistry* from, std::string_view objPath ) override;
223 
225  StatusCode unlinkObject( DataObject* fromObj, std::string_view objPath ) override;
226 
228  StatusCode unlinkObject( std::string_view fullPath ) override;
229 
231  StatusCode updateObject( IRegistry* pDirectory ) override;
232 
234  StatusCode updateObject( DataObject* toUpdate ) override;
235 
237  StatusCode initialize() override;
238 
240  StatusCode reinitialize() override;
241 
243  StatusCode finalize() override;
244 
246  using extends::extends;
247 
249  DataSvc( const DataSvc& ) = delete;
251  DataSvc& operator=( const DataSvc& ) = delete;
252 
253 protected:
255  bool checkRoot() { return 0 != m_root; }
256 
260  virtual IConversionSvc* getDataLoader( IRegistry* pReg );
261 
263  virtual DataObject* createDefaultObject() const;
264 
268  virtual StatusCode loadObject( IRegistry* pNode );
269 
273  virtual StatusCode loadObject( IConversionSvc* pLoader, IRegistry* pNode );
274 
276  StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode, std::string_view path,
284  DataObject* handleDataFault( IRegistry* pReg, std::string_view path = "" );
285 
286 private:
287  StatusCode i_retrieveEntry( DataSvcHelpers::RegistryEntry* parentObj, std::string_view path,
289  DataObject* i_handleDataFault( IRegistry* pReg, std::string_view path = std::string_view{} );
290 };
DataStoreItem.h
IDataProviderSvc::unlinkObject
virtual StatusCode unlinkObject(IRegistry *from, std::string_view objPath)=0
Remove a link to another object.
AtlasMCRecoFullPrecedenceDump.path
path
Definition: AtlasMCRecoFullPrecedenceDump.py:49
DataSvc::DataSvc
DataSvc(const DataSvc &)=delete
copy constructor disabled
IOpaqueAddress
Definition: IOpaqueAddress.h:28
IRegistry
Definition: IRegistry.h:29
IDataProviderSvc.h
RegistryEntry.h
IIncidentSvc.h
IDataProviderSvc::registerObject
StatusCode registerObject(std::string_view fullPath, DataObject *pObject)
Register object with the data store.
Definition: IDataProviderSvc.h:67
IDataProviderSvc::linkObject
virtual StatusCode linkObject(IRegistry *from, std::string_view objPath, DataObject *toObj)=0
Add a link to another object.
SmartIF.h
StatusCode
Definition: StatusCode.h:64
IDataManagerSvc::registerAddress
virtual StatusCode registerAddress(std::string_view fullPath, IOpaqueAddress *pAddress)=0
Register object address with the data store.
DataStoreItem
Definition: DataStoreItem.h:25
IDataProviderSvc::retrieveObject
virtual StatusCode retrieveObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
Retrieve object identified by its directory entry.
IDataManagerSvc::unregisterAddress
virtual StatusCode unregisterAddress(std::string_view fullPath)=0
Unregister object address from the data store.
SmartIF< IConversionSvc >
CLID
unsigned int CLID
Class ID definition.
Definition: ClassID.h:16
extends
Base class used to extend a class implementing other interfaces.
Definition: extends.h:19
Service.h
DataSvc::m_root
std::unique_ptr< DataSvcHelpers::RegistryEntry > m_root
Pointer to root entry.
Definition: DataSvc.h:73
DataSvc::checkRoot
bool checkRoot()
Check if root path is valid.
Definition: DataSvc.h:255
DataSvc
Definition: DataSvc.h:43
DataSvcHelpers::RegistryEntry
Definition: RegistryEntry.h:41
DataObject
Definition: DataObject.h:37
DataSvc::operator=
DataSvc & operator=(const DataSvc &)=delete
Fake assignment operator (never implemented).
IDataProviderSvc
Definition: IDataProviderSvc.h:48
IConversionSvc.h
DataSvc::m_preLoads
std::vector< DataStoreItem > m_preLoads
Items to be pre-loaded.
Definition: DataSvc.h:69
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:49
Gaudi::Property< CLID >
IDataManagerSvc.h
DataSvcHelpers
Definition: DataSvc.h:28
IDataProviderSvc::findObject
virtual StatusCode findObject(IRegistry *pDirectory, std::string_view path, DataObject *&pObject)=0
Find object identified by its directory entry.
IDataStoreAgent
Definition: IDataStoreAgent.h:24
IConversionSvc
Definition: IConversionSvc.h:43