2#include "../utility/assert.h"
3#include "../utility/crc.h"
4#include "../utility/meta.h"
5#include "../utility/parameter.h"
7#include "../stream/serialize_traits.h"
15 template<u
int32_t Version>
23 template<u
int32_t Version>
27 constexpr static uint32_t protocol_size =
sizeof(uint32_t);
29 template<
typename Stream>
33 if (writer.get_num_bits_serialized() == 0)
34 return writer.pad_to_size(4);
36 uint32_t num_bits = writer.flush();
42 uint32_t num_bytes = writer.get_num_bytes_serialized();
45 uint32_t generated_checksum =
utility::crc_uint32(protocol_version,
byte_buffer + protocol_size, writer.get_num_bytes_serialized() - protocol_size);
48 uint32_t* buffer =
reinterpret_cast<uint32_t*
>(
byte_buffer);
54 template<
typename Stream>
58 if (reader.get_num_bits_serialized() > 0)
61 BS_ASSERT(reader.can_serialize_bits(32U));
65 uint32_t num_bytes = (reader.get_total_bits() - 1U) / 8U + 1U;
71 uint32_t given_checksum;
72 BS_ASSERT(reader.serialize_bits(given_checksum, 32U));
75 return generated_checksum == given_checksum;
#define BS_ASSERT(...)
Definition assert.h:15
std::enable_if_t< T::writing, R > is_writing_t
Definition meta.h:25
uint32_t crc_uint32(uint32_t checksum, const uint8_t *bytes, uint32_t size)
Definition crc.h:26
BS_CONSTEXPR uint32_t to_big_endian32(uint32_t value)
Definition endian.h:104
std::enable_if_t< T::reading, R > is_reading_t
Definition meta.h:28
constexpr uint32_t to_big_endian32_const(uint32_t value)
Definition endian.h:96
Definition bounded_range.h:28
A byte buffer aligned to 4 bytes. Can be used with bit_reader and bit_writer.
Definition byte_buffer.h:15
Type for checksums.
Definition checksum_trait.h:16
static utility::is_writing_t< Stream > serialize(Stream &writer) noexcept
Definition checksum_trait.h:31
static utility::is_reading_t< Stream > serialize(Stream &reader) noexcept
Definition checksum_trait.h:56
A class for specializing trait serialization functions.
Definition serialize_traits.h:11