class PackedDoubleHistogram extends DoubleHistogram {

    /**
     * Construct a new auto-resizing DoubleHistogram using a precision stated as a number of significant decimal
     * digits.
     *
     * @param numberOfSignificantValueDigits Specifies the precision to use. This is the number of significant decimal
     *                                       digits to which the histogram will maintain value resolution and
     *                                       separation. Must be a non-negative integer between 0 and 5.
     */
    public PackedDoubleHistogram(final int numberOfSignificantValueDigits) {
        this(2, numberOfSignificantValueDigits);
        setAutoResize(true);
    }

    /**
     * Construct a new DoubleHistogram with the specified dynamic range (provided in {@code highestToLowestValueRatio})
     * and using a precision stated as a number of significant decimal digits.
     *
     * @param highestToLowestValueRatio      specifies the dynamic range to use
     * @param numberOfSignificantValueDigits Specifies the precision to use. This is the number of significant decimal
     *                                       digits to which the histogram will maintain value resolution and
     *                                       separation. Must be a non-negative integer between 0 and 5.
     */
    public PackedDoubleHistogram(final long highestToLowestValueRatio, final int numberOfSignificantValueDigits) {
        this(highestToLowestValueRatio, numberOfSignificantValueDigits, PackedHistogram.class);
    }

    /**
     * Construct a {@link PackedDoubleHistogram} with the same range settings as a given source,
     * duplicating the source's start/end timestamps (but NOT it's contents)
     * @param source The source histogram to duplicate
     */
    public PackedDoubleHistogram(final DoubleHistogram source) {
        super(source);
    }

    PackedDoubleHistogram(final long highestToLowestValueRatio,
                          final int numberOfSignificantValueDigits,
                          final Class<? extends AbstractHistogram> internalCountsHistogramClass) {
        super(highestToLowestValueRatio, numberOfSignificantValueDigits, internalCountsHistogramClass);
    }

    PackedDoubleHistogram(final long highestToLowestValueRatio,
                          final int numberOfSignificantValueDigits,
                          final Class<? extends AbstractHistogram> internalCountsHistogramClass,
                          AbstractHistogram internalCountsHistogram) {
        super(
                highestToLowestValueRatio,
                numberOfSignificantValueDigits,
                internalCountsHistogramClass,
                internalCountsHistogram
        );
    }

    /**
     * Construct a new ConcurrentDoubleHistogram by decoding it from a ByteBuffer.
     * @param buffer The buffer to decode from
     * @param minBarForHighestToLowestValueRatio Force highestTrackableValue to be set at least this high
     * @return The newly constructed ConcurrentDoubleHistogram
     */
    public static PackedDoubleHistogram decodeFromByteBuffer(
            final ByteBuffer buffer,
            final long minBarForHighestToLowestValueRatio) {<FILL_FUNCTION_BODY>}

    /**
     * Construct a new ConcurrentDoubleHistogram by decoding it from a compressed form in a ByteBuffer.
     * @param buffer The buffer to decode from
     * @param minBarForHighestToLowestValueRatio Force highestTrackableValue to be set at least this high
     * @return The newly constructed ConcurrentDoubleHistogram
     * @throws DataFormatException on error parsing/decompressing the buffer
     */
    public static PackedDoubleHistogram decodeFromCompressedByteBuffer(
            final ByteBuffer buffer,
            final long minBarForHighestToLowestValueRatio) throws DataFormatException {
        int cookie = buffer.getInt();
        if (!isCompressedDoubleHistogramCookie(cookie)) {
            throw new IllegalArgumentException("The buffer does not contain a compressed DoubleHistogram");
        }
        PackedDoubleHistogram histogram = constructHistogramFromBuffer(cookie, buffer,
                PackedDoubleHistogram.class, PackedHistogram.class,
                minBarForHighestToLowestValueRatio);
        return histogram;
    }
}

        try {
            int cookie = buffer.getInt();
            if (!isNonCompressedDoubleHistogramCookie(cookie)) {
                throw new IllegalArgumentException("The buffer does not contain a DoubleHistogram");
            }
            PackedDoubleHistogram histogram = constructHistogramFromBuffer(cookie, buffer,
                    PackedDoubleHistogram.class, PackedHistogram.class,
                    minBarForHighestToLowestValueRatio);
            return histogram;
        } catch (DataFormatException ex) {
            throw new RuntimeException(ex);
        }
    
