This is an automated email from the ASF dual-hosted git repository.
leerho pushed a commit to branch thetaRework
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git
The following commit(s) were added to refs/heads/thetaRework by this push:
new a3e416598 More cleanup.
a3e416598 is described below
commit a3e4165980743c86ddec562d0906bd0825321fe4
Author: Lee Rhodes <[email protected]>
AuthorDate: Thu Jun 26 13:20:55 2025 -0700
More cleanup.
---
.../theta2/DirectQuickSelectSketchR.java | 3 +-
.../apache/datasketches/theta2/Intersection.java | 28 ++++++++++
.../datasketches/theta2/IntersectionImpl.java | 7 ++-
.../apache/datasketches/theta2/SetOperation.java | 11 ++--
.../org/apache/datasketches/theta2/Sketches.java | 46 ++++++++--------
.../java/org/apache/datasketches/theta2/Union.java | 63 +++++++++++++++++++++-
.../org/apache/datasketches/theta2/UnionImpl.java | 2 +-
.../arrayofdoubles/ArrayOfDoublesSketch.java | 6 ++-
.../arrayofdoubles/ArrayOfDoublesSketches.java | 14 +++--
.../tuple2/arrayofdoubles/ArrayOfDoublesUnion.java | 12 +++--
.../ArrayOfDoublesUpdatableSketch.java | 6 ++-
.../apache/datasketches/theta2/UnionImplTest.java | 4 +-
12 files changed, 150 insertions(+), 52 deletions(-)
diff --git
a/src/main/java/org/apache/datasketches/theta2/DirectQuickSelectSketchR.java
b/src/main/java/org/apache/datasketches/theta2/DirectQuickSelectSketchR.java
index e2ba9f1fe..483cbbed6 100644
--- a/src/main/java/org/apache/datasketches/theta2/DirectQuickSelectSketchR.java
+++ b/src/main/java/org/apache/datasketches/theta2/DirectQuickSelectSketchR.java
@@ -106,8 +106,7 @@ class DirectQuickSelectSketchR extends UpdateSketch {
final int lgNomLongs = srcSeg.get(JAVA_BYTE, LG_NOM_LONGS_BYTE) & 0XFF;
final int lgArrLongs = srcSeg.get(JAVA_BYTE, LG_ARR_LONGS_BYTE) & 0XFF;
- final DirectQuickSelectSketchR dqss =
- new DirectQuickSelectSketchR(seed, srcSeg);
+ final DirectQuickSelectSketchR dqss = new DirectQuickSelectSketchR(seed,
srcSeg);
dqss.hashTableThreshold_ = getOffHeapHashTableThreshold(lgNomLongs,
lgArrLongs);
return dqss;
}
diff --git a/src/main/java/org/apache/datasketches/theta2/Intersection.java
b/src/main/java/org/apache/datasketches/theta2/Intersection.java
index 143a5a1fb..30cb910d9 100644
--- a/src/main/java/org/apache/datasketches/theta2/Intersection.java
+++ b/src/main/java/org/apache/datasketches/theta2/Intersection.java
@@ -19,9 +19,11 @@
package org.apache.datasketches.theta2;
+import static java.lang.foreign.ValueLayout.JAVA_BYTE;
import static org.apache.datasketches.common.Util.floorPowerOf2;
import static org.apache.datasketches.theta2.PreambleUtil.EMPTY_FLAG_MASK;
import static org.apache.datasketches.theta2.PreambleUtil.SER_VER;
+import static org.apache.datasketches.theta2.PreambleUtil.SER_VER_BYTE;
import static org.apache.datasketches.theta2.PreambleUtil.extractCurCount;
import static org.apache.datasketches.theta2.PreambleUtil.extractFamilyID;
import static org.apache.datasketches.theta2.PreambleUtil.extractFlags;
@@ -135,6 +137,32 @@ public abstract class Intersection extends SetOperation {
public abstract CompactSketch intersect(Sketch a, Sketch b, boolean
dstOrdered,
MemorySegment dstSeg);
+ /**
+ * Factory: Wrap an Intersection target around the given source
MemorySegment containing intersection data.
+ * This method assumes the <a
href="{@docRoot}/resources/dictionary.html#defaultUpdateSeed">Default Update
Seed</a>.
+ * If the given source MemorySegment is read-only, the returned object will
also be read-only.
+ * @param srcSeg The source MemorySegment image.
+ * @return an Intersection that wraps a source MemorySegment that contains
an Intersection image
+ */
+ public static Intersection wrap(final MemorySegment srcSeg) {
+ return wrap(srcSeg, ThetaUtil.DEFAULT_UPDATE_SEED);
+ }
+
+ /**
+ * Factory: Wrap an Intersection target around the given source
MemorySegment containing intersection data.
+ * If the given source MemorySegment is read-only, the returned object will
also be read-only.
+ * @param srcSeg The source MemorySegment image.
+ * @param expectedSeed <a
href="{@docRoot}/resources/dictionary.html#seed">See seed</a>
+ * @return an Intersection that wraps a source MemorySegment that contains
an Intersection image
+ */
+ public static Intersection wrap(final MemorySegment srcSeg, final long
expectedSeed) {
+ final int serVer = srcSeg.get(JAVA_BYTE, SER_VER_BYTE);
+ if (serVer != 3) {
+ throw new SketchesArgumentException("SerVer must be 3: " + serVer);
+ }
+ return IntersectionImpl.wrapInstance(srcSeg, expectedSeed,
srcSeg.isReadOnly() );
+ }
+
// Restricted
/**
diff --git a/src/main/java/org/apache/datasketches/theta2/IntersectionImpl.java
b/src/main/java/org/apache/datasketches/theta2/IntersectionImpl.java
index e16faa6e8..0d7a2bb8f 100644
--- a/src/main/java/org/apache/datasketches/theta2/IntersectionImpl.java
+++ b/src/main/java/org/apache/datasketches/theta2/IntersectionImpl.java
@@ -196,8 +196,8 @@ final class IntersectionImpl extends Intersection {
}
/**
- * Factory: Wrap an Intersection target around the given source
MemorySegment containing
- * intersection data.
+ * Factory: Wrap an Intersection target around the given source
MemorySegment containing intersection data.
+ * If the given source MemorySegment is read-only, the returned object will
also be read-only.
* @param srcSeg The source MemorySegment image.
* @param seed <a href="{@docRoot}/resources/dictionary.html#seed">See
seed</a>
* @param readOnly True if MemorySegment is to be treated as read only
@@ -218,8 +218,7 @@ final class IntersectionImpl extends Intersection {
}
@Override
- public CompactSketch intersect(final Sketch a, final Sketch b, final boolean
dstOrdered,
- final MemorySegment dstSeg) {
+ public CompactSketch intersect(final Sketch a, final Sketch b, final boolean
dstOrdered, final MemorySegment dstSeg) {
if (wseg_ != null && readOnly_) { throw new SketchesReadOnlyException(); }
hardReset();
intersect(a);
diff --git a/src/main/java/org/apache/datasketches/theta2/SetOperation.java
b/src/main/java/org/apache/datasketches/theta2/SetOperation.java
index 795712dca..227ae54db 100644
--- a/src/main/java/org/apache/datasketches/theta2/SetOperation.java
+++ b/src/main/java/org/apache/datasketches/theta2/SetOperation.java
@@ -104,11 +104,10 @@ public abstract class SetOperation implements
MemorySegmentStatus {
/**
* Wrap takes the SetOperation image in MemorySegment and refers to it
directly.
* There is no data copying onto the java heap.
- * This method assumes the
- * <a href="{@docRoot}/resources/dictionary.html#defaultUpdateSeed">Default
Update Seed</a>.
+ * This method assumes the <a
href="{@docRoot}/resources/dictionary.html#defaultUpdateSeed">Default Update
Seed</a>.
+ * If the given source MemorySegment is read-only, the returned object will
also be read-only.
*
- * <p>Note: Only certain set operators during stateful operations can be
serialized and thus
- * wrapped.</p>
+ * <p>Note: Only certain set operators during stateful operations can be
serialized and thus wrapped.</p>
*
* @param srcSeg an image of a SetOperation where the image seed hash
matches the default seed hash.
* @return a SetOperation backed by the given MemorySegment
@@ -120,9 +119,9 @@ public abstract class SetOperation implements
MemorySegmentStatus {
/**
* Wrap takes the SetOperation image in MemorySegment and refers to it
directly.
* There is no data copying onto the java heap.
+ * If the given source MemorySegment is read-only, the returned object will
also be read-only.
*
- * <p>Note: Only certain set operators during stateful operations can be
serialized and thus
- * wrapped.</p>
+ * <p>Note: Only certain set operators during stateful operations can be
serialized and thus wrapped.</p>
*
* @param srcSeg an image of a SetOperation where the hash of the given
expectedSeed matches the image seed hash.
* @param expectedSeed the seed used to validate the given MemorySegment
image.
diff --git a/src/main/java/org/apache/datasketches/theta2/Sketches.java
b/src/main/java/org/apache/datasketches/theta2/Sketches.java
index 377345967..fa813b25f 100644
--- a/src/main/java/org/apache/datasketches/theta2/Sketches.java
+++ b/src/main/java/org/apache/datasketches/theta2/Sketches.java
@@ -71,7 +71,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#getMaxAnotBResultBytes(int)}.
+ * Convenience method, ref: {@link SetOperation#getMaxAnotBResultBytes(int)}.
* Returns the maximum number of bytes for the returned CompactSketch, given
the maximum
* value of nomEntries of the first sketch A of AnotB.
* @param maxNomEntries the given value
@@ -105,7 +105,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#getMaxIntersectionBytes(int)}
+ * Convenience method, ref: {@link SetOperation#getMaxIntersectionBytes(int)}
* @param nomEntries Ref: {@link SetOperation#getMaxIntersectionBytes(int)},
{@code nomEntries}
* @return Ref: {@link SetOperation#getMaxIntersectionBytes(int)}
*/
@@ -114,7 +114,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#getMaxUnionBytes(int)}
+ * Convenience method, ref: {@link SetOperation#getMaxUnionBytes(int)}
* @param nomEntries Ref: {@link SetOperation#getMaxUnionBytes(int)}, {@code
nomEntries}
* @return Ref: {@link SetOperation#getMaxUnionBytes(int)}
*/
@@ -123,7 +123,7 @@ public final class Sketches {
}
/**
- * Ref: {@link Sketch#getMaxUpdateSketchBytes(int)}
+ * Convenience method, ref: {@link Sketch#getMaxUpdateSketchBytes(int)}
* @param nomEntries Ref: {@link Sketch#getMaxUpdateSketchBytes(int)},
{@code nomEntries}
* @return Ref: {@link Sketch#getMaxUpdateSketchBytes(int)}
*/
@@ -132,7 +132,7 @@ public final class Sketches {
}
/**
- * Ref: {@link Sketch#getSerializationVersion(MemorySegment)}
+ * Convenience method, ref: {@link
Sketch#getSerializationVersion(MemorySegment)}
* @param srcSeg Ref: {@link Sketch#getSerializationVersion(MemorySegment)},
{@code srcSeg}
* @return Ref: {@link Sketch#getSerializationVersion(MemorySegment)}
*/
@@ -157,7 +157,7 @@ public final class Sketches {
//Heapify Operations
/**
- * Ref: {@link CompactSketch#heapify(MemorySegment)
CompactSketch.heapify(MemorySegment)}
+ * Convenience method, ref: {@link CompactSketch#heapify(MemorySegment)
CompactSketch.heapify(MemorySegment)}
* @param srcSeg Ref: {@link CompactSketch#heapify(MemorySegment)
CompactSketch.heapify(MemorySegment)}, {@code srcSeg}
* @return {@link CompactSketch CompactSketch}
*/
@@ -166,7 +166,7 @@ public final class Sketches {
}
/**
- * Ref: {@link CompactSketch#heapify(MemorySegment, long)
CompactSketch.heapify(MemorySegment, long)}
+ * Convenience method, ref: {@link CompactSketch#heapify(MemorySegment,
long) CompactSketch.heapify(MemorySegment, long)}
* @param srcSeg Ref: {@link CompactSketch#heapify(MemorySegment, long)
CompactSketch.heapify(MemorySegment, long)}, {@code srcSeg}
* @param expectedSeed Ref: {@link CompactSketch#heapify(MemorySegment,
long) CompactSketch.heapify(MemorySegment, long)},
* {@code expectedSeed}
@@ -177,7 +177,7 @@ public final class Sketches {
}
/**
- * Ref: {@link CompactSketch#wrap(MemorySegment)
CompactSketch.wrap(MemorySegment)}
+ * Convenience method, ref: {@link CompactSketch#wrap(MemorySegment)
CompactSketch.wrap(MemorySegment)}
* @param srcSeg Ref: {@link CompactSketch#wrap(MemorySegment)
CompactSketch.wrap(MemorySegment)}, {@code srcSeg}
* @return {@link CompactSketch CompactSketch}
*/
@@ -186,7 +186,7 @@ public final class Sketches {
}
/**
- * Ref: {@link CompactSketch#wrap(MemorySegment, long)
CompactSketch.wrap(MemorySegment, long)}
+ * Convenience method, ref: {@link CompactSketch#wrap(MemorySegment, long)
CompactSketch.wrap(MemorySegment, long)}
* @param srcSeg Ref: {@link CompactSketch#wrap(MemorySegment, long)
CompactSketch.wrap(MemorySegment, long)}, {@code srcSeg}
* @param expectedSeed Ref: {@link CompactSketch#wrap(MemorySegment, long)
CompactSketch.wrap(MemorySegment, long)},
* {@code expectedSeed}
@@ -197,7 +197,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#heapify(MemorySegment)
SetOperation.heapify(MemorySegment)}
+ * Convenience method, ref: {@link SetOperation#heapify(MemorySegment)
SetOperation.heapify(MemorySegment)}
* @param srcSeg Ref: {@link SetOperation#heapify(MemorySegment)
SetOperation.heapify(MemorySegment)}, {@code srcSeg}
* @return {@link SetOperation SetOperation}
*/
@@ -206,7 +206,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#heapify(MemorySegment, long)
SetOperation.heapify(MemorySegment, long)}
+ * Convenience method, ref: {@link SetOperation#heapify(MemorySegment, long)
SetOperation.heapify(MemorySegment, long)}
* @param srcSeg Ref: {@link SetOperation#heapify(MemorySegment, long)
SetOperation.heapify(MemorySegment, long)},
* {@code srcSeg}
* @param expectedSeed the seed used to validate the given MemorySegment
image.
@@ -219,7 +219,7 @@ public final class Sketches {
}
/**
- * Ref: {@link Sketch#heapify(MemorySegment) Sketch.heapify(MemorySegment)}
+ * Convenience method, ref: {@link Sketch#heapify(MemorySegment)
Sketch.heapify(MemorySegment)}
* @param srcSeg Ref: {@link Sketch#heapify(MemorySegment)
Sketch.heapify(MemorySegment)}, {@code srcSeg}
* @return {@link Sketch Sketch}
*/
@@ -228,7 +228,7 @@ public final class Sketches {
}
/**
- * Ref: {@link Sketch#heapify(MemorySegment, long)
Sketch.heapify(MemorySegment, long)}
+ * Convenience method, ref: {@link Sketch#heapify(MemorySegment, long)
Sketch.heapify(MemorySegment, long)}
* @param srcSeg Ref: {@link Sketch#heapify(MemorySegment, long)
Sketch.heapify(MemorySegment, long)}, {@code srcSeg}
* @param expectedSeed the seed used to validate the given MemorySegment
image.
* Ref: {@link Sketch#heapify(MemorySegment, long)
Sketch.heapify(MemorySegment, long)}, {@code expectedSeed}
@@ -239,7 +239,7 @@ public final class Sketches {
}
/**
- * Ref: {@link UpdateSketch#heapify(MemorySegment)
UpdateSketch.heapify(MemorySegment)}
+ * Convenience method, ref: {@link UpdateSketch#heapify(MemorySegment)
UpdateSketch.heapify(MemorySegment)}
* @param srcSeg Ref: {@link UpdateSketch#heapify(MemorySegment)
UpdateSketch.heapify(MemorySegment)}, {@code srcSeg}
* @return {@link UpdateSketch UpdateSketch}
*/
@@ -248,7 +248,7 @@ public final class Sketches {
}
/**
- * Ref: {@link UpdateSketch#heapify(MemorySegment, long)
UpdateSketch.heapify(MemorySegment, long)}
+ * Convenience method, ref: {@link UpdateSketch#heapify(MemorySegment, long)
UpdateSketch.heapify(MemorySegment, long)}
* @param srcSeg Ref: {@link UpdateSketch#heapify(MemorySegment, long)
UpdateSketch.heapify(MemorySegment, long)},
* {@code srcSeg}
* @param expectedSeed the seed used to validate the given MemorySegment
image.
@@ -281,7 +281,7 @@ public final class Sketches {
//Wrap operations
/**
- * Convenience method, calls {@link SetOperation#wrap(MemorySegment)} and
casts the result to a Intersection
+ * Convenience method, ref: {@link SetOperation#wrap(MemorySegment)}
* @param srcSeg Ref: {@link SetOperation#wrap(MemorySegment)}, {@code
srcSeg}
* @return a Intersection backed by the given MemorySegment
*/
@@ -290,7 +290,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#wrap(MemorySegment)
SetOperation.wrap(MemorySegment)}
+ * Convenience method, ref: {@link SetOperation#wrap(MemorySegment)
SetOperation.wrap(MemorySegment)}
* @param srcSeg Ref: {@link SetOperation#wrap(MemorySegment)
SetOperation.wrap(MemorySegment)}, {@code srcSeg}
* @return {@link SetOperation SetOperation}
*/
@@ -299,7 +299,7 @@ public final class Sketches {
}
/**
- * Ref: {@link SetOperation#wrap(MemorySegment, long)
SetOperation.wrap(MemorySegment, long)}
+ * Convenience method, ref: {@link SetOperation#wrap(MemorySegment, long)
SetOperation.wrap(MemorySegment, long)}
* @param srcSeg Ref: {@link SetOperation#wrap(MemorySegment, long)
SetOperation.wrap(MemorySegment, long)}, {@code srcSeg}
* @param expectedSeed the seed used to validate the given MemorySegment
image.
* Ref: {@link SetOperation#wrap(MemorySegment, long)
SetOperation.wrap(MemorySegment, long)}, {@code expectedSeed}
@@ -310,7 +310,7 @@ public final class Sketches {
}
/**
- * Ref: {@link Sketch#wrap(MemorySegment) Sketch.wrap(MemorySegment)}
+ * Convenience method, ref: {@link Sketch#wrap(MemorySegment)
Sketch.wrap(MemorySegment)}
* @param srcSeg Ref: {@link Sketch#wrap(MemorySegment)
Sketch.wrap(MemorySegment)}, {@code srcSeg}
* @return {@link Sketch Sketch}
*/
@@ -319,7 +319,7 @@ public final class Sketches {
}
/**
- * Ref: {@link Sketch#wrap(MemorySegment, long) Sketch.wrap(MemorySegment,
long)}
+ * Convenience method, ref: {@link Sketch#wrap(MemorySegment, long)
Sketch.wrap(MemorySegment, long)}
* @param srcSeg Ref: {@link Sketch#wrap(MemorySegment, long)
Sketch.wrap(MemorySegment, long)}, {@code srcSeg}
* @param expectedSeed the expectedSeed used to validate the given
MemorySegment image.
* Ref: {@link Sketch#wrap(MemorySegment, long) Sketch.wrap(MemorySegment,
long)}, {@code expectedSeed}
@@ -330,7 +330,7 @@ public final class Sketches {
}
/**
- * Convenience method, calls {@link SetOperation#wrap(MemorySegment)} and
casts the result to a Union
+ * Convenience method, ref: {@link SetOperation#wrap(MemorySegment)} and
casts the result to a Union
* @param srcSeg Ref: {@link SetOperation#wrap(MemorySegment)}, {@code
srcSeg}
* @return a Union backed by the given MemorySegment.
*/
@@ -339,7 +339,7 @@ public final class Sketches {
}
/**
- * Ref: {@link UpdateSketch#wrap(MemorySegment)
UpdateSketch.wrap(MemorySegment)}
+ * Convenience method, ref: {@link UpdateSketch#wrap(MemorySegment)
UpdateSketch.wrap(MemorySegment)}
* @param srcSeg Ref: {@link UpdateSketch#wrap(MemorySegment)
UpdateSketch.wrap(MemorySegment)}, {@code srcSeg}
* @return {@link UpdateSketch UpdateSketch}
*/
@@ -348,7 +348,7 @@ public final class Sketches {
}
/**
- * Ref: {@link UpdateSketch#wrap(MemorySegment, long)
UpdateSketch.wrap(MemorySegment, long)}
+ * Convenience method, ref: {@link UpdateSketch#wrap(MemorySegment, long)
UpdateSketch.wrap(MemorySegment, long)}
* @param srcSeg Ref: {@link UpdateSketch#wrap(MemorySegment, long)
UpdateSketch.wrap(MemorySegment, long)}, {@code srcSeg}
* @param expectedSeed the seed used to validate the given MemorySegment
image.
* Ref: {@link UpdateSketch#wrap(MemorySegment, long)
UpdateSketch.wrap(MemorySegment, long)}, {@code expectedSeed}
diff --git a/src/main/java/org/apache/datasketches/theta2/Union.java
b/src/main/java/org/apache/datasketches/theta2/Union.java
index 861857366..fde9e90bd 100644
--- a/src/main/java/org/apache/datasketches/theta2/Union.java
+++ b/src/main/java/org/apache/datasketches/theta2/Union.java
@@ -19,10 +19,15 @@
package org.apache.datasketches.theta2;
+import static java.lang.foreign.ValueLayout.JAVA_BYTE;
+import static org.apache.datasketches.theta2.PreambleUtil.SER_VER_BYTE;
+
import java.lang.foreign.MemorySegment;
import java.nio.ByteBuffer;
import org.apache.datasketches.common.Family;
+import org.apache.datasketches.common.SketchesArgumentException;
+import org.apache.datasketches.thetacommon.ThetaUtil;
/**
* Compute the union of two or more theta sketches.
@@ -32,6 +37,62 @@ import org.apache.datasketches.common.Family;
*/
public abstract class Union extends SetOperation {
+ /**
+ * Wrap a Union object around a Union MemorySegment object containing data.
+ * This method assumes the <a
href="{@docRoot}/resources/dictionary.html#defaultUpdateSeed">Default Update
Seed</a>.
+ * This does NO validity checking of the given MemorySegment.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
+ * @param srcSeg The source MemorySegment object.
+ * @return this class
+ */
+ public static Union fastWrap(final MemorySegment srcSeg) {
+ return fastWrap(srcSeg, ThetaUtil.DEFAULT_UPDATE_SEED);
+ }
+
+ /**
+ * Wrap a Union object around a Union MemorySegment object containing data.
+ * This does NO validity checking of the given MemorySegment.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
+ * @param srcSeg The source MemorySegment object.
+ * @param expectedSeed the seed used to validate the given MemorySegment
image.
+ * <a href="{@docRoot}/resources/dictionary.html#seed">See seed</a>
+ * @return this class
+ */
+ public static Union fastWrap(final MemorySegment srcSeg, final long
expectedSeed) {
+ final int serVer = srcSeg.get(JAVA_BYTE, SER_VER_BYTE);
+ if (serVer != 3) {
+ throw new SketchesArgumentException("SerVer must be 3: " + serVer);
+ }
+ return UnionImpl.fastWrapInstance(srcSeg, expectedSeed);
+ }
+
+ /**
+ * Wrap a Union object around a Union MemorySegment object containing data.
+ * This method assumes the <a
href="{@docRoot}/resources/dictionary.html#defaultUpdateSeed">Default Update
Seed</a>.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
+ * @param srcSeg The source MemorySegment object.
+ * @return this class
+ */
+ public static Union wrap(final MemorySegment srcSeg) {
+ return wrap(srcSeg, ThetaUtil.DEFAULT_UPDATE_SEED);
+ }
+
+ /**
+ * Wrap a Union object around a Union MemorySegment object containing data.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
+ * @param srcSeg The source MemorySegment object.
+ * @param expectedSeed the seed used to validate the given MemorySegment
image.
+ * <a href="{@docRoot}/resources/dictionary.html#seed">See seed</a>
+ * @return this class
+ */
+ public static Union wrap(final MemorySegment srcSeg, final long
expectedSeed) {
+ final int serVer = srcSeg.get(JAVA_BYTE, SER_VER_BYTE);
+ if (serVer != 3) {
+ throw new SketchesArgumentException("SerVer must be 3: " + serVer);
+ }
+ return UnionImpl.wrapInstance(srcSeg, expectedSeed);
+ }
+
/**
* Returns the number of storage bytes required for this union in its
current state.
*
@@ -67,7 +128,7 @@ public abstract class Union extends SetOperation {
* <a href="{@docRoot}/resources/dictionary.html#dstOrdered">See Destination
Ordered</a>
*
* @param dstSeg destination MemorySegment
- *
+ *
* @return the result of this operation as a CompactSketch of the chosen form
*/
public abstract CompactSketch getResult(boolean dstOrdered, MemorySegment
dstSeg);
diff --git a/src/main/java/org/apache/datasketches/theta2/UnionImpl.java
b/src/main/java/org/apache/datasketches/theta2/UnionImpl.java
index 68d72b6e9..9d3aca04b 100644
--- a/src/main/java/org/apache/datasketches/theta2/UnionImpl.java
+++ b/src/main/java/org/apache/datasketches/theta2/UnionImpl.java
@@ -138,7 +138,7 @@ final class UnionImpl extends Union {
* <a href="{@docRoot}/resources/dictionary.html#seed">See seed</a>
* @return this class
*/
- static UnionImpl fastWrap(final MemorySegment srcSeg, final long
expectedSeed) {
+ static UnionImpl fastWrapInstance(final MemorySegment srcSeg, final long
expectedSeed) {
Family.UNION.checkFamilyID(extractFamilyID(srcSeg));
final UpdateSketch gadget = srcSeg.isReadOnly()
? DirectQuickSelectSketchR.fastReadOnlyWrap(srcSeg, expectedSeed)
diff --git
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketch.java
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketch.java
index 49bf36cbb..99a87bbb1 100644
---
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketch.java
+++
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketch.java
@@ -94,7 +94,8 @@ public abstract class ArrayOfDoublesSketch {
}
/**
- * Wrap the given MemorySegment as an ArrayOfDoublesSketch
+ * Wrap the given MemorySegment as an ArrayOfDoublesSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param seg the given MemorySegment
* @return an ArrayOfDoublesSketch
*/
@@ -103,7 +104,8 @@ public abstract class ArrayOfDoublesSketch {
}
/**
- * Wrap the given MemorySegment and seed as a ArrayOfDoublesSketch
+ * Wrap the given MemorySegment and seed as a ArrayOfDoublesSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param seg the given MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesSketch
diff --git
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketches.java
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketches.java
index a439d4899..8ad121a00 100644
---
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketches.java
+++
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesSketches.java
@@ -67,7 +67,8 @@ public final class ArrayOfDoublesSketches {
}
/**
- * Wrap the given MemorySegment as an ArrayOfDoublesSketch
+ * Wrap the given MemorySegment as an ArrayOfDoublesSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @return an ArrayOfDoublesSketch
*/
@@ -76,7 +77,8 @@ public final class ArrayOfDoublesSketches {
}
/**
- * Wrap the given MemorySegment and seed as a ArrayOfDoublesSketch
+ * Wrap the given MemorySegment and seed as a ArrayOfDoublesSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesSketch
@@ -86,7 +88,8 @@ public final class ArrayOfDoublesSketches {
}
/**
- * Wrap the given MemorySegment as an ArrayOfDoublesUpdatableSketch
+ * Wrap the given MemorySegment as an ArrayOfDoublesUpdatableSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @return an ArrayOfDoublesUpdatableSketch
*/
@@ -95,7 +98,8 @@ public final class ArrayOfDoublesSketches {
}
/**
- * Wrap the given MemorySegment and seed as a ArrayOfDoublesUpdatableSketch
+ * Wrap the given MemorySegment and seed as a ArrayOfDoublesUpdatableSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesUpdatableSketch
@@ -125,6 +129,7 @@ public final class ArrayOfDoublesSketches {
/**
* Wrap the given MemorySegment as an ArrayOfDoublesUnion
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @return an ArrayOfDoublesUnion
*/
@@ -134,6 +139,7 @@ public final class ArrayOfDoublesSketches {
/**
* Wrap the given MemorySegment and seed as an ArrayOfDoublesUnion
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesUnion
diff --git
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUnion.java
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUnion.java
index d00d21f86..1c57b881e 100644
---
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUnion.java
+++
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUnion.java
@@ -61,7 +61,7 @@ public abstract class ArrayOfDoublesUnion {
}
/**
- * Heapify the given MemorySegment as an ArrayOfDoublesUnion
+ * Heapify the given MemorySegment as an ArrayOfDoublesUnion.
* @param srcSeg the given source MemorySegment
* @return an ArrayOfDoublesUnion
*/
@@ -70,7 +70,7 @@ public abstract class ArrayOfDoublesUnion {
}
/**
- * Heapify the given MemorySegment and seed as an ArrayOfDoublesUnion
+ * Heapify the given MemorySegment and seed as an ArrayOfDoublesUnion.
* @param srcSeg the given source MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesUnion
@@ -80,7 +80,8 @@ public abstract class ArrayOfDoublesUnion {
}
/**
- * Wrap the given MemorySegment as an ArrayOfDoublesUnion
+ * Wrap the given MemorySegment as an ArrayOfDoublesUnion.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @return an ArrayOfDoublesUnion
*/
@@ -89,7 +90,8 @@ public abstract class ArrayOfDoublesUnion {
}
/**
- * Wrap the given MemorySegment and seed as an ArrayOfDoublesUnion
+ * Wrap the given MemorySegment and seed as an ArrayOfDoublesUnion.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param srcSeg the given source MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesUnion
@@ -104,7 +106,7 @@ public abstract class ArrayOfDoublesUnion {
*
* <p>Nulls and empty sketches are ignored.</p>
*
- * @param tupleSketch sketch to add to the union
+ * @param tupleSketch sketch to add to the union.
*/
public void union(final ArrayOfDoublesSketch tupleSketch) {
if (tupleSketch == null) { return; }
diff --git
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUpdatableSketch.java
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUpdatableSketch.java
index 1ebece067..98cf6699a 100644
---
a/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUpdatableSketch.java
+++
b/src/main/java/org/apache/datasketches/tuple2/arrayofdoubles/ArrayOfDoublesUpdatableSketch.java
@@ -61,7 +61,8 @@ public abstract class ArrayOfDoublesUpdatableSketch extends
ArrayOfDoublesSketch
}
/**
- * Wrap the given MemorySegment as an ArrayOfDoublesUpdatableSketch
+ * Wrap the given MemorySegment as an ArrayOfDoublesUpdatableSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param seg the given MemorySegment
* @return an ArrayOfDoublesUpdatableSketch
*/
@@ -70,7 +71,8 @@ public abstract class ArrayOfDoublesUpdatableSketch extends
ArrayOfDoublesSketch
}
/**
- * Wrap the given MemorySegment and seed as a ArrayOfDoublesUpdatableSketch
+ * Wrap the given MemorySegment and seed as a ArrayOfDoublesUpdatableSketch.
+ * If the given source MemorySegment is read-only, the returned Union object
will also be read-only.
* @param seg the given MemorySegment
* @param seed the given seed
* @return an ArrayOfDoublesUpdatableSketch
diff --git a/src/test/java/org/apache/datasketches/theta2/UnionImplTest.java
b/src/test/java/org/apache/datasketches/theta2/UnionImplTest.java
index bcd066146..f3a36de5d 100644
--- a/src/test/java/org/apache/datasketches/theta2/UnionImplTest.java
+++ b/src/test/java/org/apache/datasketches/theta2/UnionImplTest.java
@@ -128,10 +128,10 @@ public class UnionImplTest {
final Union union =
Sketches.setOperationBuilder().setNominalEntries(k).buildUnion(srcSeg);
for (int i = 0; i < k; i++) { union.update(i); } //exact
assertEquals(union.getResult().getEstimate(), k, 0.0);
- final Union union2 = UnionImpl.fastWrap(srcSeg, seed);
+ final Union union2 = UnionImpl.fastWrapInstance(srcSeg, seed);
assertEquals(union2.getResult().getEstimate(), k, 0.0);
final MemorySegment srcSegR = srcSeg;
- final Union union3 = UnionImpl.fastWrap(srcSegR, seed);
+ final Union union3 = UnionImpl.fastWrapInstance(srcSegR, seed);
assertEquals(union3.getResult().getEstimate(), k, 0.0);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]