#include "ProtoUtil.h" size_t varint_length(uint32_t v) { if (v == 0) return 1; size_t logcounter = 0; while (v > 0) { ++logcounter; v >>= 7; } return logcounter; } size_t encode_varint(std::vector& dst, uint32_t value) { constexpr uint8_t MSB = 0b10000000; uint32_t n = value; size_t i = 0; while (n >= 0x80) { dst.push_back(MSB | static_cast(n & 0x7F)); ++i; n >>= 7; } dst.push_back(static_cast(n)); return i + 1; } uint32_t pack_wire_tag(uint32_t field_id, uint8_t wire_type) { return (field_id << 3) | static_cast(wire_type); }