3 #include "fly/types/bit_stream/detail/bit_stream.hpp"
4 #include "fly/types/bit_stream/detail/concepts.hpp"
5 #include "fly/types/bit_stream/types.hpp"
6 #include "fly/types/numeric/endian.hpp"
62 template <detail::BitStreamInteger DataType>
63 void write_bits(DataType bits, byte_type size);
78 void flush_header(byte_type remainder);
93 template <detail::BitStreamInteger DataType>
94 void flush(
const DataType &buffer, byte_type bytes);
96 std::ostream &m_stream;
100 template <detail::BitStreamInteger DataType>
105 if (size > m_position)
107 const byte_type rshift = size - m_position;
111 m_buffer |=
static_cast<buffer_type
>(bits) >> rshift;
115 bits &= bit_mask<DataType>(rshift);
119 const byte_type lshift = m_position - size;
121 m_buffer |=
static_cast<buffer_type
>(bits) << lshift;
126 template <detail::BitStreamInteger DataType>
127 void BitStreamWriter::flush(
const DataType &buffer, byte_type bytes)
131 const DataType data = endian_swap_if_non_native<std::endian::big>(buffer);
133 m_stream_buffer->sputn(
134 reinterpret_cast<const std::ios::char_type *
>(&data),
135 static_cast<std::streamsize
>(bytes));
Definition: bit_stream_writer.hpp:24
bool finish()
Definition: bit_stream_writer.cpp:29
void write_byte(byte_type byte)
Definition: bit_stream_writer.cpp:23
void write_bits(DataType bits, byte_type size)
Definition: bit_stream_writer.hpp:101
void write_word(word_type word)
Definition: bit_stream_writer.cpp:17
BitStreamWriter(std::ostream &stream) noexcept
Definition: bit_stream_writer.cpp:9
Definition: bit_stream.hpp:34