17 #ifndef CPP_MATE_BINARY_SINK_HPP
18 #define CPP_MATE_BINARY_SINK_HPP
20 #include <CppMate/BinaryData.hpp>
21 #include <CppMate/Checkers.hpp>
55 virtual void write(
const void* data, uint64_t size) = 0;
85 void write(
const void* data, uint64_t)
override {
101 Chunk(
size_t chunkSize = std::numeric_limits<size_t>::max()):
102 _chunkSize(chunkSize)
104 checkArg(chunkSize > 0);
107 void write(
const void* data, uint64_t size)
override {
109 const auto* source =
static_cast<const uint8_t*
>(data);
110 for (uint64_t i = 0; i < size /
static_cast<uint64_t
>(_chunkSize); i++) {
112 source += _chunkSize;
114 const auto lastChunkSize = size % _chunkSize;
139 const uint8_t*
getData()
const override {
return &_buffer[0]; }
140 uint64_t
getSize()
const override {
return _buffer.size(); }
149 const auto offset = _buffer.size();
150 _buffer.resize(offset + size);
151 memcpy(&_buffer[offset], data ,size);
155 std::vector<uint8_t> _buffer;
180 _sinkPtr(std::move(sink)),
183 checkArg(_sinkPtr.get());
197 void write(
const void* data, uint64_t size)
override {
199 _sink.
write(data, size);
200 _bytesWritten += size;
205 std::shared_ptr<BinarySink> _sinkPtr;
206 uint64_t _bytesWritten;
Represents interface of abstract binary data.
Definition: BinaryData.hpp:34
Represents sink implementation which splits source data into chunks with specified size.
Definition: BinarySink.hpp:94
void write(const void *data, uint64_t size) override
Writes data into the sink.
Definition: BinarySink.hpp:107
Chunk(size_t chunkSize=std::numeric_limits< size_t >::max())
Constructor.
Definition: BinarySink.hpp:101
virtual void writeChunk(const void *data, size_t size)=0
Writes chunk of the data.
Represents closable extension of the BinarySink interface.
Definition: BinarySink.hpp:62
virtual bool isClosed() const =0
Indicates that sink is closed.
virtual void close()=0
Closes sink.
Represents sink implementation which splits source data into chunks with specified size.
Definition: BinarySink.hpp:162
void write(const void *data, uint64_t size) override
Writes data into the sink.
Definition: BinarySink.hpp:197
Counter(BinarySink &sink)
Constructor.
Definition: BinarySink.hpp:169
void resetCounter()
Resets counter.
Definition: BinarySink.hpp:195
uint64_t getBytesWritten() const
Returns total bytes written into the sink.
Definition: BinarySink.hpp:190
Counter(std::shared_ptr< BinarySink > sink)
Constructor.
Definition: BinarySink.hpp:178
Represents binary sink to memory.
Definition: BinarySink.hpp:137
void clear()
Clears buffer.
Definition: BinarySink.hpp:145
uint64_t getSize() const override
Returns size of data in bytes.
Definition: BinarySink.hpp:140
const uint8_t * getData() const override
Returns address of data.
Definition: BinarySink.hpp:139
void writeChunk(const void *data, size_t size) override
Writes chunk of the data.
Definition: BinarySink.hpp:148
Represents sink which just ignore all input data.
Definition: BinarySink.hpp:83
void write(const void *data, uint64_t) override
Writes data into the sink.
Definition: BinarySink.hpp:85
Represents low-level interface of abstract binary sink.
Definition: BinarySink.hpp:36
virtual void write(const void *data, uint64_t size)=0
Writes data into the sink.
virtual ~BinarySink()=default
Definition: BinaryData.hpp:28