docs: private void startNewTimeAndDims(RowPointer rowPointer)
    {
      int originalIteratorIndex = rowPointer.getIndexNum();
      // Note: at the moment when this operation is performed, markedRowPointersOfOriginalIterators[originalIteratorIndex]
      // doesn't yet contain actual current dimension and metric values. startNewTimeAndDims() is called from
      // moveToNext(), see above. Later in the code of moveToNext(), mergingIterator.mark() [1] is called, and then
      // mergingIterator.moveToNext() [2]. This will make MergingRowIterator.moveToNext() implementation (see it's code)
      // to call mark() on the current head iteratator, and only after that
      // markedRowPointersOfOriginalIterators[originalIteratorIndex] will have correct values. So by the time when
      // moveToNext() (from where this method is called) exits, and before getPointer() could be called by the user of
      // this class, it will have correct values.
      currentTimeAndDimsPointer = markedRowPointersOfOriginalIterators[originalIteratorIndex];
      soleCurrentPointSourceOriginalIteratorIndex = originalIteratorIndex;
      indexesOfCurrentlyCombinedOriginalIterators.set(originalIteratorIndex);
      int rowNum = rowPointer.getRowNum();
      minCurrentlyCombinedRowNumByOriginalIteratorIndex[originalIteratorIndex] = rowNum;
      maxCurrentlyCombinedRowNumByOriginalIteratorIndex[originalIteratorIndex] = rowNum;
    }