17 #ifndef CPP_MATE_WRITE_STREAM_HPP
18 #define CPP_MATE_WRITE_STREAM_HPP
20 #include <CppMate/BinarySink.hpp>
21 #include <CppMate/ByteOrder.hpp>
22 #include <CppMate/Checkers.hpp>
45 _sharedSink(std::move(sink)),
46 _sink(_sharedSink.get()),
80 if (_isNativeByteOrder ||
sizeof(T) < 2) {
81 _sink->
write(&value,
sizeof(value));
84 auto const srcPtr =
reinterpret_cast<uint8_t *
>(&value);
85 auto const dstPtr =
reinterpret_cast<uint8_t *
>(&reverse);
88 dstPtr[0] = srcPtr[1];
89 dstPtr[1] = srcPtr[0];
92 dstPtr[0] = srcPtr[3];
93 dstPtr[1] = srcPtr[2];
94 dstPtr[2] = srcPtr[1];
95 dstPtr[3] = srcPtr[0];
98 dstPtr[0] = srcPtr[7];
99 dstPtr[1] = srcPtr[6];
100 dstPtr[2] = srcPtr[5];
101 dstPtr[3] = srcPtr[4];
102 dstPtr[4] = srcPtr[3];
103 dstPtr[5] = srcPtr[2];
104 dstPtr[6] = srcPtr[1];
105 dstPtr[7] = srcPtr[0];
108 for (
auto i = 0u; i <
sizeof(T); i++) {
109 dstPtr[i] = srcPtr[
sizeof(T) - i - 1];
113 _sink->
write(&reverse,
sizeof(reverse));
135 _sink->
write(str, strlen(str));
154 _sink->
write(str.c_str(), str.length());
174 _sink->
write(data, size);
178 std::shared_ptr<BinarySink>
const _sharedSink;
181 const bool _isNativeByteOrder;
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.
Represents the byte stream reader with custom byte order.
Definition: WriteStream.hpp:35
void writeBytes(const void *data, uint64_t size)
Writes raw bytes to the stream.
Definition: WriteStream.hpp:173
void write(T value)
Writes item to stream.
Definition: WriteStream.hpp:79
void writeString(const std::string &str)
Writes string into the stream.
Definition: WriteStream.hpp:153
WriteStream & operator<<(T value)
operator <<
Definition: WriteStream.hpp:123
WriteStream(BinarySink *sink, ByteOrder byteOrder=ByteOrder::Unknown)
Constructor.
Definition: WriteStream.hpp:59
WriteStream & operator<<(const std::string &value)
operator <<
Definition: WriteStream.hpp:162
ByteOrder getByteOrder() const
Returns byte order of the stream.
Definition: WriteStream.hpp:71
void writeString(const char *str)
Writes string into the stream.
Definition: WriteStream.hpp:133
WriteStream(std::shared_ptr< BinarySink > sink, ByteOrder byteOrder=ByteOrder::Unknown)
Constructor.
Definition: WriteStream.hpp:44
WriteStream & operator<<(const char *value)
operator <<
Definition: WriteStream.hpp:143
Definition: BinaryData.hpp:28
ByteOrder CPP_MATE_LIB_API getNativeByteOrder()
Returns platform byte order.
ByteOrder
The byte order type.
Definition: ByteOrder.hpp:29
@ Unknown
Unknown byte order.