diff --git a/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/IntArrayBase.java b/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/IntArrayBase.java index bf5249a6..94e462b7 100644 --- a/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/IntArrayBase.java +++ b/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/IntArrayBase.java @@ -18,22 +18,14 @@ public interface IntArrayBase extends BulkTransferArray { } } - default void increment(long pos) { - set(pos, get(pos) + 1); - } - default void swap(long pos1, long pos2) { int tmp = get(pos1); set(pos1, get(pos2)); set(pos2, tmp); } - default void swapn(int n, long pos1, long pos2) { - for (int i = 0; i < n; i++) { - int tmp = get(pos1+i); - set(pos1+i, get(pos2+i)); - set(pos2+i, tmp); - } + default void increment(long pos) { + set(pos, get(pos) + 1); } default int getAndIncrement(long pos) { @@ -47,6 +39,7 @@ public interface IntArrayBase extends BulkTransferArray { set(start+i, buffer.get(i + bufferStart)); } } + default void get(long start, long end, IntBuffer buffer, int bufferStart) { for (int i = 0; i < (end-start); i++) { buffer.put(i + bufferStart, get(start + i)); diff --git a/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/LongArrayBase.java b/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/LongArrayBase.java index 508fdf9a..216e089b 100644 --- a/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/LongArrayBase.java +++ b/marginalia_nu/src/main/java/nu/marginalia/util/array/algo/LongArrayBase.java @@ -28,6 +28,7 @@ public interface LongArrayBase extends BulkTransferArray { set(pos2, tmp); } + /** Behavior not defined for overlapping ranges */ default void swapn(int n, long pos1, long pos2) { for (int i = 0; i < n; i++) { long tmp = get(pos1+i); diff --git a/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingIntArray.java b/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingIntArray.java index b5f9b48d..6b44fecb 100644 --- a/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingIntArray.java +++ b/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingIntArray.java @@ -114,6 +114,11 @@ public class PagingIntArray extends AbstractPagingArray } } + @Override + public int getAndIncrement(long pos) { + return pages[partitioningScheme.getPage(pos)].getAndIncrement(partitioningScheme.getOffset(pos)); + } + @Override public void get(long start, long end, int[] buffer) { if (partitioningScheme.isSamePage(start, end)) { diff --git a/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingLongArray.java b/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingLongArray.java index 1180126a..597979ef 100644 --- a/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingLongArray.java +++ b/marginalia_nu/src/main/java/nu/marginalia/util/array/page/PagingLongArray.java @@ -119,6 +119,11 @@ public class PagingLongArray extends AbstractPagingArray