uvarintMarshalBinary function

Uint8List uvarintMarshalBinary(
  1. int val, [
  2. int? field
])

Implementation

Uint8List uvarintMarshalBinary(int val, [int? field]) {
  const int radix = 8;
  BigInt bigInt = BigInt.from(val);

  List<int> numData = [];

  var _bigInt = bigInt;

  BigInt mxNum = BigInt.from(127);
  while (_bigInt > mxNum) {
    var tmpBigInt = _bigInt.toUnsigned(radix);
    if ((tmpBigInt + BigInt.from(128)) < BigInt.from(255)) {
      tmpBigInt += BigInt.from(128);
    }

    numData.add(tmpBigInt.toInt());
    _bigInt = _bigInt >> 7;
  }

  var tmpBigInt = _bigInt.toUnsigned(radix);
  if ((tmpBigInt > BigInt.from(127)) && ((tmpBigInt + BigInt.from(128)) < BigInt.from(255))) {
    tmpBigInt += BigInt.from(128);
  }

  numData.add(tmpBigInt.toInt());

  if (field != null) {
    return fieldMarshalBinary(field, numData.asUint8List());
  }

  return numData.asUint8List();
}