private void writeSubKvs()

in computer-core/src/main/java/org/apache/hugegraph/computer/core/sort/flusher/CombineSubKvInnerSortFlusher.java [100:161]


    private void writeSubKvs(KvEntry kvEntry, Iterator<KvEntry> subKvIter)
                             throws IOException {
        E.checkArgument(subKvIter.hasNext(),
                        "Parameter subKvs can't be empty");

        kvEntry.key().write(this.output);
        long position = this.output.position();
        // Write value length placeholder
        this.output.writeFixedInt(0);
        // Write subKv count placeholder
        this.output.writeFixedInt(0);

        // Write subKv to output
        KvEntry lastSubKv = subKvIter.next();
        Pointer lastSubValue = lastSubKv.value();
        int writtenCount = 0;

        while (true) {
            // Write subKv
            KvEntry current = null;
            if (subKvIter.hasNext()) {
                current = subKvIter.next();
                if (lastSubKv.compareTo(current) == 0) {
                    lastSubValue = this.combiner.combine(lastSubValue,
                                                         current.value());
                    continue;
                }
            }

            lastSubKv.key().write(this.output);
            lastSubValue.write(this.output);
            writtenCount++;

            if (writtenCount == this.subKvFlushThreshold || current == null) {
                // Fill placeholder
                long currentPosition = this.output.position();
                this.output.seek(position);
                // Fill value length placeholder
                this.output.writeFixedInt((int)
                                          (currentPosition - position - 4));
                // Fill subKv count placeholder
                this.output.writeFixedInt(writtenCount);
                this.output.seek(currentPosition);

                if (current == null) {
                    break;
                }

                // Used for next loop
                kvEntry.key().write(this.output);
                position = this.output.position();
                // Write value length placeholder
                this.output.writeFixedInt(0);
                // Write subKv count placeholder
                this.output.writeFixedInt(0);
                writtenCount = 0;
            }

            lastSubKv = current;
            lastSubValue = current.value();
        }
    }