writeVarInt2 function

Uint8List writeVarInt2(
  1. dynamic value
)

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");
}