docs: @Override
      public HistogramIterationValue next() {
          // Move through the sub buckets and buckets until we hit the next reporting level:
          while (!exhaustedSubBuckets()) {
              countAtThisValue = histogram.getCountAtIndex(currentIndex);
              if (freshSubBucket) { // Don't add unless we've incremented since last bucket...
                  totalCountToCurrentIndex += countAtThisValue;
                  totalValueToCurrentIndex += countAtThisValue * histogram.highestEquivalentValue(currentValueAtIndex);
                  freshSubBucket = false;
              }
              if (reachedIterationLevel()) {
                  long valueIteratedTo = getValueIteratedTo();
                  currentIterationValue.set(valueIteratedTo, prevValueIteratedTo, countAtThisValue,
                          (totalCountToCurrentIndex - totalCountToPrevIndex), totalCountToCurrentIndex,
                          totalValueToCurrentIndex, ((100.0 * totalCountToCurrentIndex) / arrayTotalCount),
                          getPercentileIteratedTo(), integerToDoubleValueConversionRatio);
                  prevValueIteratedTo = valueIteratedTo;
                  totalCountToPrevIndex = totalCountToCurrentIndex;
                  // move the next iteration level forward:
                  incrementIterationLevel();
                  if (histogram.getTotalCount() != savedHistogramTotalRawCount) {
                      throw new ConcurrentModificationException();
                  }
                  return currentIterationValue;
              }
              incrementSubBucket();
          }
          // Should not reach here. But possible for overflowed histograms under certain conditions
          throw new ArrayIndexOutOfBoundsException();
      }