7 #if !defined(MQTT_VARIABLE_LENGTH_HPP)
8 #define MQTT_VARIABLE_LENGTH_HPP
20 if (
size > 0xfffffff)
return bytes;
22 bytes.push_back(
static_cast<char>((
size & 0b01111111) | 0b10000000));
25 bytes.push_back(
size & 0b01111111);
29 template <
typename Container>
32 if (
size > 0xfffffff)
return;
34 c.push_back(
static_cast<typename Container::value_type
>((
size & 0b01111111) | 0b10000000));
37 c.push_back(
size & 0b01111111);
41 constexpr std::tuple<std::size_t, std::size_t>
45 std::size_t consumed = 0;
46 for (
auto b : bytes) {
47 len += (b & 0b01111111) * mul;
50 if (mul > 128 * 128 * 128 * 128)
return {0, 0};
51 if (!(b & 0b10000000))
break;
53 return {len, consumed};
56 template <
typename Iterator>
57 constexpr std::tuple<std::size_t, std::size_t>
61 std::size_t consumed = 0;
63 len += (*b & 0b01111111) * mul;
66 if (mul > 128 * 128 * 128 * 128)
return {0, 0};
67 if (!(*b & 0b10000000))
break;
69 return {len, consumed};
std::string variable_bytes(std::size_t size)
Definition: variable_length.hpp:18
void variable_push(Container &c, std::size_t size)
Definition: variable_length.hpp:31
std::size_t size(basic_message_variant< PacketIdBytes > const &mv)
Definition: message_variant.hpp:93
constexpr std::tuple< std::size_t, std::size_t > variable_length(T const &bytes)
Definition: variable_length.hpp:42