diff options
author | Alexei Frolov <frolv@google.com> | 2020-05-20 13:30:07 -0700 |
---|---|---|
committer | Alexei Frolov <frolv@google.com> | 2020-05-20 22:22:32 +0000 |
commit | 388d4b9b03d6eaf8282afbbbd76f47f3cab879a4 (patch) | |
tree | be71b54d3d81478e2a06f2894995f4716f91b821 /pw_varint/varint.cc | |
parent | 0909290a4a6793ea34f7f174f2267a2385ebfaea (diff) | |
download | pigweed-388d4b9b03d6eaf8282afbbbd76f47f3cab879a4.tar.gz |
pw_varint: Add EncodedSize function
This change adds functions to the varint module which return the size of
an integer when encoded as a varint.
Change-Id: I976e33835b1b6bece7ca586cd7f1c4d9ca17cdc8
Diffstat (limited to 'pw_varint/varint.cc')
-rw-r--r-- | pw_varint/varint.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/pw_varint/varint.cc b/pw_varint/varint.cc index ddfc0ed40..9b782c0ef 100644 --- a/pw_varint/varint.cc +++ b/pw_varint/varint.cc @@ -83,5 +83,13 @@ extern "C" size_t pw_VarintZigZagDecode(const void* input, return bytes; } +extern "C" size_t pw_VarintEncodedSize(uint64_t integer) { + return integer == 0 ? 1 : (64 - __builtin_clzll(integer) + 6) / 7; +} + +extern "C" size_t pw_VarintZigZagEncodedSize(int64_t integer) { + return pw_VarintEncodedSize(ZigZagEncode(integer)); +} + } // namespace varint } // namespace pw |