readLong method

int readLong()

Read long/int from buffer

Implementation

int readLong() {
  // Converted to dart from js avsc library
  int n = 0;
  int k = 0;
  int b;
  int h;
  int f;
  int fk;

  do {
    b = next(1)[0];
    h = b & 0x80;
    n |= (b & 0x7f) << k;
    k += 7;
  } while (h != 0 && k < 28);

  if (h != 0) {
    // Switch to float arithmetic, otherwise we might overflow.
    f = n;
    fk = 268435456; // 2 ** 28.
    do {
      b = next(1)[0];
      f += (b & 0x7f) * fk;
      fk *= 128;
    } while ((b & 0x80) != 0);
    return ((f % 2) != 0 ? -(f + 1) : f) ~/ 2;
  }

  return (n >> 1) ^ -(n & 1);
}