@@ -77,7 +77,8 @@ void WriteToBinaryFile::consume(std::vector<uint32_t>& event) {
7777 fwrite (&(event[0 ]), sizeof (uint32_t ), event.size (), fp_);
7878}
7979
80- void DecodeAndWrite::consume (std::vector<uint32_t >& event) {
80+ template <class EventPacket >
81+ void DecodeAndWrite<EventPacket>::consume(std::vector<uint32_t >& event) {
8182 // we have to manually check the size so that we can do the reinterpret_cast
8283 if (event.size () == 0 ) {
8384 pflib_log (warn) << " event with zero words passed in, skipping" ;
@@ -91,58 +92,62 @@ void DecodeAndWrite::consume(std::vector<uint32_t>& event) {
9192 write_event (ep_);
9293}
9394
94- DecodeAndWriteToCSV::DecodeAndWriteToCSV (
95+ template <class EventPacket >
96+ DecodeAndWriteToCSV<EventPacket>::DecodeAndWriteToCSV<EventPacket>(
9597 const std::string& file_name,
9698 std::function<void (std::ofstream&)> write_header,
97- std::function<void(std::ofstream& f,
98- const pflib::packing::SingleROCEventPacket&)>
99+ std::function<void (std::ofstream& f, const EventPacket&)>
99100 write_event)
100- : DecodeAndWrite(), file_{file_name}, write_event_{write_event} {
101+ : DecodeAndWrite<EventPacket> (), file_{file_name}, write_event_{write_event} {
101102 if (not file_) {
102103 PFEXCEPTION_RAISE (" FileOpen" ,
103104 " unable to open " + file_name + " for writing" );
104105 }
105106 write_header (file_);
106107}
107108
108- void DecodeAndWriteToCSV::write_event (
109- const pflib::packing::SingleROCEventPacket & ep) {
109+ template < class EventPacket >
110+ void DecodeAndWriteToCSV<EventPacket>::write_event( const EventPacket & ep) {
110111 write_event_ (file_, ep);
111112}
112113
113- DecodeAndWriteToCSV all_channels_to_csv (const std::string& file_name) {
114- return DecodeAndWriteToCSV (
114+ template <class EventPacket >
115+ DecodeAndWriteToCSV<EventPacket> all_channels_to_csv (const std::string& file_name) {
116+ return DecodeAndWriteToCSV<EventPacket>(
115117 file_name,
116118 [](std::ofstream& f) {
117119 f << std::boolalpha;
118- f << pflib::packing::SingleROCEventPacket ::to_csv_header << ' \n ' ;
120+ f << EventPacket ::to_csv_header << ' \n ' ;
119121 },
120- [](std::ofstream& f, const pflib::packing::SingleROCEventPacket & ep) {
122+ [](std::ofstream& f, const EventPacket & ep) {
121123 ep.to_csv (f);
122124 });
123125}
124126
125- DecodeAndBuffer::DecodeAndBuffer (int nevents) : DecodeAndWrite() {
127+ template <class EventPacket >
128+ DecodeAndBuffer<EventPacket>::DecodeAndBuffer<EventPacket>(int nevents) : DecodeAndWrite<EventPacket>() {
126129 set_buffer_size (nevents);
127130}
128131
129- void DecodeAndBuffer::write_event (
130- const pflib::packing::SingleROCEventPacket & ep) {
132+ template < class EventPacket >
133+ void DecodeAndBuffer<EventPacket>::write_event( const EventPacket & ep) {
131134 if (ep_buffer_.size () > ep_buffer_.capacity ()) {
132135 pflib_log (warn) << " Trying to push more elements to buffer than allocated "
133136 " capacity. Skipping!" ;
134137 return ;
135138 }
136139 ep_buffer_.push_back (ep);
137140}
141+
142+ template <class EventPacket >
143+ void DecodeAndBuffer<EventPacket>::start_run() { ep_buffer_.clear (); }
138144
139- void DecodeAndBuffer::start_run () { ep_buffer_.clear (); }
140-
141- const std::vector<pflib::packing::SingleROCEventPacket>&
142- DecodeAndBuffer::get_buffer () const {
145+ template <class EventPacket >
146+ const std::vector<EventPacket>& DecodeAndBuffer<EventPacket>::get_buffer() const {
143147 return ep_buffer_;
144148}
145149
146- void DecodeAndBuffer::set_buffer_size (int nevents) {
150+ template <class EventPacket >
151+ void DecodeAndBuffer<EventPacket>::set_buffer_size(int nevents) {
147152 ep_buffer_.reserve (nevents);
148153}
0 commit comments