From 2f38c95886a81729c2fa503f2b46d3d155a46fed Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Fri, 9 Aug 2024 21:17:02 +0200 Subject: [PATCH] (index) Backport bugfix from term-positions branch The ordering of TermIdsList is assumed to be unchanged by the surrounding code, but the constructor sorts the dang list to be able to do contains() by binary search. This is no bueno. This is gonna be a merge conflict in the future, but it's too big of a bug to leave for another month. --- .../index/results/model/ids/TermIdList.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/code/index/java/nu/marginalia/index/results/model/ids/TermIdList.java b/code/index/java/nu/marginalia/index/results/model/ids/TermIdList.java index f25ab1b9..1428ec38 100644 --- a/code/index/java/nu/marginalia/index/results/model/ids/TermIdList.java +++ b/code/index/java/nu/marginalia/index/results/model/ids/TermIdList.java @@ -3,7 +3,6 @@ package nu.marginalia.index.results.model.ids; import it.unimi.dsi.fastutil.longs.LongArrayList; import java.util.Arrays; -import java.util.Objects; import java.util.stream.LongStream; public final class TermIdList { @@ -29,6 +28,24 @@ public final class TermIdList { return array; } + public long at(int i) { + return array[i]; + } + + public boolean contains(long id) { + // array is typically small and unsorted, so linear search is fine + for (int i = 0; i < array.length; i++) { + if (array[i] == id) { + return true; + } + } + return false; + } + + public int indexOf(long id) { + return Arrays.binarySearch(array, id); + } + @Override public boolean equals(Object obj) { if (obj == this) return true;