6#ifndef HEPMC3_READERMT_H
7#define HEPMC3_READERMT_H
31 std::vector< std::pair<GenEvent, bool> >
m_events;
32 std::vector< std::thread > m_threads;
33 static void read_function(std::pair<GenEvent,bool>& e, std::shared_ptr<T> r)
35 e.second = r->read_event(e.first);
36 r->skip(m_number_of_threads-1);
37 if (r->failed()) r->close();
41 m_events.reserve(m_number_of_threads);
43 m_threads.reserve(m_number_of_threads);
44 for (
size_t i = 0; i < m_number_of_threads; ++i) {
45 m_readers.push_back(std::make_shared<T>(filename));
46 m_readers.back()->skip(m_number_of_threads-1-i);
54 bool skip(
const int)
override {
66 m_threads.reserve(m_number_of_threads);
67 m_events.reserve(m_number_of_threads);
68 for (
size_t i = 0; i < m_number_of_threads; ++i) {
69 m_events.push_back(std::pair<GenEvent, bool>(
GenEvent(Units::GEV,Units::MM),
true));
70 m_threads.push_back(std::thread(read_function, std::ref(
m_events.at(i)),
m_readers.at(i)));
72 for (
auto& th : m_threads) {
90 for (
auto& reader:
m_readers)
if (reader && !reader->failed())
return false;
91 if ( !
m_events.empty() )
return false;
96 for (
auto& reader:
m_readers)
if (reader) reader->close();
Definition of class GenEvent.
Definition of interface Reader.
Stores event-related information.
Multithreader GenEvent I/O parsing.
std::vector< std::pair< GenEvent, bool > > m_events
Vector of events.
bool m_go_try_cache
Flag to trigger using the cached event.
bool read_event(GenEvent &evt) override
Fill next event from input into evt.
bool failed() override
Get file and/or stream error state.
bool skip(const int) override
skip or fast forward reading of some events
void close() override
Close file and/or stream.
std::vector< std::shared_ptr< T > > m_readers
Vector of all active readers.
Base class for all I/O readers.