StormByte C++ Library: Buffer module 0.0.9999
StormByte-Buffer is a StormByte library module for handling buffers
Loading...
Searching...
No Matches
external.hxx
1#pragma once
2
3#include <StormByte/buffer/generic.hxx>
4#include <StormByte/clonable.hxx>
5
6#include <functional>
7
16namespace StormByte::Buffer {
26 class STORMBYTE_BUFFER_PUBLIC ExternalReader: public Clonable<ExternalReader, std::unique_ptr<ExternalReader>> {
27 public:
31 ExternalReader() noexcept = default;
32
37 ExternalReader(const ExternalReader& other) = default;
38
43 ExternalReader(ExternalReader&& other) noexcept = default;
44
48 virtual ~ExternalReader() noexcept = default;
49
55 ExternalReader& operator=(const ExternalReader& other) = default;
56
62 ExternalReader& operator=(ExternalReader&& other) noexcept = default;
63
70 virtual bool Read(std::size_t bytes, DataType& out) const noexcept = 0;
71
79 virtual bool Read(std::size_t bytes, DataType& out) noexcept = 0;
80 };
81
86 class STORMBYTE_BUFFER_PUBLIC ExternalBufferReader final: public ExternalReader {
87 public:
96 inline ExternalBufferReader(ReadOnly& buffer) noexcept:
97 m_buffer(buffer) {}
98
104
109 ExternalBufferReader(ExternalBufferReader&& other) noexcept = default;
110
114 ~ExternalBufferReader() noexcept = default;
115
121 ExternalBufferReader& operator=(const ExternalBufferReader& other) = default;
122
128 ExternalBufferReader& operator=(ExternalBufferReader&& other) noexcept = default;
129
134 inline PointerType Clone() const noexcept override {
135 return MakePointer<ExternalBufferReader>(*this);
136 }
137
142 inline PointerType Move() noexcept override {
143 return MakePointer<ExternalBufferReader>(std::move(*this));
144 }
145
152 bool Read(std::size_t bytes, DataType& out) const noexcept override;
153
160 bool Read(std::size_t bytes, DataType& out) noexcept override;
161
162 private:
163 std::reference_wrapper<ReadOnly> m_buffer;
164 };
165
174 class STORMBYTE_BUFFER_PUBLIC ExternalWriter: public Clonable<ExternalWriter> {
175 public:
179 ExternalWriter() noexcept = default;
180
185 ExternalWriter(const ExternalWriter& other) = default;
186
191 ExternalWriter(ExternalWriter&& other) noexcept = default;
192
196 virtual ~ExternalWriter() noexcept = default;
197
203 ExternalWriter& operator=(const ExternalWriter& other) = default;
209 ExternalWriter& operator=(ExternalWriter&& other) noexcept = default;
210
216 virtual bool Write(DataType&& in) noexcept = 0;
217 };
218
219 class STORMBYTE_BUFFER_PUBLIC ExternalBufferWriter final: public ExternalWriter {
220 public:
229 inline ExternalBufferWriter(WriteOnly& buffer) noexcept:
230 m_buffer(buffer) {}
231
237
242 ExternalBufferWriter(ExternalBufferWriter&& other) noexcept = default;
243
247 ~ExternalBufferWriter() noexcept = default;
248
254 ExternalBufferWriter& operator=(const ExternalBufferWriter& other) = default;
255
261 ExternalBufferWriter& operator=(ExternalBufferWriter&& other) noexcept = default;
262
267 inline PointerType Clone() const noexcept override {
268 return MakePointer<ExternalBufferWriter>(*this);
269 }
270
275 inline PointerType Move() noexcept override {
276 return MakePointer<ExternalBufferWriter>(std::move(*this));
277 }
278
284 bool Write(DataType&& in) noexcept override;
285
286 private:
287 std::reference_wrapper<WriteOnly> m_buffer;
288 };
289}
Implementation of ExternalReader that reads from a ReadOnly buffer.
Definition external.hxx:86
PointerType Move() noexcept override
Move this ExternalBufferReader.
Definition external.hxx:142
~ExternalBufferReader() noexcept=default
Destructor.
ExternalBufferReader(const ExternalBufferReader &other)=default
Copy constructor (deleted).
ExternalBufferReader(ExternalBufferReader &&other) noexcept=default
Move constructor.
ExternalBufferReader(ReadOnly &buffer) noexcept
Construct ExternalBufferReader with a ReadOnly buffer.
Definition external.hxx:96
bool Read(std::size_t bytes, DataType &out) const noexcept override
Read data into the provided buffer.
bool Read(std::size_t bytes, DataType &out) noexcept override
Destructively read data into the provided buffer.
Definition external.hxx:219
PointerType Move() noexcept override
Move this ExternalBufferWriter.
Definition external.hxx:275
ExternalBufferWriter(WriteOnly &buffer) noexcept
Construct ExternalBufferWriter with a WriteOnly buffer.
Definition external.hxx:229
ExternalBufferWriter(const ExternalBufferWriter &other)=default
Copy constructor (deleted).
ExternalBufferWriter(ExternalBufferWriter &&other) noexcept=default
Move constructor.
~ExternalBufferWriter() noexcept=default
Destructor.
bool Write(DataType &&in) noexcept override
Move data from the provided buffer.
Interface for reading data from an external source.
Definition external.hxx:26
ExternalReader() noexcept=default
Construct ExternalReader.
Interface for writing data to an external source.
Definition external.hxx:174
ExternalWriter() noexcept=default
Construct ExternalWriter.
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