decodeVarint static method

(int, int) decodeVarint(
  1. Uint8List data, [
  2. int offset = 0
])

Decodes a varint from bytes, returns (value, bytesConsumed)

Implementation

static (int value, int bytesConsumed) decodeVarint(
  Uint8List data, [
  int offset = 0,
]) {
  var value = 0;
  var bytesConsumed = 0;

  while (true) {
    if (offset + bytesConsumed >= data.length) {
      throw ArgumentError('Truncated varint');
    }

    final byte = data[offset + bytesConsumed];
    bytesConsumed++;

    final digit = byte & 0x7F;
    if (value > (infiniteTimestamp - digit) ~/ 128) {
      throw ArgumentError('Varint exceeds the supported integer range');
    }
    value = value * 128 + digit;

    if ((byte & 0x80) == 0) {
      return (value, bytesConsumed);
    }
  }
}