diff options
Diffstat (limited to 'libs/protoutil/src/protobuf.cpp')
-rw-r--r-- | libs/protoutil/src/protobuf.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/libs/protoutil/src/protobuf.cpp b/libs/protoutil/src/protobuf.cpp index ec5325c57bd1..1c7eef922895 100644 --- a/libs/protoutil/src/protobuf.cpp +++ b/libs/protoutil/src/protobuf.cpp @@ -22,17 +22,28 @@ namespace util { uint8_t read_wire_type(uint32_t varint) { - return (uint8_t) (varint & 0x07); + return (uint8_t) (varint & WIRE_TYPE_MASK); } uint32_t read_field_id(uint32_t varint) { - return varint >> 3; + return varint >> FIELD_ID_SHIFT; +} + +size_t +get_varint_size(uint64_t varint) +{ + size_t size = 1; + while ((varint & ~0x7F)) { + size++; + varint >>= 7; + } + return size; } uint8_t* -write_raw_varint(uint8_t* buf, uint32_t val) +write_raw_varint(uint8_t* buf, uint64_t val) { uint8_t* p = buf; while (true) { @@ -49,7 +60,7 @@ write_raw_varint(uint8_t* buf, uint32_t val) uint8_t* write_length_delimited_tag_header(uint8_t* buf, uint32_t fieldId, size_t size) { - buf = write_raw_varint(buf, (fieldId << 3) | 2); + buf = write_raw_varint(buf, (fieldId << FIELD_ID_SHIFT) | WIRE_TYPE_LENGTH_DELIMITED); buf = write_raw_varint(buf, size); return buf; } |