1 #include "ligier_helper.hpp"
18 , std::size_t max_size
19 , std::string
const& tag
21 static std::string
const header =
"_Subscri";
22 static std::string
const mode =
" w ";
23 static std::string
const trailer =
"_Always";
25 uint32_t
const tagsize = ntohl(3 + tag.size());
27 std::size_t
const total_size
36 if (total_size > max_size) {
37 throw std::runtime_error(
"buffer too small");
40 std::memset(buffer,
'\0', total_size);
42 std::memcpy(buffer, header.c_str(), header.size());
43 buffer += header.size();
44 std::memcpy(buffer, &tagsize,
sizeof(tagsize));
45 buffer +=
sizeof(tagsize);
47 std::memcpy(buffer, mode.c_str(), mode.size());
48 buffer += mode.size();
49 std::memcpy(buffer, tag.c_str(), tag.size());
51 std::memcpy(buffer, trailer.c_str(), trailer.size());
58 uint32_t
const& message_size = *
static_cast<uint32_t const* const
>(
59 static_cast<void const* const
>(buffer + 8)
62 return ntohl(message_size);
std::size_t read_data_size(char const *const buffer)
std::size_t prepare_tag(char *buffer, std::size_t max_size, std::string const &tag)