shared_lib: Add protozero zigzag decode functions
Change-Id: Ie25a76478dec0cd0ffece666fa0e709ddfc345d3
diff --git a/include/perfetto/public/pb_utils.h b/include/perfetto/public/pb_utils.h
index ef4ed97..32ea759 100644
--- a/include/perfetto/public/pb_utils.h
+++ b/include/perfetto/public/pb_utils.h
@@ -123,4 +123,16 @@
PERFETTO_STATIC_CAST(uint64_t, value >> 63);
}
+static inline int32_t PerfettoPbZigZagDecode32(uint32_t value) {
+ uint32_t mask =
+ PERFETTO_STATIC_CAST(uint32_t, -PERFETTO_STATIC_CAST(int32_t, value & 1));
+ return PERFETTO_STATIC_CAST(int32_t, ((value >> 1) ^ mask));
+}
+
+static inline int64_t PerfettoPbZigZagDecode64(uint64_t value) {
+ uint64_t mask =
+ PERFETTO_STATIC_CAST(uint64_t, -PERFETTO_STATIC_CAST(int64_t, value & 1));
+ return PERFETTO_STATIC_CAST(int64_t, ((value >> 1) ^ mask));
+}
+
#endif // INCLUDE_PERFETTO_PUBLIC_PB_UTILS_H_