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]) {
  if (offset >= data.length) {
    throw ArgumentError('Not enough data to decode varint');
  }

  int value = 0;
  int bytesConsumed = 0;

  while (offset + bytesConsumed < data.length) {
    final byte = data[offset + bytesConsumed];
    value = (value << 7) | (byte & 0x7F);
    bytesConsumed++;

    if ((byte & 0x80) == 0) {
      break;
    }

    if (bytesConsumed > 9) {
      throw ArgumentError('Varint too long');
    }
  }

  // Check if we reached end of data with continuation bit still set
  final lastByte = data[offset + bytesConsumed - 1];
  if ((lastByte & 0x80) != 0) {
    throw ArgumentError(
        'Truncated varint: data ends with continuation bit set');
  }

  return (value, bytesConsumed);
}