wire_varint library

Varint (LEB128) and ZigZag encoding/decoding for protobuf wire format.

These functions implement the unsigned varint encoding (LEB128) and signed integer ZigZag encoding used by Protocol Buffers.

No imports beyond implicit dart:core. All operations use only standard Dart integer arithmetic, bitwise ops, and list manipulation — primitives that map directly to Ball std base functions.

References:

Test vectors: encodeVarint([], 0) → 0 encodeVarint([], 1) → 1 encodeVarint([], 127) → 127 encodeVarint([], 128) → 128, 1 encodeVarint([], 300) → 172, 2 encodeVarint([], 150) → 150, 1 (official docs example) encodeZigZag32(0) → 0 encodeZigZag32(-1) → 1 encodeZigZag32(1) → 2 encodeZigZag32(-2) → 3 decodeZigZag(0) → 0 decodeZigZag(1) → -1 decodeZigZag(2) → 1

Functions

decodeVarint(List<int> buffer, int offset) Map<String, int>
Decodes a varint (LEB128) from buffer starting at offset.
decodeZigZag(int n) int
ZigZag-decodes an unsigned integer back to its signed representation.
encodeVarint(List<int> buffer, int value) List<int>
Appends the varint-encoded (LEB128) representation of value to buffer.
encodeZigZag32(int n) int
ZigZag-encodes a signed 32-bit integer.
encodeZigZag64(int n) int
ZigZag-encodes a signed 64-bit integer.