public Entity next()

in query/src/main/java/jetbrains/exodus/query/InMemoryMergeSortIterableWithArrayList.java [53:85]


            public Entity next() {
                if (src == null) {
                    init();
                }
                final Comparator<Entity> comparator = getComparator();
                int 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 <<= 1;
                    if (segment >= size2 || (next[segment] >= 0 && next[segment + 1] >= 0)) {
                        if ((next[segment + 1] >= src.size()) || ((next[segment] < src.size()) && (comparator.compare(src.get(next[segment]), src.get(next[segment + 1])) <= 0))) {
                            next[segment >> 1] = next[segment];
                        } else {
                            next[segment >> 1] = next[segment + 1];
                        }
                        segment >>= 2;
                    } else if (next[segment] >= 0) {
                        segment++;
                    }
                }
                int r = next[1];
                if (r >= src.size()) {
                    throw new NoSuchElementException();
                }
                next[r + size2] = src.size();
                for (int i = (r + size2) >> 1; i >= 1; i >>= 1) {
                    next[i] = -1;
                }
                current++;
                return src.get(r);
            }