mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-23 21:18:58 +00:00
(array) Override to Paging...Array$range()
This is a big performance boost in array.range().get(). Without an override, each access will go through pages[page].get(...) for each get()-operation. This adds up very quickly. BTreeReader does a bunch of get():s on a range()'d array during traversal in the queryData... methods.
This commit is contained in:
parent
03d999444d
commit
f321fa5ad3
@ -6,6 +6,7 @@ import nu.marginalia.array.IntArray;
|
||||
import nu.marginalia.array.algo.SortingContext;
|
||||
import nu.marginalia.array.buffer.IntQueryBuffer;
|
||||
import nu.marginalia.array.delegate.ReferenceImplIntArrayDelegate;
|
||||
import nu.marginalia.array.delegate.ShiftedIntArray;
|
||||
import nu.marginalia.array.functional.*;
|
||||
import nu.marginalia.array.functor.IntFolder;
|
||||
import nu.marginalia.array.functor.IntIOFolder;
|
||||
@ -369,6 +370,19 @@ public class PagingIntArray extends AbstractPagingArray<IntArrayPage, IntBuffer>
|
||||
return size;
|
||||
}
|
||||
|
||||
public ShiftedIntArray range(long start, long end) {
|
||||
if (partitioningScheme.isSamePage(start, end)) {
|
||||
return pages[partitioningScheme.getPage(start)]
|
||||
.range(partitioningScheme.getOffset(start),
|
||||
partitioningScheme.getEndOffset(start, end)
|
||||
);
|
||||
}
|
||||
else {
|
||||
return new ShiftedIntArray(start, end, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ArrayRangeReference<IntArray> directRangeIfPossible(long start, long end) {
|
||||
if (partitioningScheme.isSamePage(start, end)) {
|
||||
|
@ -6,6 +6,7 @@ import nu.marginalia.array.LongArray;
|
||||
import nu.marginalia.array.algo.SortingContext;
|
||||
import nu.marginalia.array.buffer.LongQueryBuffer;
|
||||
import nu.marginalia.array.delegate.ReferenceImplLongArrayDelegate;
|
||||
import nu.marginalia.array.delegate.ShiftedLongArray;
|
||||
import nu.marginalia.array.functional.LongBinaryIOOperation;
|
||||
import nu.marginalia.array.functional.LongIOTransformer;
|
||||
import nu.marginalia.array.functional.LongLongConsumer;
|
||||
@ -565,6 +566,18 @@ public class PagingLongArray extends AbstractPagingArray<LongArrayPage, LongBuff
|
||||
return pages[partitioningScheme.getPage(forOffset)];
|
||||
}
|
||||
|
||||
public ShiftedLongArray range(long start, long end) {
|
||||
if (partitioningScheme.isSamePage(start, end)) {
|
||||
return pages[partitioningScheme.getPage(start)]
|
||||
.range(partitioningScheme.getOffset(start),
|
||||
partitioningScheme.getEndOffset(start, end)
|
||||
);
|
||||
}
|
||||
else {
|
||||
return new ShiftedLongArray(start, end, this);
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayRangeReference<LongArray> directRangeIfPossible(long start, long end) {
|
||||
if (partitioningScheme.isSamePage(start, end)) {
|
||||
return new ArrayRangeReference<>(
|
||||
|
Loading…
Reference in New Issue
Block a user