diff --git a/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingIntArray.java b/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingIntArray.java index 0be2801c..88c7dcb1 100644 --- a/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingIntArray.java +++ b/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingIntArray.java @@ -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 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 directRangeIfPossible(long start, long end) { if (partitioningScheme.isSamePage(start, end)) { diff --git a/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java b/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java index 0e01f1f3..57961273 100644 --- a/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java +++ b/code/libraries/array/src/main/java/nu/marginalia/array/page/PagingLongArray.java @@ -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 directRangeIfPossible(long start, long end) { if (partitioningScheme.isSamePage(start, end)) { return new ArrayRangeReference<>(