decodeVarint static method
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);
}