mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-24 05: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.algo.SortingContext;
|
||||||
import nu.marginalia.array.buffer.IntQueryBuffer;
|
import nu.marginalia.array.buffer.IntQueryBuffer;
|
||||||
import nu.marginalia.array.delegate.ReferenceImplIntArrayDelegate;
|
import nu.marginalia.array.delegate.ReferenceImplIntArrayDelegate;
|
||||||
|
import nu.marginalia.array.delegate.ShiftedIntArray;
|
||||||
import nu.marginalia.array.functional.*;
|
import nu.marginalia.array.functional.*;
|
||||||
import nu.marginalia.array.functor.IntFolder;
|
import nu.marginalia.array.functor.IntFolder;
|
||||||
import nu.marginalia.array.functor.IntIOFolder;
|
import nu.marginalia.array.functor.IntIOFolder;
|
||||||
@ -369,6 +370,19 @@ public class PagingIntArray extends AbstractPagingArray<IntArrayPage, IntBuffer>
|
|||||||
return size;
|
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
|
@Override
|
||||||
public ArrayRangeReference<IntArray> directRangeIfPossible(long start, long end) {
|
public ArrayRangeReference<IntArray> directRangeIfPossible(long start, long end) {
|
||||||
if (partitioningScheme.isSamePage(start, 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.algo.SortingContext;
|
||||||
import nu.marginalia.array.buffer.LongQueryBuffer;
|
import nu.marginalia.array.buffer.LongQueryBuffer;
|
||||||
import nu.marginalia.array.delegate.ReferenceImplLongArrayDelegate;
|
import nu.marginalia.array.delegate.ReferenceImplLongArrayDelegate;
|
||||||
|
import nu.marginalia.array.delegate.ShiftedLongArray;
|
||||||
import nu.marginalia.array.functional.LongBinaryIOOperation;
|
import nu.marginalia.array.functional.LongBinaryIOOperation;
|
||||||
import nu.marginalia.array.functional.LongIOTransformer;
|
import nu.marginalia.array.functional.LongIOTransformer;
|
||||||
import nu.marginalia.array.functional.LongLongConsumer;
|
import nu.marginalia.array.functional.LongLongConsumer;
|
||||||
@ -565,6 +566,18 @@ public class PagingLongArray extends AbstractPagingArray<LongArrayPage, LongBuff
|
|||||||
return pages[partitioningScheme.getPage(forOffset)];
|
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) {
|
public ArrayRangeReference<LongArray> directRangeIfPossible(long start, long end) {
|
||||||
if (partitioningScheme.isSamePage(start, end)) {
|
if (partitioningScheme.isSamePage(start, end)) {
|
||||||
return new ArrayRangeReference<>(
|
return new ArrayRangeReference<>(
|
||||||
|
Loading…
Reference in New Issue
Block a user