<methods>public void <init>(int) ,public void <init>(int, Class<? extends org.HdrHistogram.AbstractHistogram>) ,public void <init>(long, int) ,public void <init>(org.HdrHistogram.DoubleHistogram) ,public void add(org.HdrHistogram.DoubleHistogram) throws java.lang.ArrayIndexOutOfBoundsException,public void addWhileCorrectingForCoordinatedOmission(org.HdrHistogram.DoubleHistogram, double) ,public org.HdrHistogram.DoubleHistogram.AllValues allValues() ,public org.HdrHistogram.DoubleHistogram copy() ,public org.HdrHistogram.DoubleHistogram copyCorrectedForCoordinatedOmission(double) ,public void copyInto(org.HdrHistogram.DoubleHistogram) ,public void copyIntoCorrectedForCoordinatedOmission(org.HdrHistogram.DoubleHistogram, double) ,public static org.HdrHistogram.DoubleHistogram decodeFromByteBuffer(java.nio.ByteBuffer, long) ,public static org.HdrHistogram.DoubleHistogram decodeFromByteBuffer(java.nio.ByteBuffer, Class<? extends org.HdrHistogram.AbstractHistogram>, long) ,public static org.HdrHistogram.DoubleHistogram decodeFromCompressedByteBuffer(java.nio.ByteBuffer, long) throws java.util.zip.DataFormatException,public static org.HdrHistogram.DoubleHistogram decodeFromCompressedByteBuffer(java.nio.ByteBuffer, Class<? extends org.HdrHistogram.AbstractHistogram>, long) throws java.util.zip.DataFormatException,public synchronized int encodeIntoByteBuffer(java.nio.ByteBuffer) ,public synchronized int encodeIntoCompressedByteBuffer(java.nio.ByteBuffer, int) ,public int encodeIntoCompressedByteBuffer(java.nio.ByteBuffer) ,public boolean equals(java.lang.Object) ,public static org.HdrHistogram.DoubleHistogram fromString(java.lang.String) throws java.util.zip.DataFormatException,public long getCountAtValue(double) throws java.lang.ArrayIndexOutOfBoundsException,public double getCountBetweenValues(double, double) throws java.lang.ArrayIndexOutOfBoundsException,public long getEndTimeStamp() ,public int getEstimatedFootprintInBytes() ,public long getHighestToLowestValueRatio() ,public double getIntegerToDoubleValueConversionRatio() ,public double getMaxValue() ,public double getMaxValueAsDouble() ,public double getMean() ,public double getMinNonZeroValue() ,public double getMinValue() ,public int getNeededByteBufferCapacity() ,public int getNumberOfSignificantValueDigits() ,public double getPercentileAtOrBelowValue(double) ,public long getStartTimeStamp() ,public double getStdDeviation() ,public java.lang.String getTag() ,public long getTotalCount() ,public double getValueAtPercentile(double) ,public int hashCode() ,public double highestEquivalentValue(double) ,public boolean isAutoResize() ,public org.HdrHistogram.DoubleHistogram.LinearBucketValues linearBucketValues(double) ,public org.HdrHistogram.DoubleHistogram.LogarithmicBucketValues logarithmicBucketValues(double, double) ,public double lowestEquivalentValue(double) ,public double medianEquivalentValue(double) ,public double nextNonEquivalentValue(double) ,public void outputPercentileDistribution(java.io.PrintStream, java.lang.Double) ,public void outputPercentileDistribution(java.io.PrintStream, int, java.lang.Double) ,public void outputPercentileDistribution(java.io.PrintStream, int, java.lang.Double, boolean) ,public org.HdrHistogram.DoubleHistogram.Percentiles percentiles(int) ,public void recordValue(double) throws java.lang.ArrayIndexOutOfBoundsException,public void recordValueWithCount(double, long) throws java.lang.ArrayIndexOutOfBoundsException,public void recordValueWithExpectedInterval(double, double) throws java.lang.ArrayIndexOutOfBoundsException,public org.HdrHistogram.DoubleHistogram.RecordedValues recordedValues() ,public void reset() ,public void setAutoResize(boolean) ,public void setEndTimeStamp(long) ,public void setStartTimeStamp(long) ,public void setTag(java.lang.String) ,public double sizeOfEquivalentValueRange(double) ,public void subtract(org.HdrHistogram.DoubleHistogram) ,public boolean valuesAreEquivalent(double, double) <variables>private static final int DHIST_compressedEncodingCookie,private static final int DHIST_encodingCookie,private boolean autoResize,private long configuredHighestToLowestValueRatio,private static final Class#RAW[] constructorArgTypes,private volatile double currentHighestValueLimitInAutoRange,private volatile double currentLowestValueInAutoRange,private static final non-sealed double highestAllowedValueEver,org.HdrHistogram.AbstractHistogram integerValuesHistogram,private static final long serialVersionUID