HepMC3 event record library
ReaderGZ.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // This file is part of HepMC
4 // Copyright (C) 2014-2020 The HepMC collaboration (see AUTHORS for details)
5 //
6 #ifndef HEPMC3_READERGZ_H
7 #define HEPMC3_READERGZ_H
8 ///
9 /// @file ReaderGZ.h
10 /// @brief Definition of class \b ReaderGZ
11 ///
12 /// @class HepMC3::ReaderGZ
13 /// @brief GenEvent I/O parsing for compressed files
14 ///
15 /// @ingroup IO
16 ///
17 #include <set>
18 #include <string>
19 #include <fstream>
20 #include <istream>
21 #include <iterator>
22 #include "HepMC3/Reader.h"
23 #include "HepMC3/GenEvent.h"
24 #include "HepMC3/CompressedIO.h"
25 namespace HepMC3 {
26 
27 template <class T> class ReaderGZ : public Reader {
28 public:
29 
30  /// @brief Constructor
31  ReaderGZ(const std::string& filename) {
32  m_zstr = std::shared_ptr< std::istream >(new ifstream(filename.c_str()));
33  m_reader = std::make_shared<T>(*(m_zstr.get()));
34  }
35  /// @brief The ctor to read from stdin
36  ReaderGZ(std::istream & is) {
37  m_zstr = std::shared_ptr< std::istream >(new istream(is));
38  m_reader = std::make_shared<T>(*(m_zstr.get()));
39  }
40 
41  ReaderGZ(std::shared_ptr<std::istream> s_stream) {
42  m_zstr = s_stream;
43  m_reader = std::make_shared<T>(*(m_zstr.get()));
44  }
45 
46  /// @brief Destructor
47  ~ReaderGZ() { close(); }
48 
49  /// @brief skip events
50  bool skip(const int i) override { if (m_reader) return m_reader->skip(i); return false; }
51 
52  /// @brief Load event from file
53  ///
54  /// @param[out] evt Event to be filled
55  bool read_event(GenEvent& evt) override { if (m_reader) return m_reader->read_event(evt); return false; }
56 
57 
58  /// @brief Return status of the stream
59  bool failed() override { if (m_reader) return m_reader->failed(); return false; }
60 
61 
62  /// @brief Close file stream
63  void close() override {
64  if (m_reader) return m_reader->close();
65  if(dynamic_pointer_cast<ifstream>(m_zstr)) dynamic_pointer_cast<ifstream>(m_zstr)->close();
66  }
67 
68 private:
69  ///@brief Close file stream
70  std::shared_ptr< std::istream > m_zstr; ///< Stream to read
71  std::shared_ptr<Reader> m_reader; ///< Actual reader
72 
73 };
74 
75 } // namespace HepMC3
76 #endif
Definition of class GenEvent.
Definition of interface Reader.
Stores event-related information.
Definition: GenEvent.h:41
GenEvent I/O parsing for compressed files.
Definition: ReaderGZ.h:27
bool read_event(GenEvent &evt) override
Load event from file.
Definition: ReaderGZ.h:55
bool failed() override
Return status of the stream.
Definition: ReaderGZ.h:59
~ReaderGZ()
Destructor.
Definition: ReaderGZ.h:47
std::shared_ptr< Reader > m_reader
Actual reader.
Definition: ReaderGZ.h:71
void close() override
Close file stream.
Definition: ReaderGZ.h:63
bool skip(const int i) override
skip events
Definition: ReaderGZ.h:50
ReaderGZ(const std::string &filename)
Constructor.
Definition: ReaderGZ.h:31
ReaderGZ(std::istream &is)
The ctor to read from stdin.
Definition: ReaderGZ.h:36
std::shared_ptr< std::istream > m_zstr
Close file stream.
Definition: ReaderGZ.h:70
Base class for all I/O readers.
Definition: Reader.h:25
HepMC3 main namespace.