Skip to content

Commit

Permalink
fix overlapping ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
merykitty committed Jan 5, 2024
1 parent ccaf334 commit 2cff14a
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions src/main/java/dev/morling/onebrc/CalculateAverage_merykitty.java
Expand Up @@ -215,7 +215,8 @@ private static long iterate(PoorManMap aggrMap, MemorySegment data, long offset)

long currOffset = offset;
while (true) {
long semicolonPos = Long.numberOfTrailingZeros(semicolons);
int localOffset = (int) (currOffset - offset);
long semicolonPos = Long.numberOfTrailingZeros(semicolons) - localOffset;
int hash = data.get(ValueLayout.JAVA_INT_UNALIGNED, currOffset);
if (semicolonPos < Integer.BYTES) {
hash = (byte) hash;
Expand Down Expand Up @@ -245,7 +246,6 @@ private static long iterate(PoorManMap aggrMap, MemorySegment data, long offset)
continue;
}

int localOffset = (int) (currOffset - offset);
var nodeKey = ByteVector.fromArray(BYTE_SPECIES, node.data, BYTE_SPECIES.length() - localOffset);
var eqMask = line.compare(VectorOperators.EQ, nodeKey).toLong();
long validMask = (-1L >>> -semicolonPos) << localOffset;
Expand All @@ -256,7 +256,7 @@ private static long iterate(PoorManMap aggrMap, MemorySegment data, long offset)
}

long nextOffset = parseDataPoint(aggr, data, currOffset + 1 + semicolonPos);
semicolons >>>= (nextOffset - currOffset);
semicolons &= (semicolons - 1);
if (semicolons == 0) {
return nextOffset;
}
Expand All @@ -279,8 +279,8 @@ private static PoorManMap processFile(MemorySegment data, long offset, long limi
return aggrMap;
}

while (offset < Math.min(limit, data.byteSize() - Math.max(BYTE_SPECIES.vectorByteSize(),
Long.BYTES + 1 + KEY_MAX_SIZE))) {
while (offset < limit - Math.max(BYTE_SPECIES.vectorByteSize(),
Long.BYTES + 1 + KEY_MAX_SIZE)) {
offset = iterate(aggrMap, data, offset);
}

Expand Down

0 comments on commit 2cff14a

Please sign in to comment.