1 #ifndef artdaq_ots_Overlays_UDPFragment_hh
2 #define artdaq_ots_Overlays_UDPFragment_hh
4 #include "artdaq-core/Data/Fragment.hh"
5 #include "cetlib/exception.h"
16 std::ostream & operator << (std::ostream &, UDPFragment
const &);
32 typedef uint64_t data_t;
38 static size_t const size_words = 1ull;
41 static_assert (
sizeof (
Metadata) == Metadata::size_words *
sizeof (Metadata::data_t),
"UDPFragment::Metadata size changed");
60 typedef uint32_t data_t;
62 typedef uint32_t event_size_t;
63 typedef uint32_t data_type_t;
65 event_size_t event_size : 28;
66 event_size_t type : 4;
68 static size_t const size_words = 1ul;
71 static_assert (
sizeof (
Header) == Header::size_words *
sizeof (Header::data_t),
"UDPFragment::Header size changed");
76 UDPFragment(artdaq::Fragment
const & f ) : artdaq_Fragment_(f) {}
80 Header::event_size_t hdr_event_size()
const {
return header_()->event_size; }
81 Header::data_type_t hdr_data_type()
const {
return header_()->type; }
82 static constexpr
size_t hdr_size_words() {
return Header::size_words; }
85 size_t udp_data_words()
const {
86 return (hdr_event_size() - hdr_size_words()) * bytes_per_word_();
90 uint8_t
const * dataBegin()
const {
91 return reinterpret_cast<uint8_t
const *
>(header_() + 1);
95 uint8_t
const * dataEnd()
const {
96 return dataBegin() + udp_data_words();
105 static constexpr
size_t bytes_per_word_() {
106 return sizeof(Header::data_t) /
sizeof(uint8_t);
113 Header
const * header_()
const {
114 return reinterpret_cast<UDPFragment::Header
const *
>(artdaq_Fragment_.dataBeginBytes());
119 artdaq::Fragment
const & artdaq_Fragment_;