/** * Gets an off-heap compact representation of the sketch using the given memory * @param dstMem memory for the compact sketch (can be null) * @return compact sketch (off-heap if memory is provided) */ public ArrayOfDoublesCompactSketch compact(final WritableMemory dstMem) { if (dstMem == null) { return new HeapArrayOfDoublesCompactSketch(this); } return new DirectArrayOfDoublesCompactSketch(this, dstMem); }
@Override public ArrayOfDoublesCompactSketch getResult(final WritableMemory mem) { if (mem == null || count_ == 0) { return getResult(); } final ArrayOfDoublesCompactSketch result = new DirectArrayOfDoublesCompactSketch( Arrays.copyOfRange(keys_, 0, count_), Arrays.copyOfRange(values_, 0, count_ * numValues_), theta_, isEmpty_, numValues_, seedHash_, mem ); reset(); return result; }
/** * Wrap the given Memory and seed as a ArrayOfDoublesSketch * @param mem the given Memory * @param seed the given seed * @return an ArrayOfDoublesSketch */ public static ArrayOfDoublesSketch wrap(final Memory mem, final long seed) { final SerializerDeserializer.SketchType sketchType = SerializerDeserializer.getSketchType(mem); if (sketchType == SerializerDeserializer.SketchType.ArrayOfDoublesQuickSelectSketch) { return new DirectArrayOfDoublesQuickSelectSketchR(mem, seed); } return new DirectArrayOfDoublesCompactSketch(mem, seed); }
/** * Returns the resulting union in the form of a compact sketch * @param dstMem memory for the result (can be null) * @return compact sketch representing the union (off-heap if memory is provided) */ public ArrayOfDoublesCompactSketch getResult(final WritableMemory dstMem) { if (sketch_.getRetainedEntries() > sketch_.getNominalEntries()) { theta_ = Math.min(theta_, sketch_.getNewTheta()); } if (dstMem == null) { return new HeapArrayOfDoublesCompactSketch(sketch_, theta_); } return new DirectArrayOfDoublesCompactSketch(sketch_, theta_, dstMem); }
@Test public void heapToDirectExactTwoDoubles() { ArrayOfDoublesUpdatableSketch sketch1 = new ArrayOfDoublesUpdatableSketchBuilder().setNumberOfValues(2).build(); sketch1.update("a", new double[] {1, 2}); sketch1.update("b", new double[] {1, 2}); sketch1.update("c", new double[] {1, 2}); sketch1.update("d", new double[] {1, 2}); sketch1.update("a", new double[] {1, 2}); sketch1.update("b", new double[] {1, 2}); sketch1.update("c", new double[] {1, 2}); sketch1.update("d", new double[] {1, 2}); ArrayOfDoublesSketch sketch2 = new DirectArrayOfDoublesCompactSketch(Memory.wrap(sketch1.compact().toByteArray())); Assert.assertFalse(sketch2.isEmpty()); Assert.assertFalse(sketch2.isEstimationMode()); Assert.assertEquals(sketch2.getEstimate(), 4.0); Assert.assertEquals(sketch2.getUpperBound(1), 4.0); Assert.assertEquals(sketch2.getLowerBound(1), 4.0); Assert.assertEquals(sketch2.getThetaLong(), Long.MAX_VALUE); Assert.assertEquals(sketch2.getTheta(), 1.0); double[][] values = sketch2.getValues(); Assert.assertEquals(values.length, 4); for (double[] array: values) { Assert.assertEquals(array.length, 2); Assert.assertEquals(array[0], 2.0); Assert.assertEquals(array[1], 4.0); } }
/** * Gets an off-heap compact representation of the sketch using the given memory * @param dstMem memory for the compact sketch (can be null) * @return compact sketch (off-heap if memory is provided) */ public ArrayOfDoublesCompactSketch compact(final WritableMemory dstMem) { if (dstMem == null) { return new HeapArrayOfDoublesCompactSketch(this); } return new DirectArrayOfDoublesCompactSketch(this, dstMem); }
@Override public ArrayOfDoublesCompactSketch getResult(final WritableMemory mem) { if (mem == null || count_ == 0) { return getResult(); } final ArrayOfDoublesCompactSketch result = new DirectArrayOfDoublesCompactSketch( Arrays.copyOfRange(keys_, 0, count_), Arrays.copyOfRange(values_, 0, count_ * numValues_), theta_, isEmpty_, numValues_, seedHash_, mem ); reset(); return result; }
/** * Wrap the given Memory and seed as a ArrayOfDoublesSketch * @param mem the given Memory * @param seed the given seed * @return an ArrayOfDoublesSketch */ public static ArrayOfDoublesSketch wrap(final Memory mem, final long seed) { final SerializerDeserializer.SketchType sketchType = SerializerDeserializer.getSketchType(mem); if (sketchType == SerializerDeserializer.SketchType.ArrayOfDoublesQuickSelectSketch) { return new DirectArrayOfDoublesQuickSelectSketchR(mem, seed); } return new DirectArrayOfDoublesCompactSketch(mem, seed); }
/** * Returns the resulting union in the form of a compact sketch * @param dstMem memory for the result (can be null) * @return compact sketch representing the union (off-heap if memory is provided) */ public ArrayOfDoublesCompactSketch getResult(final WritableMemory dstMem) { if (sketch_.getRetainedEntries() > sketch_.getNominalEntries()) { theta_ = Math.min(theta_, sketch_.getNewTheta()); } if (dstMem == null) { return new HeapArrayOfDoublesCompactSketch(sketch_, theta_); } return new DirectArrayOfDoublesCompactSketch(sketch_, theta_, dstMem); }