Vector BLF
UncompressedFile.h
1 // SPDX-FileCopyrightText: 2013-2021 Tobias Lorenz <tobias.lorenz@gmx.net>
2 //
3 // SPDX-License-Identifier: GPL-3.0-or-later
4 
5 #pragma once
6 
7 #include <Vector/BLF/platform.h>
8 
9 #include <condition_variable>
10 #include <limits>
11 #include <list>
12 #include <memory>
13 #include <mutex>
14 
15 #include <Vector/BLF/AbstractFile.h>
16 #include <Vector/BLF/LogContainer.h>
17 
18 #include <Vector/BLF/vector_blf_export.h>
19 
20 namespace Vector {
21 namespace BLF {
22 
36 class VECTOR_BLF_EXPORT UncompressedFile final : public AbstractFile {
37  public:
38  UncompressedFile() = default;
39  ~UncompressedFile() override;
40 
41  std::streamsize gcount() const override;
42  void read(char * s, std::streamsize n) override;
43  std::streampos tellg() override;
44  void seekg(std::streamoff off, const std::ios_base::seekdir way = std::ios_base::cur) override;
45  void write(const char * s, std::streamsize n) override;
46  std::streampos tellp() override;
47  bool good() const override;
48  bool eof() const override;
49 
53  virtual void abort();
54 
60  virtual void write(const std::shared_ptr<LogContainer> & logContainer);
61 
65  virtual void nextLogContainer();
66 
72  virtual std::streamsize fileSize() const;
73 
79  virtual void setFileSize(std::streamsize fileSize);
80 
87  virtual void setBufferSize(std::streamsize bufferSize);
88 
92  virtual void dropOldData();
93 
99  virtual uint32_t defaultLogContainerSize() const;
100 
106  virtual void setDefaultLogContainerSize(uint32_t defaultLogContainerSize);
107 
109  std::condition_variable tellgChanged;
110 
112  std::condition_variable tellpChanged;
113 
114  private:
116  bool m_abort {};
117 
119  std::list<std::shared_ptr<LogContainer>> m_data {};
120 
122  std::streampos m_tellg {};
123 
125  std::streampos m_tellp {};
126 
128  std::streamsize m_gcount {};
129 
131  std::streamsize m_fileSize {std::numeric_limits<std::streamsize>::max()};
132 
134  std::streamsize m_bufferSize {std::numeric_limits<std::streamsize>::max()};
135 
137  std::ios_base::iostate m_rdstate {std::ios_base::goodbit};
138 
140  mutable std::mutex m_mutex {};
141 
143  uint32_t m_defaultLogContainerSize {0x20000};
144 
155  std::shared_ptr<LogContainer> logContainerContaining(const std::streampos pos) const;
156 };
157 
158 }
159 }
Definition: UncompressedFile.h:36
std::condition_variable tellpChanged
Definition: UncompressedFile.h:112
std::condition_variable tellgChanged
Definition: UncompressedFile.h:109
Definition: AbstractFile.h:19