getVarLen method

(int, int) getVarLen(
  1. int len, {
  2. dynamic backward = false,
})

Implementation

(int, int) getVarLen(int len, {backward = false}) {
  bool hasStop = false;
  int val = 0;
  int byteCount = 0;
  int maxCount = backward ? offset : maxlen - offset;
  if (offset < maxlen && maxCount != 0) {
    maxCount = maxCount < 4 ? maxCount : 4;
    int byte;
    final stopFlag = 0x80;
    final mask = 0x7f;
    int shift = 0;
    int p = offset;
    do {
      if (backward) {
        byte = data[p];
        p--;
        val = val | (byte & mask) << shift;
        shift += 7;
      } else {
        byte = data[p];
        p++;
        val <<= 7;
        val |= (byte & mask);
      }
      byteCount++;
      hasStop = byte & stopFlag != 0;
    } while (!hasStop && (byteCount < maxCount));
  }
  if (!hasStop) {
    throw MobiBufferOverflowException();
  }
  offset = backward ? offset - byteCount : offset + byteCount;

  return (len + byteCount, val);
}