query/src/main/kotlin/jetbrains/exodus/query/InMemoryMergeSortIterable.kt [41:74]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - height = 1 run { var i = size while (i > 1) { height++ i = i + 1 shr 1 } } next = IntArray(1 shl height) size2 = 1 shl height - 1 for (i in 0..size - 1) { next[i + size2] = i } for (i in size2 + size..next.size - 1) { next[i] = size } for (i in 1..size2 - 1) { next[i] = -1 } current = 0 } override fun hasNext(): Boolean { return current < size } override fun next(): Entity { var segment = 1 // next[current] is index of the least remaining element on current segment // next[current] == -1 means minimum on current segment is not counted yet // next[current] == src.size() means current segment is exhausted while (next[1] < 0) { segment = segment shl 1 if (segment >= size2 || next[segment] >= 0 && next[segment + 1] >= 0) { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - query/src/main/kotlin/jetbrains/exodus/query/InMemoryMergeSortIterableWithValueGetter.kt [48:81]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - height = 1 run { var i = size while (i > 1) { height++ i = i + 1 shr 1 } } next = IntArray(1 shl height) size2 = 1 shl height - 1 for (i in 0..size - 1) { next[i + size2] = i } for (i in size2 + size..next.size - 1) { next[i] = size } for (i in 1..size2 - 1) { next[i] = -1 } current = 0 } override fun hasNext(): Boolean { return current < size } override fun next(): Entity { var segment = 1 // next[current] is index of the least remaining element on current segment // next[current] == -1 means minimum on current segment is not counted yet // next[current] == src.size() means current segment is exhausted while (next[1] < 0) { segment = segment shl 1 if (segment >= size2 || next[segment] >= 0 && next[segment + 1] >= 0) { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -