The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SmartDataObjectPtr.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 
13 #include <GaudiKernel/Kernel.h>
14 #include <GaudiKernel/StatusCode.h>
15 #include <string>
16 
17 class SmartDataObjectPtr;
18 class IDataProviderSvc;
19 class IRegistry;
20 class DataObject;
21 
38 public:
41  class ObjectLoader {
42  public:
43  static AccessFunction access();
44  };
45 
47  class ObjectFinder {
48  public:
49  static AccessFunction access();
50  };
51 
52 public:
59  SmartDataObjectPtr( AccessFunction access, IDataProviderSvc* pService, IRegistry* pDir, std::string path )
60  : m_dataProvider( pService ), m_pRegistry( pDir ), m_path( std::move( path ) ), m_accessFunc( access ) {}
65 
67  virtual ~SmartDataObjectPtr() = default;
68 
70  virtual SmartDataObjectPtr& operator=( const SmartDataObjectPtr& ) = default;
71 
73  operator IRegistry*() { return m_pRegistry; }
74 
76  const std::string& path() const { return m_path; }
77 
79  IRegistry* directory() { return m_pRegistry; }
80 
82  void setService( IDataProviderSvc* svc ) { m_dataProvider = svc; }
83 
85  IDataProviderSvc* service() { return m_dataProvider; }
86 
88  const StatusCode& getLastError() const { return m_status; }
89 
91  DataObject* accessData() { return m_accessFunc( this ); }
92 
94  static DataObject* retrieve( SmartDataObjectPtr* ptr ) { return ptr->retrieveObject(); }
95 
97  static DataObject* find( SmartDataObjectPtr* ptr ) { return ptr->findObject(); }
98 
100  static DataObject* update( SmartDataObjectPtr* ptr ) { return ptr->updateObject(); }
101 
107  DataObject* retrieveObject();
108 
114  DataObject* findObject();
115 
122  DataObject* updateObject();
123 
124 protected:
130  StatusCode find( IRegistry* pDirectory, std::string_view path, DataObject*& refpObject );
131 
137  StatusCode find( std::string_view fullPath, DataObject*& refpObject );
138 
144  StatusCode retrieve( IRegistry* pDirectory, std::string_view path, DataObject*& refpObject );
150  StatusCode retrieve( std::string_view fullPath, DataObject*& refpObject );
151 
156  StatusCode update( IRegistry* pDirectory );
161  StatusCode update( std::string_view fullPath );
162 
163 protected:
165  mutable IDataProviderSvc* m_dataProvider = nullptr;
167  mutable IRegistry* m_pRegistry = nullptr;
169  mutable StatusCode m_status = StatusCode::SUCCESS;
171  std::string m_path;
173  AccessFunction m_accessFunc = nullptr;
174 };
SmartDataObjectPtr::retrieve
static DataObject * retrieve(SmartDataObjectPtr *ptr)
Static Object retrieval method.
Definition: SmartDataObjectPtr.h:94
AtlasMCRecoFullPrecedenceDump.path
path
Definition: AtlasMCRecoFullPrecedenceDump.py:49
GaudiPartProp.decorators.std
std
Definition: decorators.py:32
SmartDataObjectPtr::findObject
DataObject * findObject()
Object find method.
Definition: SmartDataObjectPtr.cpp:72
SmartDataObjectPtr::AccessFunction
DataObject *(*)(SmartDataObjectPtr *ptr) AccessFunction
Definition: SmartDataObjectPtr.h:39
IRegistry
Definition: IRegistry.h:29
StatusCode.h
SmartDataObjectPtr::directory
IRegistry * directory()
Access to data directory.
Definition: SmartDataObjectPtr.h:79
SmartDataObjectPtr::operator=
virtual SmartDataObjectPtr & operator=(const SmartDataObjectPtr &)=default
Assignment operator.
SmartDataObjectPtr::find
static DataObject * find(SmartDataObjectPtr *ptr)
Static Object find method.
Definition: SmartDataObjectPtr.h:97
StatusCode
Definition: StatusCode.h:64
SmartDataObjectPtr::ObjectFinder
Helper class to configure smart pointer functionality.
Definition: SmartDataObjectPtr.h:47
SmartDataObjectPtr::updateObject
DataObject * updateObject()
Object update method.
Definition: SmartDataObjectPtr.cpp:87
SmartDataObjectPtr
Definition: SmartDataObjectPtr.h:37
SmartDataObjectPtr::SmartDataObjectPtr
SmartDataObjectPtr(const SmartDataObjectPtr &)=default
Copy constructor: Construct an copy of a SmartDataStorePtr instance.
SmartDataObjectPtr::ObjectLoader
Helper class to configure smart pointer functionality.
Definition: SmartDataObjectPtr.h:41
SmartDataObjectPtr::setService
void setService(IDataProviderSvc *svc)
Assign data service.
Definition: SmartDataObjectPtr.h:82
SmartDataObjectPtr::retrieveObject
DataObject * retrieveObject()
Object retrieve method.
Definition: SmartDataObjectPtr.cpp:57
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:99
SmartDataObjectPtr::update
static DataObject * update(SmartDataObjectPtr *ptr)
Static Object update method.
Definition: SmartDataObjectPtr.h:100
GaudiPython.Pythonizations.update
update
Definition: Pythonizations.py:145
Kernel.h
DataObject
Definition: DataObject.h:37
SmartDataObjectPtr::~SmartDataObjectPtr
virtual ~SmartDataObjectPtr()=default
Standard Destructor.
IDataProviderSvc
Definition: IDataProviderSvc.h:48
SmartDataObjectPtr::m_path
std::string m_path
Path to object.
Definition: SmartDataObjectPtr.h:171
SmartDataObjectPtr::path
const std::string & path() const
Path name.
Definition: SmartDataObjectPtr.h:76
SmartDataObjectPtr::SmartDataObjectPtr
SmartDataObjectPtr(AccessFunction access, IDataProviderSvc *pService, IRegistry *pDir, std::string path)
Standard constructor: Construct an SmartDataObjectPtr instance.
Definition: SmartDataObjectPtr.h:59
SmartDataObjectPtr::service
IDataProviderSvc * service()
Retrieve data service.
Definition: SmartDataObjectPtr.h:85
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:49
SmartDataObjectPtr::getLastError
const StatusCode & getLastError() const
Access to potential errors during data accesses.
Definition: SmartDataObjectPtr.h:88
SmartDataObjectPtr::accessData
DataObject * accessData()
Static Object retrieval method: must call specific function.
Definition: SmartDataObjectPtr.h:91