in lucene-directory-v2/src/main/java/jetbrains/exodus/lucene2/XodusDirectory.java [1146:1244]
public long readVLong() throws IOException {
var pageOffset = (int) position & (pageSize - 1);
var pageAddress = fileAddress + position - pageOffset;
final long remaining = Math.min(end - position, pageSize - pageOffset);
if (9 <= remaining) {
readPageIfNeeded(pageAddress);
int positionOffset = 0;
try {
byte b = page[pageOffset];
positionOffset++;
if (b >= 0) {
return b;
}
pageOffset++;
long i = b & 0x7FL;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 7;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 14;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 21;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 28;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 35;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 42;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 49;
if (b >= 0) {
return i;
}
pageOffset++;
b = page[pageOffset];
positionOffset++;
i |= (b & 0x7FL) << 56;
if (b >= 0) {
return i;
}
} finally {
movePosition(positionOffset);
}
throw new IOException("Invalid vLong detected (negative values disallowed)");
} else {
return super.readVLong();
}
}