@Override public void serialize(DigestAndPercentileArrayState state, BlockBuilder out) { if (state.getDigest() == null) { out.appendNull(); } else { DynamicSliceOutput sliceOutput = new DynamicSliceOutput(state.getDigest().estimatedSerializedSizeInBytes() + (state.getPercentiles().size() * SIZE_OF_DOUBLE) + SIZE_OF_LONG); // write digest state.getDigest().serialize(sliceOutput); // write percentiles List<Double> percentiles = state.getPercentiles(); sliceOutput.appendLong(percentiles.size()); for (Double percentile : percentiles) { sliceOutput.appendDouble(percentile); } VARBINARY.writeSlice(out, sliceOutput.slice()); } }
@Test public void testRetainedSize() throws Exception { int sliceOutputInstanceSize = ClassLayout.parseClass(DynamicSliceOutput.class).instanceSize(); DynamicSliceOutput output = new DynamicSliceOutput(10); long originalRetainedSize = output.getRetainedSize(); assertEquals(originalRetainedSize, sliceOutputInstanceSize + output.getUnderlyingSlice().getRetainedSize()); assertEquals(output.size(), 0); output.appendLong(0); output.appendShort(0); assertEquals(output.getRetainedSize(), originalRetainedSize); assertEquals(output.size(), 10); }
@Test public void testRetainedSize() throws Exception { int sliceOutputInstanceSize = ClassLayout.parseClass(DynamicSliceOutput.class).instanceSize(); DynamicSliceOutput output = new DynamicSliceOutput(10); long originalRetainedSize = output.getRetainedSize(); assertEquals(originalRetainedSize, sliceOutputInstanceSize + output.getUnderlyingSlice().getRetainedSize()); assertEquals(output.size(), 0); output.appendLong(0); output.appendShort(0); assertEquals(output.getRetainedSize(), originalRetainedSize); assertEquals(output.size(), 10); }