1 #ifndef artdaq_demo_Overlays_AsciiFragmentWriter_hh
2 #define artdaq_demo_Overlays_AsciiFragmentWriter_hh
4 #include "artdaq-core-demo/Overlays/AsciiFragment.hh"
5 #include "artdaq-core/Data/Fragment.hh"
8 class AsciiFragmentWriter;
55 assert(artdaq_Fragment_.dataSizeBytes() >=
sizeof(
Header));
56 return reinterpret_cast<Header*
>(artdaq_Fragment_.dataBeginBytes());
69 void resize(
size_t nChars);
72 static size_t calc_event_size_words_(
size_t nChars);
74 static size_t chars_to_words_(
size_t nChars);
77 artdaq::Fragment& artdaq_Fragment_;
87 if (!f.hasMetadata() || f.dataSizeBytes() > 0)
90 "Error in AsciiFragmentWriter: Raw artdaq::Fragment object does not appear to consist of (and only of) its own "
91 "header + the AsciiFragment::Metadata object");
95 artdaq_Fragment_.resizeBytes(
sizeof(
Header));
101 assert(artdaq_Fragment_.dataSizeBytes() >=
sizeof(
Header) +
sizeof(artdaq::Fragment::value_type));
102 return reinterpret_cast<char*
>(header_() + 1);
107 return dataBegin() + total_line_characters();
112 artdaq_Fragment_.resizeBytes(
sizeof(Header::data_t) * calc_event_size_words_(nChars));
113 header_()->event_size = calc_event_size_words_(nChars);
116 inline size_t demo::AsciiFragmentWriter::calc_event_size_words_(
size_t nChars)
118 return chars_to_words_(nChars) + hdr_size_words();
121 inline size_t demo::AsciiFragmentWriter::chars_to_words_(
size_t nChars)
123 auto mod(nChars % chars_per_word_());
124 return (mod == 0) ? nChars / chars_per_word_() : nChars / chars_per_word_() + 1;
AsciiFragmentWriter(artdaq::Fragment &f)
The constructor will expect the artdaq::Fragment object it's been passed to contain the artdaq::Fragm...
char * dataEnd()
Return a non-const (for writing) pointer to the end of the Fragment payload.
Header * header_()
Returns a pointer to the AsciiFragment::Header object, non-const for writing.
Class derived from AsciiFragment which allows writes to the data (for simulation purposes).
char * dataBegin()
Return a non-const (for writing) pointer to the beginning of the Fragment payload.
An artdaq::Fragment overlay class designed to hold string data for pedagogical purposes.
void resize(size_t nChars)
Resize the Fragment so that it can contain nChars characters.
void set_hdr_line_number(Header::line_number_t line_number)
Sets the line number in the AsciiFragment::Header to the given (ASCII-encoded) value.