StormByte C++ Library: Buffer module 0.0.9999
StormByte-Buffer is a StormByte library module for handling buffers
Loading...
Searching...
No Matches
consumer.hxx
1#pragma once
2
3#include <StormByte/buffer/shared_fifo.hxx>
4
5#include <memory>
6
15namespace StormByte::Buffer {
46 class STORMBYTE_BUFFER_PUBLIC Consumer final: public ReadOnly {
47 friend class Producer;
48 public:
56 inline Consumer(const Consumer& other) noexcept {
57 m_buffer = other.m_buffer;
58 }
59
65 inline Consumer(Consumer&& other) noexcept {
66 m_buffer = std::move(other.m_buffer);
67 }
68
72 ~Consumer() noexcept = default;
73
78 inline Consumer& operator=(const Consumer& other) noexcept {
79 if (this != &other)
80 m_buffer = other.m_buffer;
81 return *this;
82 }
83
89 inline Consumer& operator=(Consumer&& other) noexcept {
90 if (this != &other)
91 m_buffer = std::move(other.m_buffer);
92 return *this;
93 }
94
99 inline bool operator==(const Consumer& other) const noexcept {
100 return m_buffer.get() == other.m_buffer.get();
101 }
102
107 inline bool operator!=(const Consumer& other) const noexcept {
108 return !(*this == other);
109 }
110
115 inline std::size_t AvailableBytes() const noexcept override {
116 return m_buffer->AvailableBytes();
117 }
118
123 inline void Clean() noexcept override {
124 m_buffer->Clean();
125 }
126
133 inline void Clear() noexcept override {
134 m_buffer->Clear();
135 }
136
143 inline void Close() noexcept {
144 m_buffer->Close();
145 }
146
153 inline bool Drop(const std::size_t& count) noexcept override {
154 return m_buffer->Drop(count);
155 }
156
162 inline bool Empty() const noexcept override {
163 return m_buffer->Empty();
164 }
165
172 inline bool EoF() const noexcept override {
173 return m_buffer->EoF();
174 }
175
183 inline bool Extract(const std::size_t& count, DataType& outBuffer) noexcept override {
184 return m_buffer->Extract(count, outBuffer);
185 }
186
193 inline bool Extract(const std::size_t& count, WriteOnly& outBuffer) noexcept {
194 return m_buffer->Extract(count, outBuffer);
195 }
196
201 inline void ExtractUntilEoF(DataType& outBuffer) noexcept override {
202 m_buffer->ExtractUntilEoF(outBuffer);
203 }
204
209 inline void ExtractUntilEoF(WriteOnly& outBuffer) noexcept override {
210 m_buffer->ExtractUntilEoF(outBuffer);
211 }
212
221 inline bool IsReadable() const noexcept override {
222 return m_buffer->IsReadable();
223 }
224
231 inline bool IsWritable() const noexcept {
232 return m_buffer->IsWritable();
233 }
234
239 inline bool HasError() const noexcept {
240 return m_buffer->HasError();
241 }
242
249 inline bool Read(const std::size_t& count, DataType& outBuffer) const noexcept override {
250 return m_buffer->Read(count, outBuffer);
251 }
252
259 inline bool Read(const std::size_t& count, WriteOnly& outBuffer) const noexcept override {
260 return m_buffer->Read(count, outBuffer);
261 }
262
267 inline void ReadUntilEoF(DataType& outBuffer) const noexcept override {
268 m_buffer->ReadUntilEoF(outBuffer);
269 }
270
275 inline void ReadUntilEoF(WriteOnly& outBuffer) const noexcept override {
276 m_buffer->ReadUntilEoF(outBuffer);
277 }
278
296 inline bool Peek(const std::size_t& count, DataType& outBuffer) const noexcept override {
297 return m_buffer->Peek(count, outBuffer);
298 }
299
317 inline bool Peek(const std::size_t& count, WriteOnly& outBuffer) const noexcept override {
318 return m_buffer->Peek(count, outBuffer);
319 }
320
330 inline void Seek(const std::ptrdiff_t& offset, const Position& mode) const noexcept {
331 m_buffer->Seek(offset, mode);
332 }
333
339 inline std::size_t Size() const noexcept override {
340 return m_buffer->Size();
341 }
342
343 private:
344 std::shared_ptr<SharedFIFO> m_buffer;
345
354 inline Consumer(std::shared_ptr<SharedFIFO> buffer): m_buffer(buffer) {}
355 };
356}
Read-only interface for consuming data from a shared FIFO buffer.
Definition consumer.hxx:46
~Consumer() noexcept=default
Destructor.
bool Drop(const std::size_t &count) noexcept override
Drop bytes in the buffer.
Definition consumer.hxx:153
bool Extract(const std::size_t &count, WriteOnly &outBuffer) noexcept
Destructive read that removes data from the buffer into a FIFO.
Definition consumer.hxx:193
void Clean() noexcept override
Clean buffer data from start to read position.
Definition consumer.hxx:123
Consumer & operator=(Consumer &&other) noexcept
Move assignment operator.
Definition consumer.hxx:89
void ExtractUntilEoF(WriteOnly &outBuffer) noexcept override
Read all bytes until end-of-file into a WriteOnly buffer.
Definition consumer.hxx:209
Consumer(const Consumer &other) noexcept
Copy constructor.
Definition consumer.hxx:56
bool operator!=(const Consumer &other) const noexcept
Inequality comparison.
Definition consumer.hxx:107
bool EoF() const noexcept override
Check if the reader has reached end-of-file.
Definition consumer.hxx:172
bool Read(const std::size_t &count, DataType &outBuffer) const noexcept override
Read bytes into an existing buffer.
Definition consumer.hxx:249
std::size_t Size() const noexcept override
Get the current number of bytes stored in the buffer.
Definition consumer.hxx:339
void Clear() noexcept override
Clear all buffer contents.
Definition consumer.hxx:133
bool Peek(const std::size_t &count, WriteOnly &outBuffer) const noexcept override
Non-destructive peek at buffer data without advancing read position.
Definition consumer.hxx:317
bool Read(const std::size_t &count, WriteOnly &outBuffer) const noexcept override
Read bytes into a WriteOnly buffer.
Definition consumer.hxx:259
bool HasError() const noexcept
Check if the buffer is in an error state.
Definition consumer.hxx:239
bool Extract(const std::size_t &count, DataType &outBuffer) noexcept override
Destructive read that removes data from the buffer into an existing vector.
Definition consumer.hxx:183
void ReadUntilEoF(WriteOnly &outBuffer) const noexcept override
Read all bytes until end-of-file into a WriteOnly buffer.
Definition consumer.hxx:275
bool Peek(const std::size_t &count, DataType &outBuffer) const noexcept override
Non-destructive peek at buffer data without advancing read position.
Definition consumer.hxx:296
bool operator==(const Consumer &other) const noexcept
Equality comparison.
Definition consumer.hxx:99
void ExtractUntilEoF(DataType &outBuffer) noexcept override
Read all bytes until end-of-file into an existing buffer.
Definition consumer.hxx:201
std::size_t AvailableBytes() const noexcept override
Gets available bytes for reading.
Definition consumer.hxx:115
void Close() noexcept
Thread-safe close for further writes.
Definition consumer.hxx:143
bool Empty() const noexcept override
Check if the buffer is empty.
Definition consumer.hxx:162
Consumer(Consumer &&other) noexcept
Move constructor.
Definition consumer.hxx:65
bool IsWritable() const noexcept
Check if the buffer is writable (not closed and not in error state).
Definition consumer.hxx:231
bool IsReadable() const noexcept override
Check if the buffer is readable (not in error state).
Definition consumer.hxx:221
void ReadUntilEoF(DataType &outBuffer) const noexcept override
Read all bytes until end-of-file into an existing buffer.
Definition consumer.hxx:267
void Seek(const std::ptrdiff_t &offset, const Position &mode) const noexcept
Move the read position for non-destructive reads.
Definition consumer.hxx:330
Producer interface for writing data to a shared FIFO buffer.
Definition producer.hxx:27
Generic class providing a buffer that can be read but not written to.
Definition generic.hxx:146
Generic class providing a buffer that can be written to but not read from.
Definition generic.hxx:408