artdaq_demo_hdf5  v1_01_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 #include "artdaq-core/Data/FragmentNameHelper.hh"
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;
52  virtual void insertOne(Fragment const& f) = 0;
58  virtual void insertMany(Fragments const& fs)
59  {
60  for (auto const& f : fs) insertOne(f);
61  }
68  virtual void insertHeader(detail::RawEventHeader const& e) = 0;
75  virtual std::unordered_map<artdaq::Fragment::type_t, std::unique_ptr<artdaq::Fragments>> readNextEvent() = 0;
83  virtual std::unique_ptr<artdaq::detail::RawEventHeader> getEventHeader(artdaq::Fragment::sequence_id_t const& seqID) = 0;
84 
85 protected:
86  FragmentDatasetMode mode_;
87  std::shared_ptr<artdaq::FragmentNameHelper> nameHelper_;
88 
89 private:
90  FragmentDataset(FragmentDataset const&) = delete;
91  FragmentDataset(FragmentDataset&&) = delete;
92  FragmentDataset& operator=(FragmentDataset const&) = delete;
93  FragmentDataset& operator=(FragmentDataset&&) = delete;
94 };
95 
96 } // namespace hdf5
97 } // namespace artdaq
98 
101 #ifndef EXTERN_C_FUNC_DECLARE_START
102 #define EXTERN_C_FUNC_DECLARE_START extern "C" {
103 #endif
104 
105 #define DEFINE_ARTDAQ_DATASET_PLUGIN(klass) \
106  EXTERN_C_FUNC_DECLARE_START \
107  std::unique_ptr<artdaq::hdf5::FragmentDataset> make(fhicl::ParameterSet const& ps) \
108  { \
109  return std::unique_ptr<artdaq::hdf5::FragmentDataset>(new klass(ps)); \
110  } \
111  }
112 
115 #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.