Vector BLF
ObjectQueue.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 <mutex>
12 #include <queue>
13 
14 #include <Vector/BLF/ObjectHeaderBase.h>
15 #include <Vector/BLF/LogContainer.h>
16 
17 #include <Vector/BLF/vector_blf_export.h>
18 
19 namespace Vector {
20 namespace BLF {
21 
25 template <typename T>
26 class VECTOR_BLF_EXPORT ObjectQueue final {
27  public:
28  ~ObjectQueue();
29 
35  T * read();
36 
38  uint32_t tellg() const;
39 
47  void write(T * obj);
48 
50  uint32_t tellp() const;
51 
53  bool good() const;
54 
56  bool eof() const;
57 
59  void abort();
60 
62  void setFileSize(uint32_t fileSize);
63 
65  void setBufferSize(uint32_t bufferSize);
66 
68  std::condition_variable tellgChanged {};
69 
71  std::condition_variable tellpChanged {};
72 
73  private:
75  bool m_abort {};
76 
78  std::queue<T *> m_queue {};
79 
81  uint32_t m_tellg {};
82 
84  uint32_t m_tellp {};
85 
87  uint32_t m_bufferSize {std::numeric_limits<uint32_t>::max()};
88 
90  uint32_t m_fileSize {std::numeric_limits<uint32_t>::max()};
91 
93  std::ios_base::iostate m_rdstate {std::ios_base::goodbit};
94 
96  mutable std::mutex m_mutex {};
97 };
98 
99 /* explicit template instantiation */
100 extern template class ObjectQueue<ObjectHeaderBase>;
101 
102 }
103 }
Definition: ObjectQueue.h:26