Parasol Planning Library (PPL)
CountingStreamBuffer.h
Go to the documentation of this file.
1 #ifndef COUNTING_STREAM_BUFFER_H_
2 #define COUNTING_STREAM_BUFFER_H_
3 
4 #include <cstddef>
5 #include <iostream>
6 #include <fstream>
7 #include <string>
8 #include <streambuf>
9 
10 
20 class CountingStreamBuffer final : public std::streambuf {
21 
22  public:
23 
26 
28  CountingStreamBuffer(const std::string& _filename);
29 
30  // Disallow copy and assignment
33 
37 
39  size_t LineNumber() const;
40 
42  size_t PrevLineNumber() const;
43 
45  size_t Column() const;
46 
48  std::streamsize FilePos() const;
49 
51  std::string Where() const;
52 
54 
55  private:
56 
60 
63  virtual std::streambuf::int_type underflow() override;
64 
67  virtual std::streambuf::int_type uflow() override;
68 
72  virtual std::streambuf::int_type pbackfail(std::streambuf::int_type _c)
73  override;
74 
80  virtual std::ios::pos_type seekoff(std::ios::off_type _pos,
81  std::ios_base::seekdir _dir, std::ios_base::openmode _mode) override;
82 
87  virtual std::ios::pos_type seekpos(std::ios::pos_type _pos,
88  std::ios_base::openmode _mode) override;
89 
93 
94  std::string m_filename;
95  std::ifstream m_fileStream;
96  std::streambuf* m_streamBuffer{nullptr};
97  std::streamsize m_filePos;
98 
99  size_t m_line;
100  size_t m_prevLine;
101  size_t m_column;
102  size_t m_prevColumn;
103 
105 
106 };
107 
108 #endif
Definition: CountingStreamBuffer.h:20
CountingStreamBuffer(const std::string &_filename)
Definition: CountingStreamBuffer.cpp:11
std::string Where() const
Definition: CountingStreamBuffer.cpp:48
size_t PrevLineNumber() const
Definition: CountingStreamBuffer.cpp:27
size_t LineNumber() const
Definition: CountingStreamBuffer.cpp:20
size_t Column() const
Definition: CountingStreamBuffer.cpp:34
CountingStreamBuffer & operator=(const CountingStreamBuffer &)=delete
CountingStreamBuffer(const CountingStreamBuffer &)=delete
std::streamsize FilePos() const
Definition: CountingStreamBuffer.cpp:41