|
size_t | pw_varint_Encode32 (uint32_t integer, void *output, size_t output_size_bytes) |
|
size_t | pw_varint_Encode64 (uint64_t integer, void *output, size_t output_size_bytes) |
|
static uint32_t | pw_varint_ZigZagEncode32 (int32_t n) |
| Zig-zag encodes an int32_t , returning it as a uint32_t .
|
|
static uint64_t | pw_varint_ZigZagEncode64 (int64_t n) |
| Zig-zag encodes an int64_t , returning it as a uint64_t .
|
|
static uint8_t | pw_varint_EncodeOneByte32 (uint32_t *integer) |
|
static uint8_t | pw_varint_EncodeOneByte64 (uint64_t *integer) |
|
static int32_t | pw_varint_ZigZagDecode32 (uint32_t n) |
| Zig-zag decodes a uint64_t , returning it as an int64_t .
|
|
static int64_t | pw_varint_ZigZagDecode64 (uint64_t n) |
| Zig-zag decodes a uint64_t , returning it as an int64_t .
|
|
size_t | pw_varint_Decode32 (const void *input, size_t input_size_bytes, uint32_t *output) |
|
size_t | pw_varint_Decode64 (const void *input, size_t input_size_bytes, uint64_t *output) |
|
static bool | pw_varint_DecodeOneByte32 (uint8_t byte, size_t count, uint32_t *value) |
|
static bool | pw_varint_DecodeOneByte64 (uint8_t byte, size_t count, uint64_t *value) |
|
size_t | pw_varint_EncodedSizeBytes (uint64_t integer) |
| Returns the size of a uint64_t when encoded as a varint (LEB128).
|
|
size_t | pw_varint_EncodeCustom (uint64_t integer, void *output, size_t output_size, pw_varint_Format format) |
| Encodes a uint64_t using a custom varint format.
|
|
size_t | pw_varint_DecodeCustom (const void *input, size_t input_size, uint64_t *output, pw_varint_Format format) |
| Decodes a uint64_t using a custom varint format.
|
|
template<typename T > |
constexpr std::make_unsigned_t< T > | pw::varint::ZigZagEncode (T n) |
|
template<typename T > |
constexpr std::make_signed_t< T > | pw::varint::ZigZagDecode (T n) |
|
template<typename T , typename = std::enable_if_t<std::is_integral<T>::value || std::is_convertible<T, uint64_t>::value>> |
constexpr size_t | pw::varint::EncodedSize (T integer) |
| Computes the size of an integer when encoded as a varint.
|
|
size_t | pw::varint::EncodeLittleEndianBase128 (uint64_t integer, const span< std::byte > &output) |
|
template<typename T > |
size_t | pw::varint::Encode (T integer, const span< std::byte > &output) |
|
size_t | pw::varint::Decode (const span< const std::byte > &input, int64_t *output) |
|
size_t | pw::varint::Decode (const span< const std::byte > &input, uint64_t *value) |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
|
size_t | pw::varint::Encode (uint64_t value, span< std::byte > output, Format format) |
| Encodes a varint in a custom format.
|
|
size_t | pw::varint::Decode (span< const std::byte > input, uint64_t *value, Format format) |
| Decodes a varint from a custom format.
|
|
constexpr uint64_t | pw::varint::MaxValueInBytes (size_t bytes) |
| Returns the maximum (max) integer value that can be encoded as a varint into the specified number of bytes.
|
|
The pw_varint
module provides functions for encoding and decoding variable length integers or varints. For smaller values, varints require less memory than a fixed-size encoding. For example, a 32-bit (4-byte) integer requires 1–5 bytes when varint-encoded.
pw_varint
supports custom variable-length encodings with different terminator bit values and positions (
embed:rst:inline :cpp:type:`pw::varint::Format`
). The basic encoding for unsigned integers is Little Endian Base 128 (LEB128). ZigZag encoding is also supported, which maps negative integers to positive integers to improve encoding density for LEB128.
Protocol Buffers and
embed:rst:inline :ref:`HDLC <module-pw_hdlc>`
use variable-length integer encodings for integers.