24#include <StormByte/clonable.hxx>
55 :
public Clonable<ExternalReader, std::unique_ptr<ExternalReader>> {
79 virtual std::
size_t AvailableBytes() const noexcept = 0;
85 virtual
bool Empty() const noexcept = 0;
92 virtual
bool EoF() const noexcept = 0;
98 virtual
bool IsReadable() const noexcept = 0;
113 virtual
bool Read(std::
size_t count,
DataType& out) const noexcept = 0;
138 return Extract(0, out);
147 virtual bool Peek(std::size_t count,
DataType& out)
const noexcept = 0;
175 virtual void Seek(std::ptrdiff_t offset,
Position mode)
const noexcept;
208 : m_buffer(buffer) {}
228 PointerType Clone() const noexcept override;
234 PointerType Move() noexcept override;
242 std::
size_t AvailableBytes() const noexcept override;
243 bool Empty() const noexcept override;
244 bool EoF() const noexcept override;
245 bool IsReadable() const noexcept override;
252 bool Read(std::
size_t count,
DataType& out) const noexcept override;
253 bool Extract(std::
size_t count,
DataType& out) noexcept override;
254 bool Peek(std::
size_t count,
DataType& out) const noexcept override;
256 void ReadUntilEoF(
DataType& out) const noexcept override;
257 void ExtractUntilEoF(
DataType& out) noexcept override;
264 void Seek(std::ptrdiff_t offset,
Position mode) const noexcept override;
265 void Clean() noexcept override;
269 std::reference_wrapper<
ReadOnly> m_buffer;
308 virtual
bool IsWritable() const noexcept = 0;
322 virtual
bool Write(const
DataType& data) noexcept = 0;
337 virtual
bool Write(std::
size_t count, const
DataType& data) noexcept = 0;
345 virtual
bool Write(std::
size_t count,
DataType&& data) noexcept = 0;
363 bool Write(std::string_view sv) noexcept;
370 bool Write(const
char* s) noexcept;
378 bool Write(std::
size_t count, std::string_view sv) noexcept;
386 template<std::
size_t N>
387 bool Write(const
char (&s)[N]) noexcept {
388 if (N == 0)
return Write(
DataType{});
389 return Write(std::string_view(s, N > 0 ? N - 1 : 0));
411 virtual
void SetError() noexcept = 0;
440 : m_buffer(buffer) {}
460 PointerType Clone() const noexcept override;
466 PointerType Move() noexcept override;
475 bool IsWritable() const noexcept override;
477 bool Write(const
DataType& data) noexcept override;
479 bool Write(std::
size_t count, const
DataType& data) noexcept override;
480 bool Write(std::
size_t count,
DataType&& data) noexcept override;
482 void Close() noexcept override;
483 void SetError() noexcept override;
487 std::reference_wrapper<
WriteOnly> m_buffer;
Adapter that turns any ReadOnly buffer into an ExternalReader.
Definition external.hxx:196
ExternalBufferReader(const ExternalBufferReader &)=default
ExternalBufferReader(ReadOnly &buffer) noexcept
Construct from a ReadOnly reference.
Definition external.hxx:207
ExternalBufferReader(ExternalBufferReader &&) noexcept=default
Adapter that turns any WriteOnly buffer into an ExternalWriter.
Definition external.hxx:428
ExternalBufferWriter(ExternalBufferWriter &&) noexcept=default
ExternalBufferWriter(WriteOnly &buffer) noexcept
Construct from a WriteOnly reference.
Definition external.hxx:439
ExternalBufferWriter(const ExternalBufferWriter &)=default
Abstract interface for reading data from an external or internal source.
Definition external.hxx:55
bool Extract(DataType &out) noexcept
Convenience overload — extract all available bytes.
Definition external.hxx:137
ExternalReader() noexcept=default
virtual void Clean() noexcept
Discard already-consumed data (from start up to the current read position).
virtual void ReadUntilEoF(DataType &out) const noexcept=0
Read everything until EoF (non-destructive).
virtual bool Peek(std::size_t count, DataType &out) const noexcept=0
Non-destructive peek (does not advance the position).
virtual void Seek(std::ptrdiff_t offset, Position mode) const noexcept
Move the logical read position.
virtual bool Extract(std::size_t count, DataType &out) noexcept=0
Destructive read (consumes / erases data from the source).
virtual void ExtractUntilEoF(DataType &out) noexcept=0
Extract everything until EoF (destructive).
Abstract interface for writing data to an external or internal sink.
Definition external.hxx:284
virtual void Close() noexcept=0
Mark the sink closed for further writes.
ExternalWriter() noexcept=default
Pure interface for a buffer that can be read but not written.
Definition generic.hxx:164
Pure interface for a buffer that can be written but not read.
Definition generic.hxx:420
Buffer module of the StormByte suite.
std::vector< std::byte > DataType
Primary byte storage type used throughout the buffer API.
Definition typedefs.hxx:62
Position
Forward declaration of the WriteOnly interface.
Definition typedefs.hxx:50
#define STORMBYTE_BUFFER_PUBLIC
Definition visibility.h:28