Loading [MathJax]/jax/input/TeX/config.js
The Gaudi Framework  v28r2p1 (f1a77ff4)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
DataHandleHolderBase.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_DATAHANDLEHOLDERBASE
2 #define GAUDIKERNEL_DATAHANDLEHOLDERBASE 1
3 
7 #include "GaudiKernel/Property.h"
8 
9 #include <unordered_set>
10 #include <algorithm>
11 
12 namespace {
13  template <typename Container>
18  [&](const Gaudi::DataHandle* hndl) -> bool
19  { return hndl->mode() & mode ; } );
20  return h;
21  }
22 }
23 
24 template<class BASE>
25 class GAUDI_API DataHandleHolderBase : public extends<BASE, IDataHandleHolder> {
26  public:
27 
29 
31  return handles( m_handles, Gaudi::DataHandle::Reader );
32  }
34  return handles( m_handles, Gaudi::DataHandle::Writer );
35  }
36 
37  virtual const DataObjIDColl& extraInputDeps() const override {
38  return m_extInputDataObjs;
39  }
40  virtual const DataObjIDColl& extraOutputDeps() const override {
41  return m_extOutputDataObjs;
42  }
43 
44  void declare(Gaudi::DataHandle& handle) override {
45  if (!handle.owner()) handle.setOwner(this);
46 
47  if (handle.owner() != this) {
48  throw GaudiException("Attempt to declare foreign handle with algorithm!", this->name(), StatusCode::FAILURE);
49  }
50 
51  m_handles.insert(&handle);
52  }
53 
54  void renounce(Gaudi::DataHandle& handle) override {
55  if (handle.owner() != this) {
56  throw GaudiException("Attempt to renounce foreign handle with algorithm!", this->name(), StatusCode::FAILURE);
57  }
58  m_handles.erase(&handle);
59 
60  }
61 
62  const DataObjIDColl& inputDataObjs() const override { return m_inputDataObjs; }
63  const DataObjIDColl& outputDataObjs() const override { return m_outputDataObjs; }
64 
65  void addDependency(const DataObjID& id, const Gaudi::DataHandle::Mode& mode) override {
66  if (mode & Gaudi::DataHandle::Reader) m_inputDataObjs.emplace(id);
67  if (mode & Gaudi::DataHandle::Writer) m_outputDataObjs.emplace(id);
68 }
69 
70 private:
71 
72 
73  protected:
74 
78  for (auto h : m_handles) h->init();
79  }
80 
81  DataObjIDColl m_inputDataObjs, m_outputDataObjs;
82 
83  private:
84 
86 
87  Gaudi::Property<DataObjIDColl> m_extInputDataObjs{this, "ExtraInputs", DataObjIDColl{}, "[[deprecated]]"};
88  Gaudi::Property<DataObjIDColl> m_extOutputDataObjs{this, "ExtraOutputs", DataObjIDColl{}, "[[deprecated]]"};
89 
90 };
91 
92 #endif // !GAUDIKERNEL_DATAHANDLEHOLDERBASE
T copy_if(T...args)
Define general base for Gaudi exception.
virtual void setOwner(IDataHandleHolder *o)
Definition: DataHandle.h:48
Implementation of property with value of concrete type.
Definition: Property.h:314
const DataObjIDColl & outputDataObjs() const override
virtual Mode mode() const
Definition: DataHandle.h:51
void initDataHandleHolder()
initializes all handles - called by the sysInitialize method of any descendant of this ...
virtual const DataObjIDColl & extraOutputDeps() const override
void renounce(Gaudi::DataHandle &handle) override
T end(T...args)
void declare(Gaudi::DataHandle &handle) override
std::vector< Gaudi::DataHandle * > outputHandles() const override
const DataObjIDColl & inputDataObjs() const override
std::vector< Gaudi::DataHandle * > inputHandles() const override
void addDependency(const DataObjID &id, const Gaudi::DataHandle::Mode &mode) override
STL class.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
T begin(T...args)
T back_inserter(T...args)
#define GAUDI_API
Definition: Kernel.h:107
virtual const DataObjIDColl & extraInputDeps() const override
DataObjIDColl m_outputDataObjs
virtual IDataHandleHolder * owner() const
Definition: DataHandle.h:49
std::unordered_set< Gaudi::DataHandle * > m_handles