gf2121 commented on code in PR #12623: URL: https://github.com/apache/lucene/pull/12623#discussion_r1347069694
########## lucene/core/src/java/org/apache/lucene/util/StableMSBRadixSorter.java: ########## @@ -78,4 +78,60 @@ protected void reorder(int from, int to, int[] startOffsets, int[] endOffsets, i } restore(from, to); } + + /** A MergeSorter taking advantage of temporary storage. */ + protected abstract class MergeSorter extends Sorter { + @Override + public void sort(int from, int to) { + checkRange(from, to); + mergeSort(from, to); + } + + private void mergeSort(int from, int to) { + if (to - from < BINARY_SORT_THRESHOLD) { + binarySort(from, to); + } else { + final int mid = (from + to) >>> 1; + mergeSort(from, mid); + mergeSort(mid, to); + merge(from, to, mid); + } + } + + /** + * We tried to expose this to implementations to get a bulk copy optimization. But it did not + * bring a noticeable improvement in benchmark as {@code len} is usually small. + */ + private void bulkSave(int from, int tmpFrom, int len) { + for (int i = 0; i < len; i++) { + save(from + i, tmpFrom + i); + } + } + + private void merge(int from, int to, int mid) { + assert to > mid && mid > from; Review Comment: Great advice! Thank you! -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org