artdaq_demo_hdf5  v1_02_03
FragmentDataset.hh
1 #ifndef artdaq_demo_hdf5_hdf5_FragmentDataset_hh
2 #define artdaq_demo_hdf5_hdf5_FragmentDataset_hh 1
3 
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "artdaq-core/Data/FragmentNameHelper.hh"
6 #include "artdaq-core/Data/RawEvent.hh"
7 #include "cetlib/compiler_macros.h"
8 #include "fhiclcpp/ParameterSet.h"
9 
10 #include <unordered_map>
11 
12 namespace artdaq {
13 namespace hdf5 {
14 
18 enum class FragmentDatasetMode : uint8_t
19 {
20  Read = 0,
21  Write = 1
22 };
23 
31 {
32 public:
40  FragmentDataset(fhicl::ParameterSet const& ps, const std::string& mode);
44  virtual ~FragmentDataset() noexcept = default;
51  virtual void insertOne(Fragment const& f) = 0;
56  virtual void insertMany(Fragments const& fs)
57  {
58  for (auto const& f : fs) insertOne(f);
59  }
66  virtual void insertHeader(detail::RawEventHeader const& e) = 0;
73  virtual std::unordered_map<artdaq::Fragment::type_t, std::unique_ptr<artdaq::Fragments>> readNextEvent() = 0;
81  virtual std::unique_ptr<artdaq::detail::RawEventHeader> getEventHeader(artdaq::Fragment::sequence_id_t const& seqID) = 0;
82 
83 protected:
84  FragmentDatasetMode mode_;
85  std::shared_ptr<artdaq::FragmentNameHelper> nameHelper_;
86 
87 private:
88  FragmentDataset(FragmentDataset const&) = delete;
89  FragmentDataset(FragmentDataset&&) = delete;
90  FragmentDataset& operator=(FragmentDataset const&) = delete;
91  FragmentDataset& operator=(FragmentDataset&&) = delete;
92 };
93 
94 } // namespace hdf5
95 } // namespace artdaq
96 
99 #ifndef EXTERN_C_FUNC_DECLARE_START
100 #define EXTERN_C_FUNC_DECLARE_START extern "C" {
101 #endif
102 
103 #define DEFINE_ARTDAQ_DATASET_PLUGIN(klass) \
104  EXTERN_C_FUNC_DECLARE_START \
105  std::unique_ptr<artdaq::hdf5::FragmentDataset> make(fhicl::ParameterSet const& ps) \
106  { \
107  return std::unique_ptr<artdaq::hdf5::FragmentDataset>(new klass(ps)); \
108  } \
109  }
110 
113 #endif // artdaq_demo_hdf5_hdf5_FragmentDataset_hh
virtual void insertOne(Fragment const &f)=0
Insert a Fragment into the Dataset (write it to the HDF5 file)
virtual void insertHeader(detail::RawEventHeader const &e)=0
Insert a RawEventHeader into the Dataset (write it to the HDF5 file)
virtual void insertMany(Fragments const &fs)
Insert several Fragments into the Dataset (write them to the HDF5 file)
FragmentDataset(fhicl::ParameterSet const &ps, const std::string &mode)
FragmentDataset Constructor.
FragmentDatasetMode mode_
Mode of this FragmentDataset, either FragmentDatasetMode::Write or FragmentDatasetMode::Read.
virtual std::unique_ptr< artdaq::detail::RawEventHeader > getEventHeader(artdaq::Fragment::sequence_id_t const &seqID)=0
Read a RawEventHeader from the Dataset (HDF5 file)
Base class that defines methods for reading and writing to HDF5 files via various implementation plug...
virtual std::unordered_map< artdaq::Fragment::type_t, std::unique_ptr< artdaq::Fragments > > readNextEvent()=0
Read the next event from the Dataset (HDF5 file)
virtual ~FragmentDataset() noexcept=default
FragmentDataset default virtual destructor.
std::shared_ptr< artdaq::FragmentNameHelper > nameHelper_
FragmentNameHelper used to translate between Fragment Type and string instance names.