The Gaudi Framework  v29r0 (ff2e7097)
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 <algorithm>
10 #include <unordered_set>
11 
12 namespace
13 {
14  template <typename Container>
16  {
19  [&]( const Gaudi::DataHandle* hndl ) -> bool { return hndl->mode() & mode; } );
20  return h;
21  }
22 }
23 
24 template <class BASE>
25 class GAUDI_API DataHandleHolderBase : public extends<BASE, IDataHandleHolder>
26 {
27 public:
29 
31  {
32  return handles( m_handles, Gaudi::DataHandle::Reader );
33  }
35  {
36  return handles( m_handles, Gaudi::DataHandle::Writer );
37  }
38 
39  virtual const DataObjIDColl& extraInputDeps() const override { return m_extInputDataObjs; }
40  virtual const DataObjIDColl& extraOutputDeps() const override { return m_extOutputDataObjs; }
41 
42  void declare( Gaudi::DataHandle& handle ) override
43  {
44  if ( !handle.owner() ) handle.setOwner( this );
45 
46  if ( handle.owner() != this ) {
47  throw GaudiException( "Attempt to declare foreign handle with algorithm!", this->name(), StatusCode::FAILURE );
48  }
49 
50  m_handles.insert( &handle );
51  }
52 
53  void renounce( Gaudi::DataHandle& handle ) override
54  {
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  const DataObjIDColl& inputDataObjs() const override { return m_inputDataObjs; }
62  const DataObjIDColl& outputDataObjs() const override { return m_outputDataObjs; }
63 
64  void addDependency( const DataObjID& id, const Gaudi::DataHandle::Mode& mode ) override
65  {
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 protected:
75  {
76  for ( auto h : m_handles ) h->init();
77  }
78 
79  DataObjIDColl m_inputDataObjs, m_outputDataObjs;
80 
81 private:
83 
84  Gaudi::Property<DataObjIDColl> m_extInputDataObjs{this, "ExtraInputs", DataObjIDColl{}, "[[deprecated]]"};
85  Gaudi::Property<DataObjIDColl> m_extOutputDataObjs{this, "ExtraOutputs", DataObjIDColl{}, "[[deprecated]]"};
86 };
87 
88 #endif // !GAUDIKERNEL_DATAHANDLEHOLDERBASE
T copy_if(T...args)
Define general base for Gaudi exception.
virtual void setOwner(IDataHandleHolder *o)
Definition: DataHandle.h:41
Implementation of property with value of concrete type.
Definition: Property.h:319
const DataObjIDColl & outputDataObjs() const override
virtual Mode mode() const
Definition: DataHandle.h:44
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:110
virtual const DataObjIDColl & extraInputDeps() const override
DataObjIDColl m_outputDataObjs
virtual IDataHandleHolder * owner() const
Definition: DataHandle.h:42
std::unordered_set< Gaudi::DataHandle * > m_handles