getVarLen method
(int, int)
getVarLen(
- int len, {
- 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);
}