3#include <StormByte/buffer/shared_fifo.hxx>
15namespace StormByte::Buffer {
57 m_buffer = other.m_buffer;
66 m_buffer = std::move(other.m_buffer);
80 m_buffer = other.m_buffer;
91 m_buffer = std::move(other.m_buffer);
100 return m_buffer.get() == other.m_buffer.get();
108 return !(*
this == other);
116 return m_buffer->AvailableBytes();
123 inline void Clean() noexcept
override {
133 inline void Clear() noexcept
override {
153 inline bool Drop(
const std::size_t& count)
noexcept override {
154 return m_buffer->Drop(count);
162 inline bool Empty() const noexcept
override {
163 return m_buffer->Empty();
172 inline bool EoF() const noexcept
override {
173 return m_buffer->EoF();
183 inline bool Extract(
const std::size_t& count, DataType& outBuffer)
noexcept override {
184 return m_buffer->Extract(count, outBuffer);
194 return m_buffer->Extract(count, outBuffer);
202 m_buffer->ExtractUntilEoF(outBuffer);
210 m_buffer->ExtractUntilEoF(outBuffer);
222 return m_buffer->IsReadable();
232 return m_buffer->IsWritable();
240 return m_buffer->HasError();
249 inline bool Read(
const std::size_t& count, DataType& outBuffer)
const noexcept override {
250 return m_buffer->Read(count, outBuffer);
259 inline bool Read(
const std::size_t& count,
WriteOnly& outBuffer)
const noexcept override {
260 return m_buffer->Read(count, outBuffer);
267 inline void ReadUntilEoF(DataType& outBuffer)
const noexcept override {
268 m_buffer->ReadUntilEoF(outBuffer);
276 m_buffer->ReadUntilEoF(outBuffer);
296 inline bool Peek(
const std::size_t& count, DataType& outBuffer)
const noexcept override {
297 return m_buffer->Peek(count, outBuffer);
317 inline bool Peek(
const std::size_t& count,
WriteOnly& outBuffer)
const noexcept override {
318 return m_buffer->Peek(count, outBuffer);
330 inline void Seek(
const std::ptrdiff_t& offset,
const Position& mode)
const noexcept {
331 m_buffer->Seek(offset, mode);
339 inline std::size_t
Size() const noexcept
override {
340 return m_buffer->Size();
344 std::shared_ptr<SharedFIFO> m_buffer;
354 inline Consumer(std::shared_ptr<SharedFIFO> buffer): m_buffer(buffer) {}
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