75 : m_buffer(data), m_position_offset(0) {}
82 : m_buffer(std::move(data)), m_position_offset(0) {}
90 template<Type::ByteInputRange R>
91 requires (!Type::SameAs<R, DataType>)
92 inline FIFO(
const R& r) noexcept
93 : m_buffer(DataConvert(r)), m_position_offset(0) {}
100 template<Type::ByteInputRange Rr>
102 : m_buffer(DataConvert(std::forward<Rr>(r))), m_position_offset(0) {}
108 inline FIFO(std::string_view sv) noexcept
109 : m_buffer(DataConvert(sv)), m_position_offset(0) {}
115 inline FIFO(
const char* s) noexcept
116 :
FIFO(s ? std::string_view(s) : std::string_view()) {}
161 inline
bool operator==(const
FIFO& other) const noexcept {
162 return m_buffer == other.
m_buffer &&
163 m_position_offset == other.m_position_offset &&
164 m_closed == other.m_closed &&
165 m_error == other.m_error;
174 return !(*
this == other);
195 virtual const
DataType& Data() const noexcept override;
204 virtual
bool Empty() const noexcept override;
210 virtual
bool EoF() const noexcept override;
216 virtual
bool IsReadable() const noexcept override;
222 virtual
bool IsWritable() const noexcept override;
229 virtual std::
size_t Size() const noexcept override;
241 virtual
void Clean() noexcept override;
248 virtual
void Clear() noexcept override;
255 void Close() noexcept override;
263 virtual
bool Drop(const std::
size_t& count) noexcept override;
271 virtual
void Seek(const std::ptrdiff_t& offset, const
Position& mode) const noexcept override;
276 void SetError() noexcept override;
291 bool Extract(const std::
size_t& count,
DataType& outBuffer) noexcept override;
299 bool Extract(const std::
size_t& count,
WriteOnly& outBuffer) noexcept override;
308 void ExtractUntilEoF(
DataType& outBuffer) noexcept override;
314 void ExtractUntilEoF(
WriteOnly& outBuffer) noexcept override;
329 bool Read(const std::
size_t& count,
DataType& outBuffer) const noexcept override;
337 bool Read(const std::
size_t& count,
WriteOnly& outBuffer) const noexcept override;
346 void ReadUntilEoF(
DataType& outBuffer) const noexcept override;
352 void ReadUntilEoF(
WriteOnly& outBuffer) const noexcept override;
367 bool Peek(const std::
size_t& count,
DataType& outBuffer) const noexcept override;
375 bool Peek(const std::
size_t& count,
WriteOnly& outBuffer) const noexcept override;
391 virtual std::
string HexDump(const std::
size_t& columns = 16,
392 const std::
size_t& byte_limit = 0) const noexcept;
407 bool Write(const std::
size_t& count, const
DataType& data) noexcept override;
415 bool Write(const std::
size_t& count,
DataType&& data) noexcept override;
423 bool Write(const std::
size_t& count, const
ReadOnly& data) noexcept override;
431 bool Write(const std::
size_t& count,
ReadOnly&& data) noexcept override;
444 std::
size_t AvailableBytesInternal() const noexcept;
447 mutable std::
size_t m_position_offset {0};
448 bool m_closed {
false};
449 bool m_error {
false};
468 std::size_t start_offset,
469 std::size_t columns)
noexcept;
489 virtual
bool ReadInternal(const std::
size_t& count,
DataType& outBuffer,
499 virtual
bool ReadInternal(const std::
size_t& count,
WriteOnly& outBuffer,
522 virtual
bool WriteInternal(const std::
size_t& count, const
DataType& src) noexcept;
530 virtual
bool WriteInternal(const std::
size_t& count,
DataType&& src) noexcept;
538 virtual
bool WriteInternal(const std::
size_t& count, const
ReadOnly& src) noexcept;
546 virtual
bool WriteInternal(const std::
size_t& count,
ReadOnly&& src) noexcept;
static std::string FormatHexLines(std::span< const std::byte > &data, std::size_t start_offset, std::size_t columns) noexcept
Format hex/ASCII lines for a data span.