1 #ifndef artdaq_core_demo_Overlays_UDPFragmentWriter_hh
2 #define artdaq_core_demo_Overlays_UDPFragmentWriter_hh
4 #include "artdaq-core-demo/Overlays/UDPFragment.hh"
5 #include "artdaq-core/Data/Fragment.hh"
8 class UDPFragmentWriter;
51 assert(artdaq_Fragment_.dataSizeBytes() >=
sizeof(
Header));
52 return reinterpret_cast<Header*
>(artdaq_Fragment_.dataBeginBytes());
65 void resize(
size_t nBytes);
73 static size_t calc_event_size_words_(
size_t nBytes);
80 static size_t bytes_to_words_(
size_t nBytes);
83 artdaq::Fragment& artdaq_Fragment_;
89 if (!f.hasMetadata() || f.dataSizeBytes() > 0)
92 "Error in UDPFragmentWriter: Raw artdaq::Fragment object does not appear to consist of (and only of) its own "
93 "header + the UDPFragment::Metadata object");
97 artdaq_Fragment_.resizeBytes(
sizeof(
Header));
103 assert(artdaq_Fragment_.dataSizeBytes() >=
sizeof(
Header) +
sizeof(artdaq::Fragment::value_type));
104 return reinterpret_cast<uint8_t*
>(header_() + 1);
109 return dataBegin() + udp_data_words() * bytes_per_word_();
114 artdaq_Fragment_.resizeBytes(
sizeof(Header::data_t) * calc_event_size_words_(nBytes));
115 header_()->event_size = calc_event_size_words_(nBytes);
118 inline size_t demo::UDPFragmentWriter::calc_event_size_words_(
size_t nBytes)
120 return bytes_to_words_(nBytes) + hdr_size_words();
123 inline size_t demo::UDPFragmentWriter::bytes_to_words_(
size_t nBytes)
125 auto mod(nBytes % bytes_per_word_());
126 return (mod == 0) ? nBytes / bytes_per_word_() : nBytes / bytes_per_word_() + 1;
Class derived from UDPFragment which allows writes to the data.
Header * header_()
Get a pointer to the UDPFragment::Header object for writing.
A Fragment designed to contain data received from the network in UDP datagrams.
uint8_t * dataBegin()
Get a pointer to the start of the UDP payload.
void resize(size_t nBytes)
Resize the UDP payload to the given number of bytes.
uint8_t * dataEnd()
Get a pointer to the end of the UDP payload.
UDPFragmentWriter(artdaq::Fragment &f)
UDPFragmentWriter constructor.
void set_hdr_type(Header::data_type_t dataType)
Setter for the Header::type field.