artdaq_demo_hdf5  v1_00_00
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/RawEvent.hh"
6 #include "cetlib/compiler_macros.h"
7 #include "fhiclcpp/ParameterSet.h"
8 
9 #include <unordered_map>
10 
11 namespace artdaq {
12 namespace hdf5 {
13 
17 enum class FragmentDatasetMode : uint8_t
18 {
19  Read = 0,
20  Write = 1
21 };
22 
30 {
31 public:
39  FragmentDataset(fhicl::ParameterSet const& ps, std::string mode);
43  virtual ~FragmentDataset() noexcept = default;
50  virtual void insertOne(Fragment const& f) = 0;
55  virtual void insertMany(Fragments const& fs)
56  {
57  for (auto f : fs) insertOne(f);
58  }
65  virtual void insertHeader(detail::RawEventHeader const& e) = 0;
72  virtual std::unordered_map<artdaq::Fragment::type_t, std::unique_ptr<artdaq::Fragments>> readNextEvent() = 0;
80  virtual std::unique_ptr<artdaq::detail::RawEventHeader> getEventHeader(artdaq::Fragment::sequence_id_t const& seqID) = 0;
81 
82 protected:
83  FragmentDatasetMode mode_;
84 };
85 
86 } // namespace hdf5
87 } // namespace artdaq
88 
91 #ifndef EXTERN_C_FUNC_DECLARE_START
92 #define EXTERN_C_FUNC_DECLARE_START extern "C" {
93 #endif
94 
95 #define DEFINE_ARTDAQ_DATASET_PLUGIN(klass) \
96  EXTERN_C_FUNC_DECLARE_START \
97  std::unique_ptr<artdaq::hdf5::FragmentDataset> make(fhicl::ParameterSet const& ps) \
98  { \
99  return std::unique_ptr<artdaq::hdf5::FragmentDataset>(new klass(ps)); \
100  } \
101  }
102 
105 #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)
FragmentDataset(fhicl::ParameterSet const &ps, std::string mode)
FragmentDataset Constructor.
virtual void insertMany(Fragments const &fs)
Insert several Fragments into the Dataset (write them to the HDF5 file)
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.