1 #ifndef IOUTILITIES_BINARYWRITER_H
2 #define IOUTILITIES_BINARYWRITER_H
4 #include "../conversion/binaryconversion.h"
16 BinaryWriter(std::ostream *stream,
bool giveOwnership =
false);
21 const std::ostream *stream()
const;
22 std::ostream *stream();
23 void setStream(std::ostream *stream,
bool giveOwnership =
false);
24 bool hasOwnership()
const;
26 void detatchOwnership();
29 void write(
const char *buffer, std::streamsize length);
30 void write(
const std::vector<char> &buffer, std::streamsize length);
31 void writeChar(
char value);
32 void writeByte(std::uint8_t value);
33 void writeInt16BE(std::int16_t value);
34 void writeUInt16BE(std::uint16_t value);
35 void writeInt24BE(std::int32_t value);
36 void writeUInt24BE(std::uint32_t value);
37 void writeInt32BE(std::int32_t value);
38 void writeUInt32BE(std::uint32_t value);
39 void writeInt40BE(std::int64_t value);
40 void writeUInt40BE(std::uint64_t value);
41 void writeInt56BE(std::int64_t value);
42 void writeUInt56BE(std::uint64_t value);
43 void writeInt64BE(std::int64_t value);
44 void writeUInt64BE(std::uint64_t value);
45 void writeVariableLengthUIntBE(std::uint64_t value);
46 void writeFloat32BE(
float value);
47 void writeFloat64BE(
double value);
48 void writeInt16LE(std::int16_t value);
49 void writeUInt16LE(std::uint16_t value);
50 void writeInt24LE(std::int32_t value);
51 void writeUInt24LE(std::uint32_t value);
52 void writeInt32LE(std::int32_t value);
53 void writeUInt32LE(std::uint32_t value);
54 void writeInt40LE(std::int64_t value);
55 void writeUInt40LE(std::uint64_t value);
56 void writeInt56LE(std::int64_t value);
57 void writeUInt56LE(std::uint64_t value);
58 void writeInt64LE(std::int64_t value);
59 void writeUInt64LE(std::uint64_t value);
60 void writeVariableLengthUIntLE(std::uint64_t value);
61 void writeFloat32LE(
float value);
62 void writeFloat64LE(
double value);
63 void writeString(
const std::string &value);
64 void writeTerminatedString(
const std::string &value);
65 void writeLengthPrefixedString(
const std::string &value);
66 void writeLengthPrefixedCString(
const char *value, std::size_t size);
67 void writeBool(
bool value);
68 void writeSynchsafeUInt32BE(std::uint32_t valueToConvertAndWrite);
69 void writeFixed8BE(
float valueToConvertAndWrite);
70 void writeFixed16BE(
float valueToConvertAndWrite);
71 void writeSynchsafeUInt32LE(std::uint32_t valueToConvertAndWrite);
72 void writeFixed8LE(
float valueToConvertAndWrite);
73 void writeFixed16LE(
float valueToConvertAndWrite);
76 void write(
char oneChar);
77 void write(std::uint8_t oneByte);
78 void write(
bool oneBool);
79 void write(
const std::string &lengthPrefixedString);
80 void write(
const char *lengthPrefixedString);
81 void write(std::int16_t one16BitInt);
82 void write(std::uint16_t one16BitUint);
83 void write(std::int32_t one32BitInt);
84 void write(std::uint32_t one32BitUint);
85 void write(std::int64_t one64BitInt);
86 void write(std::uint64_t one64BitUint);
87 void write(
float one32BitFloat);
88 void write(
double one64BitFloat);
91 void writeVariableLengthInteger(std::uint64_t size,
void (*getBytes)(std::uint64_t,
char *));
93 std::ostream *m_stream;
105 , m_ownership(giveOwnership)
114 : m_stream(other.m_stream)
200 return m_stream ? m_stream->fail() :
false;
208 m_stream->write(buffer, length);
217 m_stream->write(buffer.data(), length);
226 m_stream->write(m_buffer, 1);
234 m_buffer[0] = *
reinterpret_cast<char *
>(&value);
235 m_stream->write(m_buffer, 1);
251 BE::getBytes(value, m_buffer);
252 m_stream->write(m_buffer,
sizeof(std::int16_t));
260 BE::getBytes(value, m_buffer);
261 m_stream->write(m_buffer,
sizeof(std::uint16_t));
270 BE::getBytes(value, m_buffer);
271 m_stream->write(m_buffer + 1, 3);
281 BE::getBytes(value, m_buffer);
282 m_stream->write(m_buffer + 1, 3);
290 BE::getBytes(value, m_buffer);
291 m_stream->write(m_buffer,
sizeof(std::int32_t));
299 BE::getBytes(value, m_buffer);
300 m_stream->write(m_buffer,
sizeof(std::uint32_t));
309 BE::getBytes(value, m_buffer);
310 m_stream->write(m_buffer + 3, 5);
319 BE::getBytes(value, m_buffer);
320 m_stream->write(m_buffer + 3, 5);
329 BE::getBytes(value, m_buffer);
330 m_stream->write(m_buffer + 1, 7);
339 BE::getBytes(value, m_buffer);
340 m_stream->write(m_buffer + 1, 7);
348 BE::getBytes(value, m_buffer);
349 m_stream->write(m_buffer,
sizeof(std::int64_t));
357 BE::getBytes(value, m_buffer);
358 m_stream->write(m_buffer,
sizeof(std::uint64_t));
367 writeVariableLengthInteger(value,
static_cast<void (*)(std::uint64_t,
char *)
>(&BE::getBytes));
375 BE::getBytes(value, m_buffer);
376 m_stream->write(m_buffer,
sizeof(
float));
384 BE::getBytes(value, m_buffer);
385 m_stream->write(m_buffer,
sizeof(
double));
393 LE::getBytes(value, m_buffer);
394 m_stream->write(m_buffer,
sizeof(std::int16_t));
402 LE::getBytes(value, m_buffer);
403 m_stream->write(m_buffer,
sizeof(std::uint16_t));
413 LE::getBytes(value, m_buffer);
414 m_stream->write(m_buffer, 3);
424 LE::getBytes(value, m_buffer);
425 m_stream->write(m_buffer, 3);
433 LE::getBytes(value, m_buffer);
434 m_stream->write(m_buffer,
sizeof(std::int32_t));
442 LE::getBytes(value, m_buffer);
443 m_stream->write(m_buffer,
sizeof(std::uint32_t));
452 LE::getBytes(value, m_buffer);
453 m_stream->write(m_buffer, 5);
462 LE::getBytes(value, m_buffer);
463 m_stream->write(m_buffer, 5);
472 LE::getBytes(value, m_buffer);
473 m_stream->write(m_buffer, 7);
482 LE::getBytes(value, m_buffer);
483 m_stream->write(m_buffer, 7);
491 LE::getBytes(value, m_buffer);
492 m_stream->write(m_buffer,
sizeof(std::int64_t));
500 LE::getBytes(value, m_buffer);
501 m_stream->write(m_buffer,
sizeof(std::uint64_t));
510 writeVariableLengthInteger(value,
static_cast<void (*)(std::uint64_t,
char *)
>(&LE::getBytes));
518 LE::getBytes(value, m_buffer);
519 m_stream->write(m_buffer,
sizeof(
float));
527 LE::getBytes(value, m_buffer);
528 m_stream->write(m_buffer,
sizeof(
double));
536 m_stream->write(value.c_str(), value.length());
544 m_stream->write(value.c_str(), value.length() + 1);
557 m_stream->write(value.data(),
static_cast<std::streamsize
>(value.size()));
570 m_stream->write(value,
static_cast<std::streamsize
>(size));
734 #endif // IO_UTILITIES_BINARYWRITER_H