writeVarInt2 function
Implementation
Uint8List writeVarInt2(value) {
if (value < 0x40) {
// 1 byte
return Uint8List.fromList([value & 0x3f]);
}
if (value < 0x4000) {
// 2 bytes
return Uint8List.fromList([0x40 | ((value >> 8) & 0x3f), value & 0xff]);
}
if (value < 0x40000000) {
// 4 bytes
return Uint8List.fromList([
0x80 | ((value >> 24) & 0x3f),
(value >> 16) & 0xff,
(value >> 8) & 0xff,
value & 0xff,
]);
}
if (value <= Number.MAX_SAFE_INTEGER) {
final hi = pow(value / 2, 32).toInt(); // Math.floor(value / 2 ** 32);
var lo = value >> 0;
return Uint8List.fromList([
0xC0 | ((hi >> 24) & 0x3f),
(hi >> 16) & 0xff,
(hi >> 8) & 0xff,
hi & 0xff,
(lo >> 24) & 0xff,
(lo >> 16) & 0xff,
(lo >> 8) & 0xff,
lo & 0xff,
]);
}
throw Exception("Value too large for QUIC VarInt");
}