aboutsummaryrefslogtreecommitdiff
path: root/pw_varint/varint.cc
diff options
context:
space:
mode:
authorAlexei Frolov <frolv@google.com>2020-05-20 13:30:07 -0700
committerAlexei Frolov <frolv@google.com>2020-05-20 22:22:32 +0000
commit388d4b9b03d6eaf8282afbbbd76f47f3cab879a4 (patch)
treebe71b54d3d81478e2a06f2894995f4716f91b821 /pw_varint/varint.cc
parent0909290a4a6793ea34f7f174f2267a2385ebfaea (diff)
downloadpigweed-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.cc8
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