This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch ffm_phase3
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git


The following commit(s) were added to refs/heads/ffm_phase3 by this push:
     new f5e19314e Finished converting CPC
f5e19314e is described below

commit f5e19314efaab3f15f2eca8dd5186bc3a6de955a
Author: Lee Rhodes <[email protected]>
AuthorDate: Mon Jul 7 14:57:45 2025 -0700

    Finished converting CPC
---
 .../apache/datasketches/cpc/CompressedState.java   | 122 +++----
 .../cpc/CompressionCharacterization.java           |  41 ++-
 .../org/apache/datasketches/cpc/CpcSketch.java     |  54 +--
 .../org/apache/datasketches/cpc/CpcWrapper.java    |  41 +--
 .../org/apache/datasketches/cpc/PreambleUtil.java  | 382 +++++++++++----------
 .../datasketches/cpc/CompressedStateTest.java      |  17 +-
 .../cpc/CpcSketchCrossLanguageTest.java            |  22 +-
 .../org/apache/datasketches/cpc/CpcSketchTest.java |  28 +-
 .../apache/datasketches/cpc/CpcWrapperTest.java    |  66 ++--
 .../apache/datasketches/cpc/PreambleUtilTest.java  | 195 +++++------
 10 files changed, 487 insertions(+), 481 deletions(-)

diff --git a/src/main/java/org/apache/datasketches/cpc/CompressedState.java 
b/src/main/java/org/apache/datasketches/cpc/CompressedState.java
index b88a71812..20322cf7d 100644
--- a/src/main/java/org/apache/datasketches/cpc/CompressedState.java
+++ b/src/main/java/org/apache/datasketches/cpc/CompressedState.java
@@ -47,9 +47,9 @@ import static 
org.apache.datasketches.cpc.PreambleUtil.putSparseHybridHip;
 import static org.apache.datasketches.cpc.PreambleUtil.putSparseHybridMerged;
 import static org.apache.datasketches.cpc.RuntimeAsserts.rtAssert;
 
+import java.lang.foreign.MemorySegment;
+
 import org.apache.datasketches.common.Util;
-import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableMemory;
 
 /**
  * @author Lee Rhodes
@@ -118,121 +118,121 @@ final class CompressedState {
     return 4L * (preInts + csvLengthInts + cwLengthInts);
   }
 
-  static CompressedState importFromMemory(final Memory mem) {
-    checkLoPreamble(mem);
-    rtAssert(isCompressed(mem));
-    final int lgK = getLgK(mem);
-    final short seedHash = getSeedHash(mem);
+  static CompressedState importFromSegment(final MemorySegment seg) {
+    checkLoPreamble(seg);
+    rtAssert(isCompressed(seg));
+    final int lgK = getLgK(seg);
+    final short seedHash = getSeedHash(seg);
     final CompressedState state = new CompressedState(lgK, seedHash);
-    final int fmtOrd = getFormatOrdinal(mem);
+    final int fmtOrd = getFormatOrdinal(seg);
     final Format format = Format.ordinalToFormat(fmtOrd);
-    state.mergeFlag = !((fmtOrd & 1) > 0); //merge flag is complement of HIP
+    state.mergeFlag = ((fmtOrd & 1) <= 0); //merge flag is complement of HIP
     state.csvIsValid = (fmtOrd & 2) > 0;
     state.windowIsValid = (fmtOrd & 4) > 0;
 
     switch (format) {
       case EMPTY_MERGED :
       case EMPTY_HIP : {
-        checkCapacity(mem.getCapacity(), 8L);
+        checkCapacity(seg.byteSize(), 8L);
         break;
       }
       case SPARSE_HYBRID_MERGED : {
         //state.fiCol = getFiCol(mem);
-        state.numCoupons = getNumCoupons(mem);
+        state.numCoupons = getNumCoupons(seg);
         state.numCsv = (int) state.numCoupons; //only true for sparse_hybrid
-        state.csvLengthInts = getSvLengthInts(mem);
+        state.csvLengthInts = getSvLengthInts(seg);
         //state.cwLength = getCwLength(mem);
         //state.kxp = getKxP(mem);
         //state.hipEstAccum = getHipAccum(mem);
-        checkCapacity(mem.getCapacity(), state.getRequiredSerializedBytes());
+        checkCapacity(seg.byteSize(), state.getRequiredSerializedBytes());
         //state.cwStream = getCwStream(mem);
-        state.csvStream = getSvStream(mem);
+        state.csvStream = getSvStream(seg);
         break;
       }
       case SPARSE_HYBRID_HIP : {
         //state.fiCol = getFiCol(mem);
-        state.numCoupons = getNumCoupons(mem);
+        state.numCoupons = getNumCoupons(seg);
         state.numCsv = (int) state.numCoupons; //only true for sparse_hybrid
-        state.csvLengthInts = getSvLengthInts(mem);
+        state.csvLengthInts = getSvLengthInts(seg);
         //state.cwLength = getCwLength(mem);
-        state.kxp = getKxP(mem);
-        state.hipEstAccum = getHipAccum(mem);
-        checkCapacity(mem.getCapacity(), state.getRequiredSerializedBytes());
+        state.kxp = getKxP(seg);
+        state.hipEstAccum = getHipAccum(seg);
+        checkCapacity(seg.byteSize(), state.getRequiredSerializedBytes());
         //state.cwStream = getCwStream(mem);
-        state.csvStream = getSvStream(mem);
+        state.csvStream = getSvStream(seg);
         break;
       }
       case PINNED_SLIDING_MERGED_NOSV : {
-        state.fiCol = getFiCol(mem);
-        state.numCoupons = getNumCoupons(mem);
+        state.fiCol = getFiCol(seg);
+        state.numCoupons = getNumCoupons(seg);
         //state.numCsv = getNumCsv(mem);
         //state.csvLength = getCsvLength(mem);
-        state.cwLengthInts = getWLengthInts(mem);
+        state.cwLengthInts = getWLengthInts(seg);
         //state.kxp = getKxP(mem);
         //state.hipEstAccum = getHipAccum(mem);
-        checkCapacity(mem.getCapacity(), state.getRequiredSerializedBytes());
-        state.cwStream = getWStream(mem);
+        checkCapacity(seg.byteSize(), state.getRequiredSerializedBytes());
+        state.cwStream = getWStream(seg);
         //state.csvStream = getCsvStream(mem);
         break;
       }
       case PINNED_SLIDING_HIP_NOSV : {
-        state.fiCol = getFiCol(mem);
-        state.numCoupons = getNumCoupons(mem);
+        state.fiCol = getFiCol(seg);
+        state.numCoupons = getNumCoupons(seg);
         //state.numCsv = getNumCsv(mem);
         //state.csvLength = getCsvLength(mem);
-        state.cwLengthInts = getWLengthInts(mem);
-        state.kxp = getKxP(mem);
-        state.hipEstAccum = getHipAccum(mem);
-        checkCapacity(mem.getCapacity(), state.getRequiredSerializedBytes());
-        state.cwStream = getWStream(mem);
+        state.cwLengthInts = getWLengthInts(seg);
+        state.kxp = getKxP(seg);
+        state.hipEstAccum = getHipAccum(seg);
+        checkCapacity(seg.byteSize(), state.getRequiredSerializedBytes());
+        state.cwStream = getWStream(seg);
         //state.csvStream = getCsvStream(mem);
         break;
       }
       case PINNED_SLIDING_MERGED : {
-        state.fiCol = getFiCol(mem);
-        state.numCoupons = getNumCoupons(mem);
-        state.numCsv = getNumSv(mem);
-        state.csvLengthInts = getSvLengthInts(mem);
-        state.cwLengthInts = getWLengthInts(mem);
+        state.fiCol = getFiCol(seg);
+        state.numCoupons = getNumCoupons(seg);
+        state.numCsv = getNumSv(seg);
+        state.csvLengthInts = getSvLengthInts(seg);
+        state.cwLengthInts = getWLengthInts(seg);
         //state.kxp = getKxP(mem);
         //state.hipEstAccum = getHipAccum(mem);
-        checkCapacity(mem.getCapacity(), state.getRequiredSerializedBytes());
-        state.cwStream = getWStream(mem);
-        state.csvStream = getSvStream(mem);
+        checkCapacity(seg.byteSize(), state.getRequiredSerializedBytes());
+        state.cwStream = getWStream(seg);
+        state.csvStream = getSvStream(seg);
         break;
       }
       case PINNED_SLIDING_HIP : {
-        state.fiCol = getFiCol(mem);
-        state.numCoupons = getNumCoupons(mem);
-        state.numCsv = getNumSv(mem);
-        state.csvLengthInts = getSvLengthInts(mem);
-        state.cwLengthInts = getWLengthInts(mem);
-        state.kxp = getKxP(mem);
-        state.hipEstAccum = getHipAccum(mem);
-        checkCapacity(mem.getCapacity(), state.getRequiredSerializedBytes());
-        state.cwStream = getWStream(mem);
-        state.csvStream = getSvStream(mem);
+        state.fiCol = getFiCol(seg);
+        state.numCoupons = getNumCoupons(seg);
+        state.numCsv = getNumSv(seg);
+        state.csvLengthInts = getSvLengthInts(seg);
+        state.cwLengthInts = getWLengthInts(seg);
+        state.kxp = getKxP(seg);
+        state.hipEstAccum = getHipAccum(seg);
+        checkCapacity(seg.byteSize(), state.getRequiredSerializedBytes());
+        state.cwStream = getWStream(seg);
+        state.csvStream = getSvStream(seg);
         break;
       }
     }
-    checkCapacity(mem.getCapacity(),
-        4L * (getPreInts(mem) + state.csvLengthInts + state.cwLengthInts));
+    checkCapacity(seg.byteSize(),
+        4L * (getPreInts(seg) + state.csvLengthInts + state.cwLengthInts));
     return state;
   }
 
-  void exportToMemory(final WritableMemory wmem) {
+  void exportToSegment(final MemorySegment wseg) {
     final Format format = getFormat();
     switch (format) {
       case EMPTY_MERGED : {
-        putEmptyMerged(wmem, lgK, seedHash);
+        putEmptyMerged(wseg, lgK, seedHash);
         break;
       }
       case EMPTY_HIP : {
-        putEmptyHip(wmem, lgK, seedHash);
+        putEmptyHip(wseg, lgK, seedHash);
         break;
       }
       case SPARSE_HYBRID_MERGED : {
-        putSparseHybridMerged(wmem,
+        putSparseHybridMerged(wseg,
             lgK,
             (int) numCoupons, //unsigned
             csvLengthInts,
@@ -241,7 +241,7 @@ final class CompressedState {
         break;
       }
       case SPARSE_HYBRID_HIP : {
-        putSparseHybridHip(wmem,
+        putSparseHybridHip(wseg,
             lgK,
             (int) numCoupons, //unsigned
             csvLengthInts,
@@ -252,7 +252,7 @@ final class CompressedState {
         break;
       }
       case PINNED_SLIDING_MERGED_NOSV : {
-        putPinnedSlidingMergedNoSv(wmem,
+        putPinnedSlidingMergedNoSv(wseg,
             lgK,
             fiCol,
             (int) numCoupons, //unsigned
@@ -262,7 +262,7 @@ final class CompressedState {
         break;
       }
       case PINNED_SLIDING_HIP_NOSV : {
-        putPinnedSlidingHipNoSv(wmem,
+        putPinnedSlidingHipNoSv(wseg,
             lgK,
             fiCol,
             (int) numCoupons, //unsigned
@@ -274,7 +274,7 @@ final class CompressedState {
         break;
       }
       case PINNED_SLIDING_MERGED : {
-        putPinnedSlidingMerged(wmem,
+        putPinnedSlidingMerged(wseg,
             lgK,
             fiCol,
             (int) numCoupons, //unsigned
@@ -287,7 +287,7 @@ final class CompressedState {
         break;
       }
       case PINNED_SLIDING_HIP : {
-        putPinnedSlidingHip(wmem,
+        putPinnedSlidingHip(wseg,
             lgK,
             fiCol,
             (int) numCoupons, //unsigned
diff --git 
a/src/main/java/org/apache/datasketches/cpc/CompressionCharacterization.java 
b/src/main/java/org/apache/datasketches/cpc/CompressionCharacterization.java
index f34054d48..32c52ef28 100644
--- a/src/main/java/org/apache/datasketches/cpc/CompressionCharacterization.java
+++ b/src/main/java/org/apache/datasketches/cpc/CompressionCharacterization.java
@@ -24,16 +24,15 @@ import static org.apache.datasketches.common.Util.LS;
 import static org.apache.datasketches.common.Util.ceilingPowerOf2;
 import static org.apache.datasketches.common.Util.log2;
 import static org.apache.datasketches.common.Util.powerSeriesNextDouble;
-import static org.apache.datasketches.cpc.CompressedState.importFromMemory;
+import static org.apache.datasketches.cpc.CompressedState.importFromSegment;
 import static org.apache.datasketches.cpc.RuntimeAsserts.rtAssert;
 
+import java.lang.foreign.MemorySegment;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 
 import org.apache.datasketches.common.SuppressFBWarnings;
 import org.apache.datasketches.common.Util;
-import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableMemory;
 
 /**
  * This code is used both by unit tests, for short running tests,
@@ -51,20 +50,20 @@ public class CompressionCharacterization {
   private long vIn = 0;
 
   //inputs
-  private int lgMinK;
-  private int lgMaxK; //inclusive
-  private int lgMinT; //Trials at end
-  private int lgMaxT; //Trials at start
-  private int lgMulK; //multiplier of K to produce maxU
-  private int uPPO;
-  private int incLgK; //increment of lgK
-  private PrintStream ps;
-  private PrintWriter pw;
+  private final int lgMinK;
+  private final int lgMaxK; //inclusive
+  private final int lgMinT; //Trials at end
+  private final int lgMaxT; //Trials at start
+  private final int lgMulK; //multiplier of K to produce maxU
+  private final int uPPO;
+  private final int incLgK; //increment of lgK
+  private final PrintStream ps;
+  private final PrintWriter pw;
 
   //intermediates
   private CpcSketch[] streamSketches;
   private CompressedState[] compressedStates1;
-  private WritableMemory[] memoryArr;
+  private MemorySegment[] segArr;
   private CompressedState[] compressedStates2;
   private CpcSketch[] unCompressedSketches;
 
@@ -141,7 +140,7 @@ public class CompressionCharacterization {
     //printf("%d %d %d %d\n", totalTrials, lgTotTrials, 1 << lgWaves, 
trialsPerWave);
     streamSketches = new CpcSketch[trialsPerWave];
     compressedStates1 = new CompressedState[trialsPerWave];
-    memoryArr = new WritableMemory[trialsPerWave];
+    segArr = new MemorySegment[trialsPerWave];
     compressedStates2 = new CompressedState[trialsPerWave];
     unCompressedSketches = new CpcSketch[trialsPerWave];
 
@@ -194,23 +193,23 @@ public class CompressionCharacterization {
       sumCom_nS += nanoEnd - nanoStart;
       nanoStart = nanoEnd;
 
-      //State to Memory loop
+      //State to MemorySegment loop
       for (int trial = 0; trial < trialsPerWave; trial++) {
         final CompressedState state = compressedStates1[trial];
         final long cap = state.getRequiredSerializedBytes();
-        final WritableMemory wmem = WritableMemory.allocate((int) cap);
-        state.exportToMemory(wmem);
-        memoryArr[trial] = wmem;
+        final MemorySegment wseg = MemorySegment.ofArray(new byte[(int) cap]);
+        state.exportToSegment(wseg);
+        segArr[trial] = wseg;
       }
 
       nanoEnd = System.nanoTime();
       sumSer_nS += nanoEnd - nanoStart;
       nanoStart = nanoEnd;
 
-      //Memory to State loop
+      //MemorySegment to State loop
       for (int trial = 0; trial < trialsPerWave; trial++) {
-        final Memory mem = memoryArr[trial];
-        final CompressedState state = importFromMemory(mem);
+        final MemorySegment seg = segArr[trial];
+        final CompressedState state = importFromSegment(seg);
         compressedStates2[trial] = state;
       }
 
diff --git a/src/main/java/org/apache/datasketches/cpc/CpcSketch.java 
b/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
index a87fd1448..672e90348 100644
--- a/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
+++ b/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
@@ -19,6 +19,7 @@
 
 package org.apache.datasketches.cpc;
 
+import static java.lang.foreign.ValueLayout.JAVA_BYTE;
 import static java.lang.Math.log;
 import static java.lang.Math.sqrt;
 import static java.nio.charset.StandardCharsets.UTF_8;
@@ -30,13 +31,12 @@ import static org.apache.datasketches.cpc.CpcUtil.checkLgK;
 import static org.apache.datasketches.cpc.CpcUtil.countBitsSetInMatrix;
 import static org.apache.datasketches.hash.MurmurHash3.hash;
 
+import java.lang.foreign.MemorySegment;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.Util;
-import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableMemory;
 
 /**
  * This is a unique-counting sketch that implements the
@@ -228,12 +228,12 @@ public final class CpcSketch {
   }
 
   /**
-   * Return the given Memory as a CpcSketch on the Java heap using the 
DEFAULT_UPDATE_SEED.
-   * @param mem the given Memory
-   * @return the given Memory as a CpcSketch on the Java heap.
+   * Return the given MemorySegment as a CpcSketch on the Java heap using the 
DEFAULT_UPDATE_SEED.
+   * @param seg the given MemorySegment
+   * @return the given MemorySegment as a CpcSketch on the Java heap.
    */
-  public static CpcSketch heapify(final Memory mem) {
-    return heapify(mem, Util.DEFAULT_UPDATE_SEED);
+  public static CpcSketch heapify(final MemorySegment seg) {
+    return heapify(seg, Util.DEFAULT_UPDATE_SEED);
   }
 
   /**
@@ -246,13 +246,13 @@ public final class CpcSketch {
   }
 
   /**
-   * Return the given Memory as a CpcSketch on the Java heap.
-   * @param mem the given Memory
-   * @param seed the seed used to create the original sketch from which the 
Memory was derived.
-   * @return the given Memory as a CpcSketch on the Java heap.
+   * Return the given MemorySegment as a CpcSketch on the Java heap.
+   * @param seg the given MemorySegment
+   * @param seed the seed used to create the original sketch from which the 
MemorySegment was derived.
+   * @return the given MemorySegment as a CpcSketch on the Java heap.
    */
-  public static CpcSketch heapify(final Memory mem, final long seed) {
-    final CompressedState state = CompressedState.importFromMemory(mem);
+  public static CpcSketch heapify(final MemorySegment seg, final long seed) {
+    final CompressedState state = CompressedState.importFromSegment(seg);
     return uncompress(state, seed);
   }
 
@@ -263,8 +263,8 @@ public final class CpcSketch {
    * @return the given byte array as a CpcSketch on the Java heap.
    */
   public static CpcSketch heapify(final byte[] byteArray, final long seed) {
-    final Memory mem = Memory.wrap(byteArray);
-    return heapify(mem, seed);
+    final MemorySegment seg = MemorySegment.ofArray(byteArray);
+    return heapify(seg, seed);
   }
 
   /**
@@ -278,7 +278,7 @@ public final class CpcSketch {
   /**
    * Resets this sketch to empty but retains the original LgK and Seed.
    */
-  public final void reset() {
+  public void reset() {
     numCoupons = 0;
     mergeFlag = false;
     fiCol = 0;
@@ -298,9 +298,9 @@ public final class CpcSketch {
   public byte[] toByteArray() {
     final CompressedState state = CompressedState.compress(this);
     final long cap = state.getRequiredSerializedBytes();
-    final WritableMemory wmem = WritableMemory.allocate((int) cap);
-    state.exportToMemory(wmem);
-    return wmem.getArray();
+    final MemorySegment wseg = MemorySegment.ofArray(new byte[(int) cap]);
+    state.exportToSegment(wseg);
+    return wseg.toArray(JAVA_BYTE);
   }
 
   /**
@@ -370,7 +370,7 @@ public final class CpcSketch {
    * @param data The given ByteBuffer
    */
   public void update(final ByteBuffer data) {
-    if ((data == null) || data.hasRemaining() == false) { return; }
+    if ((data == null) || !data.hasRemaining()) { return; }
     final long[] arr = hash(data, seed);
     hashUpdate(arr[0], arr[1]);
   }
@@ -489,7 +489,7 @@ public final class CpcSketch {
         else {
           // cannot use Table.mustInsert(), because it doesn't provide for 
growth
           final boolean isNovel = PairTable.maybeInsert(newTable, rowCol);
-          assert (isNovel == true);
+          assert isNovel;
         }
       }
     }
@@ -575,7 +575,7 @@ public final class CpcSketch {
         pattern = pattern ^ (1L << col); // erase the 1.
         final int rowCol = (i << 6) | col;
         final boolean isNovel = PairTable.maybeInsert(table, rowCol);
-        assert isNovel == true;
+        assert isNovel;
       }
     }
     sketch.windowOffset = newOffset;
@@ -774,14 +774,14 @@ public final class CpcSketch {
   }
 
   /**
-   * Returns a human readable string of the preamble of a Memory image of a 
CpcSketch.
-   * @param mem the given Memory
+   * Returns a human readable string of the preamble of a MemorySegment image 
of a CpcSketch.
+   * @param seg the given MemorySegment
    * @param detail if true, a dump of the compressed window and surprising 
value streams will be
    * included.
-   * @return a human readable string of the preamble of a Memory image of a 
CpcSketch.
+   * @return a human readable string of the preamble of a MemorySegment image 
of a CpcSketch.
    */
-  public static String toString(final Memory mem, final boolean detail) {
-    return PreambleUtil.toString(mem, detail);
+  public static String toString(final MemorySegment seg, final boolean detail) 
{
+    return PreambleUtil.toString(seg, detail);
   }
 
   private static void fillKxpByteLookup() { //called from static initializer
diff --git a/src/main/java/org/apache/datasketches/cpc/CpcWrapper.java 
b/src/main/java/org/apache/datasketches/cpc/CpcWrapper.java
index fe7f0e5d4..083eeadf7 100644
--- a/src/main/java/org/apache/datasketches/cpc/CpcWrapper.java
+++ b/src/main/java/org/apache/datasketches/cpc/CpcWrapper.java
@@ -31,28 +31,29 @@ import static 
org.apache.datasketches.cpc.PreambleUtil.hasHip;
 import static org.apache.datasketches.cpc.PreambleUtil.isCompressed;
 import static org.apache.datasketches.cpc.RuntimeAsserts.rtAssert;
 
+import java.lang.foreign.MemorySegment;
+
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.SuppressFBWarnings;
-import org.apache.datasketches.memory.Memory;
 
 /**
  * This provides a read-only view of a serialized image of a CpcSketch, which 
can be
- * on-heap or off-heap represented as a Memory object, or on-heap represented 
as a byte array.
+ * on-heap or off-heap represented as a MemorySegment object, or on-heap 
represented as a byte array.
  * @author Lee Rhodes
  * @author Kevin Lang
  */
 public final class CpcWrapper {
-  Memory mem;
+  MemorySegment seg;
 
   /**
-   * Construct a read-only view of the given Memory that contains a CpcSketch
-   * @param mem the given Memory
+   * Construct a read-only view of the given MemorySegment that contains a 
CpcSketch
+   * @param seg the given MemorySegment
    */
   @SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "This is OK 
here")
-  public CpcWrapper(final Memory mem) {
-    this.mem = mem;
-    checkLoPreamble(mem);
-    rtAssert(isCompressed(mem));
+  public CpcWrapper(final MemorySegment seg) {
+    this.seg = seg;
+    checkLoPreamble(seg);
+    rtAssert(isCompressed(seg));
 
   }
 
@@ -61,7 +62,7 @@ public final class CpcWrapper {
    * @param byteArray the given byte array
    */
   public CpcWrapper(final byte[] byteArray) {
-    this(Memory.wrap(byteArray));
+    this(MemorySegment.ofArray(byteArray));
   }
 
   /**
@@ -69,10 +70,10 @@ public final class CpcWrapper {
    * @return the best estimate of the cardinality of the sketch.
    */
   public double getEstimate() {
-    if (!hasHip(mem)) {
-      return getIconEstimate(PreambleUtil.getLgK(mem), getNumCoupons(mem));
+    if (!hasHip(seg)) {
+      return getIconEstimate(PreambleUtil.getLgK(seg), getNumCoupons(seg));
     }
-    return getHipAccum(mem);
+    return getHipAccum(seg);
   }
 
   /**
@@ -88,7 +89,7 @@ public final class CpcWrapper {
    * @return the configured Log_base2 of K of this sketch.
    */
   public int getLgK() {
-    return PreambleUtil.getLgK(mem);
+    return PreambleUtil.getLgK(seg);
   }
 
   /**
@@ -98,10 +99,10 @@ public final class CpcWrapper {
    * @return the best estimate of the lower bound of the confidence interval 
given <i>kappa</i>.
    */
   public double getLowerBound(final int kappa) {
-    if (!hasHip(mem)) {
-      return getIconConfidenceLB(PreambleUtil.getLgK(mem), getNumCoupons(mem), 
kappa);
+    if (!hasHip(seg)) {
+      return getIconConfidenceLB(PreambleUtil.getLgK(seg), getNumCoupons(seg), 
kappa);
     }
-    return getHipConfidenceLB(PreambleUtil.getLgK(mem), getNumCoupons(mem), 
getHipAccum(mem), kappa);
+    return getHipConfidenceLB(PreambleUtil.getLgK(seg), getNumCoupons(seg), 
getHipAccum(seg), kappa);
   }
 
   /**
@@ -111,10 +112,10 @@ public final class CpcWrapper {
    * @return the best estimate of the upper bound of the confidence interval 
given <i>kappa</i>.
    */
   public double getUpperBound(final int kappa) {
-    if (!hasHip(mem)) {
-      return getIconConfidenceUB(PreambleUtil.getLgK(mem), getNumCoupons(mem), 
kappa);
+    if (!hasHip(seg)) {
+      return getIconConfidenceUB(PreambleUtil.getLgK(seg), getNumCoupons(seg), 
kappa);
     }
-    return getHipConfidenceUB(PreambleUtil.getLgK(mem), getNumCoupons(mem), 
getHipAccum(mem), kappa);
+    return getHipConfidenceUB(PreambleUtil.getLgK(seg), getNumCoupons(seg), 
getHipAccum(seg), kappa);
   }
 
 }
diff --git a/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java 
b/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java
index 3d2f350c9..713e72ded 100644
--- a/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java
+++ b/src/main/java/org/apache/datasketches/cpc/PreambleUtil.java
@@ -19,20 +19,24 @@
 
 package org.apache.datasketches.cpc;
 
+import static java.lang.foreign.ValueLayout.JAVA_BYTE;
+import static java.lang.foreign.ValueLayout.JAVA_DOUBLE_UNALIGNED;
+import static java.lang.foreign.ValueLayout.JAVA_INT_UNALIGNED;
+import static java.lang.foreign.ValueLayout.JAVA_SHORT_UNALIGNED;
 import static org.apache.datasketches.common.Util.LS;
 import static org.apache.datasketches.common.Util.checkBounds;
+import static org.apache.datasketches.common.Util.clear;
 import static org.apache.datasketches.common.Util.zeroPad;
 import static org.apache.datasketches.cpc.RuntimeAsserts.rtAssert;
 import static org.apache.datasketches.cpc.RuntimeAsserts.rtAssertEquals;
 
+import java.lang.foreign.MemorySegment;
 import java.nio.ByteOrder;
 import java.util.Objects;
 
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.SketchesArgumentException;
 import org.apache.datasketches.common.SketchesStateException;
-import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableMemory;
 
 //@formatter:off
 /**
@@ -194,59 +198,59 @@ final class PreambleUtil {
     return loField.ordinal();
   }
 
-  static int getPreInts(final Memory mem) {
-    return mem.getByte(getLoFieldOffset(LoField.PRE_INTS)) & 0XFF;
+  static int getPreInts(final MemorySegment seg) {
+    return seg.get(JAVA_BYTE, getLoFieldOffset(LoField.PRE_INTS)) & 0XFF;
   }
 
-  static int getSerVer(final Memory mem) {
-    return mem.getByte(getLoFieldOffset(LoField.SER_VERSION)) & 0XFF;
+  static int getSerVer(final MemorySegment seg) {
+    return seg.get(JAVA_BYTE, getLoFieldOffset(LoField.SER_VERSION)) & 0XFF;
   }
 
-  static Family getFamily(final Memory mem) {
-    final int fam = mem.getByte(getLoFieldOffset(LoField.FAMILY)) & 0XFF;
+  static Family getFamily(final MemorySegment seg) {
+    final int fam = seg.get(JAVA_BYTE, getLoFieldOffset(LoField.FAMILY)) & 
0XFF;
     return Family.idToFamily(fam);
   }
 
-  static int getLgK(final Memory mem) {
-    return mem.getByte(getLoFieldOffset(LoField.LG_K)) & 0XFF;
+  static int getLgK(final MemorySegment seg) {
+    return seg.get(JAVA_BYTE, getLoFieldOffset(LoField.LG_K)) & 0XFF;
   }
 
-  static int getFiCol(final Memory mem) {
-    return mem.getByte(getLoFieldOffset(LoField.FI_COL)) & 0XFF;
+  static int getFiCol(final MemorySegment seg) {
+    return seg.get(JAVA_BYTE, getLoFieldOffset(LoField.FI_COL)) & 0XFF;
   }
 
-  static int getFlags(final Memory mem) {
-    return mem.getByte(getLoFieldOffset(LoField.FLAGS)) & 0XFF;
+  static int getFlags(final MemorySegment seg) {
+    return seg.get(JAVA_BYTE, getLoFieldOffset(LoField.FLAGS)) & 0XFF;
   }
 
-  static short getSeedHash(final Memory mem) {
-    return mem.getShort(getLoFieldOffset(LoField.SEED_HASH));
+  static short getSeedHash(final MemorySegment seg) {
+    return seg.get(JAVA_SHORT_UNALIGNED, getLoFieldOffset(LoField.SEED_HASH));
   }
 
-  static int getFormatOrdinal(final Memory mem) {
-    final int flags = getFlags(mem);
+  static int getFormatOrdinal(final MemorySegment seg) {
+    final int flags = getFlags(seg);
     return (flags >>> 2) & 0x7;
   }
 
-  static Format getFormat(final Memory mem) {
-    final int ordinal = getFormatOrdinal(mem);
+  static Format getFormat(final MemorySegment seg) {
+    final int ordinal = getFormatOrdinal(seg);
     return Format.ordinalToFormat(ordinal);
   }
 
-  static boolean hasHip(final Memory mem) {
-    return (getFlags(mem) & HIP_FLAG_MASK) > 0;
+  static boolean hasHip(final MemorySegment seg) {
+    return (getFlags(seg) & HIP_FLAG_MASK) > 0;
   }
 
-  static final boolean hasSv(final Memory mem) {
-    return (getFlags(mem) & SUP_VAL_FLAG_MASK) > 0;
+  static boolean hasSv(final MemorySegment seg) {
+    return (getFlags(seg) & SUP_VAL_FLAG_MASK) > 0;
   }
 
-  static final boolean hasWindow(final Memory mem) {
-    return (getFlags(mem) & WINDOW_FLAG_MASK) > 0;
+  static boolean hasWindow(final MemorySegment seg) {
+    return (getFlags(seg) & WINDOW_FLAG_MASK) > 0;
   }
 
-  static final boolean isCompressed(final Memory mem) {
-    return (getFlags(mem) & COMPRESSED_FLAG_MASK) > 0;
+  static boolean isCompressed(final MemorySegment seg) {
+    return (getFlags(seg) & COMPRESSED_FLAG_MASK) > 0;
   }
 
   //PREAMBLE HI_FIELD DEFINITIONS
@@ -301,121 +305,121 @@ final class PreambleUtil {
 
   //PREAMBLE HI_FIELD GETS
 
-  static int getNumCoupons(final Memory mem) {
-    final Format format = getFormat(mem);
+  static int getNumCoupons(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField hiField = HiField.NUM_COUPONS;
     final long offset = getHiFieldOffset(format, hiField);
-    return mem.getInt(offset);
+    return seg.get(JAVA_INT_UNALIGNED, offset);
   }
 
-  static int getNumSv(final Memory mem) {
-    final Format format = getFormat(mem);
+  static int getNumSv(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField hiField = HiField.NUM_SV;
     final long offset = getHiFieldOffset(format, hiField);
-    return mem.getInt(offset);
+    return seg.get(JAVA_INT_UNALIGNED, offset);
   }
 
-  static int getSvLengthInts(final Memory mem) {
-    final Format format = getFormat(mem);
+  static int getSvLengthInts(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField hiField = HiField.SV_LENGTH_INTS;
     final long offset = getHiFieldOffset(format, hiField);
-    return mem.getInt(offset);
+    return seg.get(JAVA_INT_UNALIGNED, offset);
   }
 
-  static int getWLengthInts(final Memory mem) {
-    final Format format = getFormat(mem);
+  static int getWLengthInts(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField hiField = HiField.W_LENGTH_INTS;
     final long offset = getHiFieldOffset(format, hiField);
-    return mem.getInt(offset);
+    return seg.get(JAVA_INT_UNALIGNED, offset);
   }
 
-  static double getKxP(final Memory mem) {
-    final Format format = getFormat(mem);
+  static double getKxP(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField hiField = HiField.KXP;
     final long offset = getHiFieldOffset(format, hiField);
-    return mem.getDouble(offset);
+    return seg.get(JAVA_DOUBLE_UNALIGNED, offset);
   }
 
-  static double getHipAccum(final Memory mem) {
-    final Format format = getFormat(mem);
+  static double getHipAccum(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField hiField = HiField.HIP_ACCUM;
     final long offset = getHiFieldOffset(format, hiField);
-    return mem.getDouble(offset);
+    return seg.get(JAVA_DOUBLE_UNALIGNED, offset);
   }
 
-  static long getSvStreamOffset(final Memory mem) {
-    final Format format = getFormat(mem);
+  static long getSvStreamOffset(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField svLenField = HiField.SV_LENGTH_INTS;
-    if (!hasSv(mem)) {
+    if (!hasSv(seg)) {
       fieldError(format, svLenField);
     } else {
-      final long svLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0XFFFF_FFFFL;
+      final long svLengthInts = seg.get(JAVA_INT_UNALIGNED, 
getHiFieldOffset(format, HiField.SV_LENGTH_INTS)) & 0XFFFF_FFFFL;
       if (svLengthInts == 0) {
         throw new SketchesStateException("svLengthInts cannot be zero");
       }
     }
     long wLengthInts = 0;
-    if (hasWindow(mem)) {
-      wLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0XFFFF_FFFFL;
+    if (hasWindow(seg)) {
+      wLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0XFFFF_FFFFL;
       if (wLengthInts == 0) {
         throw new SketchesStateException("wLengthInts cannot be zero");
       }
     }
-    return (getPreInts(mem) + wLengthInts) << 2;
+    return (getPreInts(seg) + wLengthInts) << 2;
   }
 
-  static long getWStreamOffset(final Memory mem) {
-    final Format format = getFormat(mem);
+  static long getWStreamOffset(final MemorySegment seg) {
+    final Format format = getFormat(seg);
     final HiField wLenField = HiField.W_LENGTH_INTS;
-    if (!hasWindow(mem))  { fieldError(format, wLenField); }
-    final long wLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0XFFFF_FFFFL;
+    if (!hasWindow(seg))  { fieldError(format, wLenField); }
+    final long wLengthInts = seg.get(JAVA_INT_UNALIGNED, 
getHiFieldOffset(format, HiField.W_LENGTH_INTS)) & 0XFFFF_FFFFL;
       if (wLengthInts == 0) {
         throw new SketchesStateException("wLengthInts cannot be zero");
       }
-    return getPreInts(mem) << 2;
+    return getPreInts(seg) << 2;
   }
 
-  static int[] getSvStream(final Memory mem) {
-    final long offset = getSvStreamOffset(mem);
-    final int svLengthInts = getSvLengthInts(mem);
+  static int[] getSvStream(final MemorySegment seg) {
+    final long offset = getSvStreamOffset(seg);
+    final int svLengthInts = getSvLengthInts(seg);
     final int[] svStream = new int[svLengthInts];
-    mem.getIntArray(offset, svStream, 0, svLengthInts);
+    MemorySegment.copy(seg, JAVA_INT_UNALIGNED, offset, svStream, 0, 
svLengthInts);
     return svStream;
   }
 
-  static int[] getWStream(final Memory mem) {
-    final long offset = getWStreamOffset(mem);
-    final int wLength = getWLengthInts(mem);
+  static int[] getWStream(final MemorySegment seg) {
+    final long offset = getWStreamOffset(seg);
+    final int wLength = getWLengthInts(seg);
     final int[] wStream = new int[wLength];
-    mem.getIntArray(offset, wStream, 0, wLength);
+    MemorySegment.copy(seg, JAVA_INT_UNALIGNED, offset, wStream, 0, wLength);
     return wStream;
   }
 
   // PUT INTO MEMORY
 
-  static void putEmptyMerged(final WritableMemory wmem,
+  static void putEmptyMerged(final MemorySegment wseg,
       final int lgK,
       final short seedHash) {
     final Format format = Format.EMPTY_MERGED;
     final byte preInts = getDefinedPreInts(format);
     final byte fiCol = (byte) 0;
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 8);
-    putFirst8(wmem, preInts, (byte) lgK, fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 8);
+    putFirst8(wseg, preInts, (byte) lgK, fiCol, flags, seedHash);
   }
 
-  static void putEmptyHip(final WritableMemory wmem,
+  static void putEmptyHip(final MemorySegment wseg,
       final int lgK,
       final short seedHash) {
     final Format format = Format.EMPTY_HIP;
     final byte preInts = getDefinedPreInts(format);
     final byte fiCol = (byte) 0;
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 8);
-    putFirst8(wmem, preInts, (byte) lgK, fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 8);
+    putFirst8(wseg, preInts, (byte) lgK, fiCol, flags, seedHash);
   }
 
-  static void putSparseHybridMerged(final WritableMemory wmem,
+  static void putSparseHybridMerged(final MemorySegment wseg,
       final int lgK,
       final int numCoupons, //unsigned
       final int svLengthInts,
@@ -425,15 +429,15 @@ final class PreambleUtil {
     final byte preInts = getDefinedPreInts(format);
     final byte fiCol = (byte) 0;
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 4L * (preInts + svLengthInts));
-    putFirst8(wmem, preInts, (byte) lgK, fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 4L * (preInts + svLengthInts));
+    putFirst8(wseg, preInts, (byte) lgK, fiCol, flags, seedHash);
 
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_COUPONS), numCoupons);
-    wmem.putInt(getHiFieldOffset(format, HiField.SV_LENGTH_INTS), 
svLengthInts);
-    wmem.putIntArray(getSvStreamOffset(wmem), svStream, 0, svLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS), numCoupons);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS), svLengthInts);
+    MemorySegment.copy(svStream, 0, wseg, JAVA_INT_UNALIGNED, 
getSvStreamOffset(wseg), svLengthInts);
   }
 
-  static void putSparseHybridHip(final WritableMemory wmem,
+  static void putSparseHybridHip(final MemorySegment wseg,
       final int lgK,
       final int numCoupons, //unsigned
       final int svLengthInts,
@@ -445,17 +449,17 @@ final class PreambleUtil {
     final byte preInts = getDefinedPreInts(format);
     final byte fiCol = (byte) 0;
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 4L * (preInts + svLengthInts));
-    putFirst8(wmem, preInts, (byte) lgK, fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 4L * (preInts + svLengthInts));
+    putFirst8(wseg, preInts, (byte) lgK, fiCol, flags, seedHash);
 
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_COUPONS), numCoupons);
-    wmem.putInt(getHiFieldOffset(format, HiField.SV_LENGTH_INTS), 
svLengthInts);
-    wmem.putDouble(getHiFieldOffset(format, HiField.KXP), kxp);
-    wmem.putDouble(getHiFieldOffset(format, HiField.HIP_ACCUM), hipAccum);
-    wmem.putIntArray(getSvStreamOffset(wmem), svStream, 0, svLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS), numCoupons);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS), svLengthInts);
+    wseg.set(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, HiField.KXP), 
kxp);
+    wseg.set(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.HIP_ACCUM), hipAccum);
+    MemorySegment.copy(svStream, 0, wseg, JAVA_INT_UNALIGNED, 
getSvStreamOffset(wseg), svLengthInts);
   }
 
-  static void putPinnedSlidingMergedNoSv(final WritableMemory wmem,
+  static void putPinnedSlidingMergedNoSv(final MemorySegment wseg,
       final int lgK,
       final int fiCol,
       final int numCoupons, //unsigned
@@ -465,15 +469,15 @@ final class PreambleUtil {
     final Format format = Format.PINNED_SLIDING_MERGED_NOSV;
     final byte preInts = getDefinedPreInts(format);
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 4L * (preInts + wLengthInts));
-    putFirst8(wmem, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 4L * (preInts + wLengthInts));
+    putFirst8(wseg, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
 
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_COUPONS), numCoupons);
-    wmem.putInt(getHiFieldOffset(format, HiField.W_LENGTH_INTS), wLengthInts);
-    wmem.putIntArray(getWStreamOffset(wmem), wStream, 0, wLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS), numCoupons);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS), wLengthInts);
+    MemorySegment.copy(wStream, 0, wseg, JAVA_INT_UNALIGNED, 
getWStreamOffset(wseg), wLengthInts);
   }
 
-  static void putPinnedSlidingHipNoSv(final WritableMemory wmem,
+  static void putPinnedSlidingHipNoSv(final MemorySegment wseg,
       final int lgK,
       final int fiCol,
       final int numCoupons, //unsigned
@@ -485,17 +489,17 @@ final class PreambleUtil {
     final Format format = Format.PINNED_SLIDING_HIP_NOSV;
     final byte preInts = getDefinedPreInts(format);
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 4L * (preInts + wLengthInts));
-    putFirst8(wmem, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 4L * (preInts + wLengthInts));
+    putFirst8(wseg, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
 
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_COUPONS), numCoupons);
-    wmem.putInt(getHiFieldOffset(format, HiField.W_LENGTH_INTS), wLengthInts);
-    wmem.putDouble(getHiFieldOffset(format, HiField.KXP), kxp);
-    wmem.putDouble(getHiFieldOffset(format, HiField.HIP_ACCUM), hipAccum);
-    wmem.putIntArray(getWStreamOffset(wmem), wStream, 0, wLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS), numCoupons);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS), wLengthInts);
+    wseg.set(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, HiField.KXP), 
kxp);
+    wseg.set(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.HIP_ACCUM), hipAccum);
+    MemorySegment.copy(wStream, 0, wseg, JAVA_INT_UNALIGNED, 
getWStreamOffset(wseg), wLengthInts);
   }
 
-  static void putPinnedSlidingMerged(final WritableMemory wmem,
+  static void putPinnedSlidingMerged(final MemorySegment wseg,
       final int lgK,
       final int fiCol,
       final int numCoupons, //unsigned
@@ -508,18 +512,18 @@ final class PreambleUtil {
     final Format format = Format.PINNED_SLIDING_MERGED;
     final byte preInts = getDefinedPreInts(format);
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 4L * (preInts + svLengthInts + 
wLengthInts));
-    putFirst8(wmem, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 4L * (preInts + svLengthInts + 
wLengthInts));
+    putFirst8(wseg, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
 
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_COUPONS), numCoupons);
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_SV), numSv);
-    wmem.putInt(getHiFieldOffset(format, HiField.SV_LENGTH_INTS), 
svLengthInts);
-    wmem.putInt(getHiFieldOffset(format, HiField.W_LENGTH_INTS), wLengthInts);
-    wmem.putIntArray(getSvStreamOffset(wmem), svStream, 0, svLengthInts);
-    wmem.putIntArray(getWStreamOffset(wmem), wStream, 0, wLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS), numCoupons);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, HiField.NUM_SV), 
numSv);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS), svLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS), wLengthInts);
+    MemorySegment.copy(svStream, 0, wseg, JAVA_INT_UNALIGNED, 
getSvStreamOffset(wseg), svLengthInts);
+    MemorySegment.copy(wStream, 0, wseg, JAVA_INT_UNALIGNED, 
getWStreamOffset(wseg), wLengthInts);
   }
 
-  static void putPinnedSlidingHip(final WritableMemory wmem,
+  static void putPinnedSlidingHip(final MemorySegment wseg,
       final int lgK,
       final int fiCol,
       final int numCoupons, //unsigned
@@ -534,48 +538,48 @@ final class PreambleUtil {
     final Format format = Format.PINNED_SLIDING_HIP;
     final byte preInts = getDefinedPreInts(format);
     final byte flags = (byte) ((format.ordinal() << 2) | COMPRESSED_FLAG_MASK);
-    checkCapacity(wmem.getCapacity(), 4L * (preInts + svLengthInts + 
wLengthInts));
-    putFirst8(wmem, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
+    checkCapacity(wseg.byteSize(), 4L * (preInts + svLengthInts + 
wLengthInts));
+    putFirst8(wseg, preInts, (byte) lgK, (byte) fiCol, flags, seedHash);
 
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_COUPONS), numCoupons);
-    wmem.putInt(getHiFieldOffset(format, HiField.NUM_SV), numSv);
-    wmem.putDouble(getHiFieldOffset(format, HiField.KXP), kxp);
-    wmem.putDouble(getHiFieldOffset(format, HiField.HIP_ACCUM), hipAccum);
-    wmem.putInt(getHiFieldOffset(format, HiField.SV_LENGTH_INTS), 
svLengthInts);
-    wmem.putInt(getHiFieldOffset(format, HiField.W_LENGTH_INTS), wLengthInts);
-    wmem.putIntArray(getSvStreamOffset(wmem), svStream, 0, svLengthInts);
-    wmem.putIntArray(getWStreamOffset(wmem), wStream, 0, wLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS), numCoupons);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, HiField.NUM_SV), 
numSv);
+    wseg.set(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, HiField.KXP), 
kxp);
+    wseg.set(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.HIP_ACCUM), hipAccum);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS), svLengthInts);
+    wseg.set(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS), wLengthInts);
+    MemorySegment.copy(svStream, 0, wseg, JAVA_INT_UNALIGNED, 
getSvStreamOffset(wseg), svLengthInts);
+    MemorySegment.copy(wStream, 0, wseg, JAVA_INT_UNALIGNED, 
getWStreamOffset(wseg), wLengthInts);
   }
 
-  private static void putFirst8(final WritableMemory wmem, final byte preInts, 
final byte lgK,
+  private static void putFirst8(final MemorySegment wseg, final byte preInts, 
final byte lgK,
       final byte fiCol, final byte flags, final short seedHash) {
-    wmem.clear(0L, 4L * preInts);
-    wmem.putByte(getLoFieldOffset(LoField.PRE_INTS), preInts);
-    wmem.putByte(getLoFieldOffset(LoField.SER_VERSION), SER_VER);
-    wmem.putByte(getLoFieldOffset(LoField.FAMILY), (byte) Family.CPC.getID());
-    wmem.putByte(getLoFieldOffset(LoField.LG_K), lgK);
-    wmem.putByte(getLoFieldOffset(LoField.FI_COL), fiCol);
-    wmem.putByte(getLoFieldOffset(LoField.FLAGS), flags);
-    wmem.putShort(getLoFieldOffset(LoField.SEED_HASH), seedHash);
+    clear(wseg, 0L, 4L * preInts);
+    wseg.set(JAVA_BYTE, getLoFieldOffset(LoField.PRE_INTS), preInts);
+    wseg.set(JAVA_BYTE, getLoFieldOffset(LoField.SER_VERSION), SER_VER);
+    wseg.set(JAVA_BYTE, getLoFieldOffset(LoField.FAMILY), (byte) 
Family.CPC.getID());
+    wseg.set(JAVA_BYTE, getLoFieldOffset(LoField.LG_K), lgK);
+    wseg.set(JAVA_BYTE, getLoFieldOffset(LoField.FI_COL), fiCol);
+    wseg.set(JAVA_BYTE, getLoFieldOffset(LoField.FLAGS), flags);
+    wseg.set(JAVA_SHORT_UNALIGNED, getLoFieldOffset(LoField.SEED_HASH), 
seedHash);
   }
 
   //TO STRING
 
   static String toString(final byte[] byteArr, final boolean detail) {
-    final Memory mem = Memory.wrap(byteArr);
-    return toString(mem, detail);
+    final MemorySegment seg = MemorySegment.ofArray(byteArr);
+    return toString(seg, detail);
   }
 
-  static String toString(final Memory mem, final boolean detail) {
-    final long capBytes = mem.getCapacity();
+  static String toString(final MemorySegment seg, final boolean detail) {
+    final long capBytes = seg.byteSize();
     //Lo Fields Preamble, first 7 fields, first 8 bytes
-    final int preInts = mem.getByte(getLoFieldOffset(LoField.PRE_INTS)) & 0xFF;
-    final int serVer = mem.getByte(getLoFieldOffset(LoField.SER_VERSION)) & 
0xFF;
-    final Family family = 
Family.idToFamily(mem.getByte(getLoFieldOffset(LoField.FAMILY)) & 0xFF);
-    final int lgK = mem.getByte(getLoFieldOffset(LoField.LG_K)) & 0xFF;
-    final int fiCol = mem.getByte(getLoFieldOffset(LoField.FI_COL)) & 0xFF;
-    final int flags = mem.getByte(getLoFieldOffset(LoField.FLAGS)) & 0XFF;
-    final int seedHash = mem.getShort(getLoFieldOffset(LoField.SEED_HASH)) & 
0XFFFF;
+    final int preInts = seg.get(JAVA_BYTE, getLoFieldOffset(LoField.PRE_INTS)) 
& 0xFF;
+    final int serVer = seg.get(JAVA_BYTE, 
getLoFieldOffset(LoField.SER_VERSION)) & 0xFF;
+    final Family family = Family.idToFamily(seg.get(JAVA_BYTE, 
getLoFieldOffset(LoField.FAMILY)) & 0xFF);
+    final int lgK = seg.get(JAVA_BYTE, getLoFieldOffset(LoField.LG_K)) & 0xFF;
+    final int fiCol = seg.get(JAVA_BYTE, getLoFieldOffset(LoField.FI_COL)) & 
0xFF;
+    final int flags = seg.get(JAVA_BYTE, getLoFieldOffset(LoField.FLAGS)) & 
0XFF;
+    final int seedHash = seg.get(JAVA_SHORT_UNALIGNED, 
getLoFieldOffset(LoField.SEED_HASH)) & 0XFFFF;
     final String seedHashStr = Integer.toHexString(seedHash);
 
     //Flags of the Flags byte
@@ -630,11 +634,11 @@ final class PreambleUtil {
         break;
       }
       case SPARSE_HYBRID_MERGED : {
-        numCoupons = mem.getInt(getHiFieldOffset(format, HiField.NUM_COUPONS)) 
& 0xFFFF_FFFFL;
+        numCoupons = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS)) & 0xFFFF_FFFFL;
 
         numSv = numCoupons;
-        svLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
-        svStreamStart = getSvStreamOffset(mem);
+        svLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        svStreamStart = getSvStreamOffset(seg);
         reqBytes = svStreamStart + (svLengthInts << 2);
         flavor = CpcUtil.determineFlavor(lgK, numCoupons);
         sb.append("Flavor                          : 
").append(flavor).append(LS);
@@ -646,14 +650,14 @@ final class PreambleUtil {
         break;
       }
       case SPARSE_HYBRID_HIP : {
-        numCoupons = mem.getInt(getHiFieldOffset(format, HiField.NUM_COUPONS)) 
& 0xFFFF_FFFFL;
+        numCoupons = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS)) & 0xFFFF_FFFFL;
 
         numSv = numCoupons;
-        svLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
-        svStreamStart = getSvStreamOffset(mem);
+        svLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        svStreamStart = getSvStreamOffset(seg);
 
-        kxp = mem.getDouble(getHiFieldOffset(format, HiField.KXP));
-        hipAccum = mem.getDouble(getHiFieldOffset(format, HiField.HIP_ACCUM));
+        kxp = seg.get(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.KXP));
+        hipAccum = seg.get(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.HIP_ACCUM));
         reqBytes = svStreamStart + (svLengthInts << 2);
 
         flavor = CpcUtil.determineFlavor(lgK, numCoupons);
@@ -669,11 +673,11 @@ final class PreambleUtil {
         break;
       }
       case PINNED_SLIDING_MERGED_NOSV : {
-        numCoupons = mem.getInt(getHiFieldOffset(format, HiField.NUM_COUPONS)) 
& 0xFFFF_FFFFL;
+        numCoupons = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS)) & 0xFFFF_FFFFL;
 
         winOffset = CpcUtil.determineCorrectOffset(lgK, numCoupons);
-        wLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
-        wStreamStart = getWStreamOffset(mem);
+        wLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        wStreamStart = getWStreamOffset(seg);
         reqBytes = wStreamStart + (wLengthInts << 2);
 
         flavor = CpcUtil.determineFlavor(lgK, numCoupons);
@@ -686,14 +690,14 @@ final class PreambleUtil {
         break;
       }
       case PINNED_SLIDING_HIP_NOSV : {
-        numCoupons = mem.getInt(getHiFieldOffset(format, HiField.NUM_COUPONS)) 
& 0xFFFF_FFFFL;
+        numCoupons = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS)) & 0xFFFF_FFFFL;
 
         winOffset = CpcUtil.determineCorrectOffset(lgK, numCoupons);
-        wLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
-        wStreamStart = getWStreamOffset(mem);
+        wLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        wStreamStart = getWStreamOffset(seg);
 
-        kxp = mem.getDouble(getHiFieldOffset(format, HiField.KXP));
-        hipAccum = mem.getDouble(getHiFieldOffset(format, HiField.HIP_ACCUM));
+        kxp = seg.get(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.KXP));
+        hipAccum = seg.get(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.HIP_ACCUM));
         reqBytes = wStreamStart + (wLengthInts << 2);
 
         flavor = CpcUtil.determineFlavor(lgK, numCoupons);
@@ -709,16 +713,16 @@ final class PreambleUtil {
         break;
       }
       case PINNED_SLIDING_MERGED : {
-        numCoupons = mem.getInt(getHiFieldOffset(format, HiField.NUM_COUPONS) 
& 0xFFFF_FFFFL);
+        numCoupons = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS) & 0xFFFF_FFFFL);
 
         winOffset = CpcUtil.determineCorrectOffset(lgK, numCoupons);
-        wLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        wLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
 
-        numSv = mem.getInt(getHiFieldOffset(format, HiField.NUM_SV)) & 
0xFFFF_FFFFL;
-        svLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        numSv = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_SV)) & 0xFFFF_FFFFL;
+        svLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
 
-        wStreamStart = getWStreamOffset(mem);
-        svStreamStart = getSvStreamOffset(mem);
+        wStreamStart = getWStreamOffset(seg);
+        svStreamStart = getSvStreamOffset(seg);
         reqBytes = svStreamStart + (svLengthInts << 2);
 
         flavor = CpcUtil.determineFlavor(lgK, numCoupons);
@@ -735,18 +739,18 @@ final class PreambleUtil {
         break;
       }
       case PINNED_SLIDING_HIP : {
-        numCoupons = mem.getInt(getHiFieldOffset(format, HiField.NUM_COUPONS) 
& 0xFFFF_FFFFL);
+        numCoupons = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_COUPONS) & 0xFFFF_FFFFL);
 
         winOffset = CpcUtil.determineCorrectOffset(lgK, numCoupons);
-        wLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        wLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.W_LENGTH_INTS)) & 0xFFFF_FFFFL;
 
-        numSv = mem.getInt(getHiFieldOffset(format, HiField.NUM_SV)) & 
0xFFFF_FFFFL;
-        svLengthInts = mem.getInt(getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
-        wStreamStart = getWStreamOffset(mem);
-        svStreamStart = getSvStreamOffset(mem);
+        numSv = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.NUM_SV)) & 0xFFFF_FFFFL;
+        svLengthInts = seg.get(JAVA_INT_UNALIGNED, getHiFieldOffset(format, 
HiField.SV_LENGTH_INTS)) & 0xFFFF_FFFFL;
+        wStreamStart = getWStreamOffset(seg);
+        svStreamStart = getSvStreamOffset(seg);
 
-        kxp = mem.getDouble(getHiFieldOffset(format, HiField.KXP));
-        hipAccum = mem.getDouble(getHiFieldOffset(format, HiField.HIP_ACCUM));
+        kxp = seg.get(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.KXP));
+        hipAccum = seg.get(JAVA_DOUBLE_UNALIGNED, getHiFieldOffset(format, 
HiField.HIP_ACCUM));
         reqBytes = svStreamStart + (svLengthInts << 2);
 
         flavor = CpcUtil.determineFlavor(lgK, numCoupons);
@@ -774,24 +778,24 @@ final class PreambleUtil {
       sb.append(LS).append("### CPC SKETCH IMAGE - DATA").append(LS);
       if (wLengthInts > 0) {
         sb.append(LS).append("Window Stream:").append(LS);
-        listData(mem, wStreamStart, wLengthInts, sb);
+        listData(seg, wStreamStart, wLengthInts, sb);
       }
       if (svLengthInts > 0) {
         sb.append(LS).append("SV Stream:").append(LS);
-        listData(mem, svStreamStart, svLengthInts, sb);
+        listData(seg, svStreamStart, svLengthInts, sb);
       }
     }
     sb.append("### END CPC SKETCH IMAGE").append(LS);
     return sb.toString();
-  } //end toString(mem)
+  } //end toString(seg)
 
-  private static void listData(final Memory mem, final long offsetBytes, final 
long lengthInts,
+  private static void listData(final MemorySegment seg, final long 
offsetBytes, final long lengthInts,
       final StringBuilder sb) {
-    final long memCap = mem.getCapacity();
+    final long segCap = seg.byteSize();
     final long expectedCap = offsetBytes + (4L * lengthInts);
-    checkCapacity(memCap, expectedCap);
+    checkCapacity(segCap, expectedCap);
     for (long i = 0; i < lengthInts; i++) {
-      sb.append(String.format(fmt, i, mem.getInt(offsetBytes + (4L * 
i)))).append(LS);
+      sb.append(String.format(fmt, i, seg.get(JAVA_INT_UNALIGNED, offsetBytes 
+ (4L * i)))).append(LS);
     }
   }
 
@@ -800,26 +804,26 @@ final class PreambleUtil {
         "Operation is illegal: Format = " + format.name() + ", HiField = " + 
hiField);
   }
 
-  static void checkCapacity(final long memCap, final long expectedCap) {
-    if (memCap < expectedCap) {
+  static void checkCapacity(final long segCap, final long expectedCap) {
+    if (segCap < expectedCap) {
       throw new SketchesArgumentException(
-          "Insufficient Image Bytes = " + memCap + ", Expected = " + 
expectedCap);
+          "Insufficient Image Bytes = " + segCap + ", Expected = " + 
expectedCap);
     }
   }
 
   //basic checks of SerVer, Format, preInts, Family, fiCol, lgK.
-  static void checkLoPreamble(final Memory mem) {
-    Objects.requireNonNull(mem, "Source Memory must not be null");
-    checkBounds(0, 8, mem.getCapacity()); //need min 8 bytes
-    rtAssertEquals(getSerVer(mem), SER_VER & 0XFF);
-    final Format fmat = getFormat(mem);
+  static void checkLoPreamble(final MemorySegment seg) {
+    Objects.requireNonNull(seg, "Source MemorySegment must not be null");
+    checkBounds(0, 8, seg.byteSize()); //need min 8 bytes
+    rtAssertEquals(getSerVer(seg), SER_VER & 0XFF);
+    final Format fmat = getFormat(seg);
     final int preIntsDef = getDefinedPreInts(fmat) & 0XFF;
-    rtAssertEquals(getPreInts(mem), preIntsDef);
-    final Family fam = getFamily(mem);
+    rtAssertEquals(getPreInts(seg), preIntsDef);
+    final Family fam = getFamily(seg);
     rtAssert(fam == Family.CPC);
-    final int lgK = getLgK(mem);
+    final int lgK = getLgK(seg);
     rtAssert((lgK >= 4) && (lgK <= 26));
-    final int fiCol = getFiCol(mem);
+    final int fiCol = getFiCol(seg);
     rtAssert((fiCol <= 63) && (fiCol >= 0));
   }
 
diff --git a/src/test/java/org/apache/datasketches/cpc/CompressedStateTest.java 
b/src/test/java/org/apache/datasketches/cpc/CompressedStateTest.java
index 58359968f..4fdc5da73 100644
--- a/src/test/java/org/apache/datasketches/cpc/CompressedStateTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/CompressedStateTest.java
@@ -22,10 +22,9 @@ package org.apache.datasketches.cpc;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
 
+import java.lang.foreign.MemorySegment;
 import java.io.PrintStream;
 
-import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
 /**
@@ -43,10 +42,10 @@ public class CompressedStateTest {
     Format fmt = state.getFormat();
     assertEquals(fmt, skFmt);
     long c = state.numCoupons;
-    WritableMemory wmem = 
WritableMemory.allocate((int)state.getRequiredSerializedBytes());
-    state.exportToMemory(wmem);
+    MemorySegment wseg = MemorySegment.ofArray(new 
byte[(int)state.getRequiredSerializedBytes()]);
+    state.exportToSegment(wseg);
     printf("%8d %8d %10s %35s\n", vIn, c, f.toString(), fmt.toString());
-    CompressedState state2 = CompressedState.importFromMemory(wmem);
+    CompressedState state2 = CompressedState.importFromSegment(wseg);
 
     final CpcUnion union = new CpcUnion(lgK);
     union.update(sk);
@@ -57,10 +56,10 @@ public class CompressedStateTest {
     fmt = state.getFormat();
     assertEquals(fmt, skFmt);
     c = state.numCoupons;
-    wmem = WritableMemory.allocate((int)state.getRequiredSerializedBytes());
-    state.exportToMemory(wmem);
+    wseg = MemorySegment.ofArray(new 
byte[(int)state.getRequiredSerializedBytes()]);
+    state.exportToSegment(wseg);
     printf("%8d %8d %10s %35s\n", vIn, c, f.toString(), fmt.toString());
-    state2 = CompressedState.importFromMemory(wmem);
+    state2 = CompressedState.importFromSegment(wseg);
     fmt = state2.getFormat();
     assertEquals(fmt, skFmt);
   }
@@ -111,7 +110,7 @@ public class CompressedStateTest {
     final byte[] byteArr = sk.toByteArray();
     byteArr[5] &= (byte) -3;
     try {
-      CompressedState.importFromMemory(Memory.wrap(byteArr));
+      CompressedState.importFromSegment(MemorySegment.ofArray(byteArr));
       fail();
     } catch (final AssertionError e) { }
   }
diff --git 
a/src/test/java/org/apache/datasketches/cpc/CpcSketchCrossLanguageTest.java 
b/src/test/java/org/apache/datasketches/cpc/CpcSketchCrossLanguageTest.java
index 19d167f8c..d2add683b 100644
--- a/src/test/java/org/apache/datasketches/cpc/CpcSketchCrossLanguageTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/CpcSketchCrossLanguageTest.java
@@ -25,10 +25,10 @@ import static 
org.apache.datasketches.common.TestUtil.cppPath;
 import static org.apache.datasketches.common.TestUtil.javaPath;
 import static org.testng.Assert.assertEquals;
 
+import java.lang.foreign.MemorySegment;
 import java.io.IOException;
 import java.nio.file.Files;
 
-import org.apache.datasketches.memory.Memory;
 import org.testng.annotations.Test;
 
 /**
@@ -42,9 +42,11 @@ public class CpcSketchCrossLanguageTest {
     final int[] nArr = {0, 100, 200, 2000, 20_000};
     final Flavor[] flavorArr = {Flavor.EMPTY, Flavor.SPARSE, Flavor.HYBRID, 
Flavor.PINNED, Flavor.SLIDING};
     int flavorIdx = 0;
-    for (int n: nArr) {
+    for (final int n: nArr) {
       final CpcSketch sk = new CpcSketch(11);
-      for (int i = 0; i < n; i++) sk.update(i);
+      for (int i = 0; i < n; i++) {
+        sk.update(i);
+      }
       assertEquals(sk.getFlavor(), flavorArr[flavorIdx++]);
       Files.newOutputStream(javaPath.resolve("cpc_n" + n + 
"_java.sk")).write(sk.toByteArray());
     }
@@ -52,14 +54,14 @@ public class CpcSketchCrossLanguageTest {
 
   @Test(groups = {GENERATE_JAVA_FILES})
   void negativeIntEquivalence() throws Exception {
-    CpcSketch sk = new CpcSketch();
-    byte v1 = (byte) -1;
+    final CpcSketch sk = new CpcSketch();
+    final byte v1 = (byte) -1;
     sk.update(v1);
-    short v2 = -1;
+    final short v2 = -1;
     sk.update(v2);
-    int v3 = -1;
+    final int v3 = -1;
     sk.update(v3);
-    long v4 = -1;
+    final long v4 = -1;
     sk.update(v4);
     assertEquals(sk.getEstimate(), 1, 0.01);
     
Files.newOutputStream(javaPath.resolve("cpc_negative_one_java.sk")).write(sk.toByteArray());
@@ -70,9 +72,9 @@ public class CpcSketchCrossLanguageTest {
     final int[] nArr = {0, 100, 200, 2000, 20000};
     final Flavor[] flavorArr = {Flavor.EMPTY, Flavor.SPARSE, Flavor.HYBRID, 
Flavor.PINNED, Flavor.SLIDING};
     int flavorIdx = 0;
-    for (int n: nArr) {
+    for (final int n: nArr) {
       final byte[] bytes = Files.readAllBytes(cppPath.resolve("cpc_n" + n + 
"_cpp.sk"));
-      final CpcSketch sketch = CpcSketch.heapify(Memory.wrap(bytes));
+      final CpcSketch sketch = CpcSketch.heapify(MemorySegment.ofArray(bytes));
       assertEquals(sketch.getFlavor(), flavorArr[flavorIdx++]);
       assertEquals(sketch.getEstimate(), n, n * 0.02);
     }
diff --git a/src/test/java/org/apache/datasketches/cpc/CpcSketchTest.java 
b/src/test/java/org/apache/datasketches/cpc/CpcSketchTest.java
index 3782bdc34..1f8ae715f 100644
--- a/src/test/java/org/apache/datasketches/cpc/CpcSketchTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/CpcSketchTest.java
@@ -24,13 +24,13 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
+import java.lang.foreign.MemorySegment;
 import java.io.PrintStream;
 import java.nio.ByteBuffer;
 
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.SketchesArgumentException;
 import org.apache.datasketches.common.Util;
-import org.apache.datasketches.memory.Memory;
 import org.testng.annotations.Test;
 
 /**
@@ -47,7 +47,7 @@ public class CpcSketchTest {
     sk.update(1L);
     sk.update(2.0);
     sk.update("3");
-    byte[] bytes = new byte[] { 4, 4 };
+    final byte[] bytes = { 4, 4 };
     sk.update(bytes);
     sk.update(ByteBuffer.wrap(bytes));  // same as previous
     sk.update(ByteBuffer.wrap(bytes, 0, 1));
@@ -188,29 +188,29 @@ public class CpcSketchTest {
 
   @Test
   public void checkHeapify() {
-    int lgK = 10;
-    CpcSketch sk = new CpcSketch(lgK, Util.DEFAULT_UPDATE_SEED);
+    final int lgK = 10;
+    final CpcSketch sk = new CpcSketch(lgK, Util.DEFAULT_UPDATE_SEED);
     assertTrue(sk.isEmpty());
-    byte[] byteArray = sk.toByteArray();
-    CpcSketch sk2 = CpcSketch.heapify(byteArray, Util.DEFAULT_UPDATE_SEED);
+    final byte[] byteArray = sk.toByteArray();
+    final CpcSketch sk2 = CpcSketch.heapify(byteArray, 
Util.DEFAULT_UPDATE_SEED);
     assertTrue(specialEquals(sk2, sk, false, false));
   }
 
   @Test
   public void checkHeapify2() {
-    int lgK = 10;
-    CpcSketch sk = new CpcSketch(lgK);
+    final int lgK = 10;
+    final CpcSketch sk = new CpcSketch(lgK);
     assertTrue(sk.isEmpty());
-    byte[] byteArray = sk.toByteArray();
-    Memory mem = Memory.wrap(byteArray);
-    CpcSketch sk2 = CpcSketch.heapify(mem);
+    final byte[] byteArray = sk.toByteArray();
+    final MemorySegment seg = MemorySegment.ofArray(byteArray);
+    final CpcSketch sk2 = CpcSketch.heapify(seg);
     assertTrue(specialEquals(sk2, sk, false, false));
   }
 
   @Test
   public void checkRowColUpdate() {
-    int lgK = 10;
-    CpcSketch sk = new CpcSketch(lgK, Util.DEFAULT_UPDATE_SEED);
+    final int lgK = 10;
+    final CpcSketch sk = new CpcSketch(lgK, Util.DEFAULT_UPDATE_SEED);
     sk.rowColUpdate(0);
     assertEquals(sk.getFlavor(), Flavor.SPARSE);
   }
@@ -226,7 +226,7 @@ public class CpcSketchTest {
   /**
    * @param s the string to print
    */
-  private static void println(String s) {
+  private static void println(final String s) {
     //ps.println(s);  //disable here
   }
 
diff --git a/src/test/java/org/apache/datasketches/cpc/CpcWrapperTest.java 
b/src/test/java/org/apache/datasketches/cpc/CpcWrapperTest.java
index 1635b477d..81f35f63c 100644
--- a/src/test/java/org/apache/datasketches/cpc/CpcWrapperTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/CpcWrapperTest.java
@@ -22,11 +22,11 @@ package org.apache.datasketches.cpc;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.fail;
 
+import java.lang.foreign.MemorySegment;
 import java.io.PrintStream;
 
 import org.testng.annotations.Test;
 import org.apache.datasketches.common.Family;
-import org.apache.datasketches.memory.Memory;
 
 /**
  * @author Lee Rhodes
@@ -37,48 +37,48 @@ public class CpcWrapperTest {
   @SuppressWarnings("unused")
   @Test
   public void check() {
-    int lgK = 10;
-    CpcSketch sk1 = new CpcSketch(lgK);
-    CpcSketch sk2 = new CpcSketch(lgK);
-    CpcSketch skD = new CpcSketch(lgK);
-    double dEst = skD.getEstimate();
-    double dlb = skD.getLowerBound(2);
-    double dub = skD.getUpperBound(2);
+    final int lgK = 10;
+    final CpcSketch sk1 = new CpcSketch(lgK);
+    final CpcSketch sk2 = new CpcSketch(lgK);
+    final CpcSketch skD = new CpcSketch(lgK);
+    final double dEst = skD.getEstimate();
+    final double dlb = skD.getLowerBound(2);
+    final double dub = skD.getUpperBound(2);
 
-    int n = 100000;
+    final int n = 100000;
     for (int i = 0; i < n; i++) {
       sk1.update(i);
       sk2.update(i + n);
       skD.update(i);
       skD.update(i + n);
     }
-    byte[] concatArr = skD.toByteArray();
+    final byte[] concatArr = skD.toByteArray();
 
-    CpcUnion union = new CpcUnion(lgK);
-    CpcSketch result = union.getResult();
-    double uEst = result.getEstimate();
-    double ulb = result.getLowerBound(2);
-    double uub = result.getUpperBound(2);
+    final CpcUnion union = new CpcUnion(lgK);
+    final CpcSketch result = union.getResult();
+    final double uEst = result.getEstimate();
+    final double ulb = result.getLowerBound(2);
+    final double uub = result.getUpperBound(2);
     union.update(sk1);
     union.update(sk2);
-    CpcSketch merged = union.getResult();
-    byte[] mergedArr = merged.toByteArray();
+    final CpcSketch merged = union.getResult();
+    final byte[] mergedArr = merged.toByteArray();
 
-    Memory concatMem = Memory.wrap(concatArr);
-    CpcWrapper concatSk = new CpcWrapper(concatMem);
+    final MemorySegment concatSeg = MemorySegment.ofArray(concatArr);
+    final CpcWrapper concatSk = new CpcWrapper(concatSeg);
     assertEquals(concatSk.getLgK(), lgK);
 
     printf("              %12s %12s %12s\n", "Lb", "Est", "Ub");
-    double ccEst = concatSk.getEstimate();
-    double ccLb = concatSk.getLowerBound(2);
-    double ccUb = concatSk.getUpperBound(2);
+    final double ccEst = concatSk.getEstimate();
+    final double ccLb = concatSk.getLowerBound(2);
+    final double ccUb = concatSk.getUpperBound(2);
     printf("Concatenated: %12.0f %12.0f %12.0f\n", ccLb, ccEst, ccUb);
 
-    //Memory mergedMem = Memory.wrap(mergedArr);
-    CpcWrapper mergedSk = new CpcWrapper(mergedArr);
-    double mEst = mergedSk.getEstimate();
-    double mLb = mergedSk.getLowerBound(2);
-    double mUb = mergedSk.getUpperBound(2);
+    //MemorySegment mergedSeg = MemorySegment.ofArray(mergedArr);
+    final CpcWrapper mergedSk = new CpcWrapper(mergedArr);
+    final double mEst = mergedSk.getEstimate();
+    final double mLb = mergedSk.getLowerBound(2);
+    final double mUb = mergedSk.getUpperBound(2);
     printf("Merged:       %12.0f %12.0f %12.0f\n", mLb, mEst, mUb);
     assertEquals(Family.CPC, CpcWrapper.getFamily());
   }
@@ -86,27 +86,27 @@ public class CpcWrapperTest {
   @SuppressWarnings("unused")
   @Test
   public void checkIsCompressed() {
-    CpcSketch sk = new CpcSketch(10);
-    byte[] byteArr = sk.toByteArray();
+    final CpcSketch sk = new CpcSketch(10);
+    final byte[] byteArr = sk.toByteArray();
     byteArr[5] &= (byte) -3;
     try {
-      CpcWrapper wrapper = new CpcWrapper(Memory.wrap(byteArr));
+      final CpcWrapper wrapper = new 
CpcWrapper(MemorySegment.ofArray(byteArr));
       fail();
-    } catch (AssertionError e) {}
+    } catch (final AssertionError e) {}
   }
 
   /**
    * @param format the string to print
    * @param args the arguments
    */
-  static void printf(String format, Object... args) {
+  static void printf(final String format, final Object... args) {
     //ps.printf(format, args); //disable here
   }
 
   /**
    * @param s the string to print
    */
-  static void println(String s) {
+  static void println(final String s) {
     //ps.println(s);  //disable here
   }
 
diff --git a/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java 
b/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java
index 8577b8a3d..c8891d2ca 100644
--- a/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.datasketches.cpc;
 
+import static java.lang.foreign.ValueLayout.JAVA_BYTE;
 import static org.apache.datasketches.cpc.PreambleUtil.COMPRESSED_FLAG_MASK;
 import static org.apache.datasketches.cpc.PreambleUtil.SER_VER;
 import static org.apache.datasketches.cpc.PreambleUtil.getDefinedPreInts;
@@ -51,9 +52,9 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
+import java.lang.foreign.MemorySegment;
 import org.testng.annotations.Test;
 
-import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.SketchesArgumentException;
 import org.apache.datasketches.common.SketchesStateException;
@@ -66,135 +67,135 @@ import org.apache.datasketches.cpc.PreambleUtil.HiField;
 public class PreambleUtilTest {
   static final short defaultSeedHash = 
Util.computeSeedHash(Util.DEFAULT_UPDATE_SEED) ;
 
-  private static void checkFirst8(WritableMemory wmem, Format format, int lgK, 
int fiCol) {
-    assertEquals(getFormat(wmem), format);
-    assertEquals(getPreInts(wmem), getDefinedPreInts(format));
-    assertEquals(getSerVer(wmem), SER_VER);
-    assertEquals(getFamily(wmem), Family.CPC);
-    assertEquals(getLgK(wmem), lgK);
-    assertEquals(getFiCol(wmem), fiCol);
-    assertEquals(getFlags(wmem), (format.ordinal() << 2) | 
COMPRESSED_FLAG_MASK);
-    assertEquals(getSeedHash(wmem), defaultSeedHash);
+  private static void checkFirst8(final MemorySegment wseg, final Format 
format, final int lgK, final int fiCol) {
+    assertEquals(getFormat(wseg), format);
+    assertEquals(getPreInts(wseg), getDefinedPreInts(format));
+    assertEquals(getSerVer(wseg), SER_VER);
+    assertEquals(getFamily(wseg), Family.CPC);
+    assertEquals(getLgK(wseg), lgK);
+    assertEquals(getFiCol(wseg), fiCol);
+    assertEquals(getFlags(wseg), (format.ordinal() << 2) | 
COMPRESSED_FLAG_MASK);
+    assertEquals(getSeedHash(wseg), defaultSeedHash);
   }
 
   @Test
-  public void checkNormalPutMemory() {
-    int lgK = 12;
-    double kxp = lgK;
-    double hipAccum = 1005;
-    int fiCol = 1;
-    int[] csvStream = new int[] {1, 2, 3};
-    int numCoupons = csvStream.length;
-    int csvLength = csvStream.length;
-    short seedHash = defaultSeedHash;
-    int[] cwStream = new int[] {4, 5, 6};
-    int cwLength = cwStream.length;
-    int numSv = cwStream.length;
-    int maxInts = 10 + csvLength + cwLength;
-    WritableMemory wmem = WritableMemory.allocate(4 * maxInts);
+  public void checkNormalPutSegment() {
+    final int lgK = 12;
+    final double kxp = lgK;
+    final double hipAccum = 1005;
+    final int fiCol = 1;
+    final int[] csvStream = {1, 2, 3};
+    final int numCoupons = csvStream.length;
+    final int csvLength = csvStream.length;
+    final short seedHash = defaultSeedHash;
+    final int[] cwStream = {4, 5, 6};
+    final int cwLength = cwStream.length;
+    final int numSv = cwStream.length;
+    final int maxInts = 10 + csvLength + cwLength;
+    final MemorySegment wseg = MemorySegment.ofArray(new byte[4 * maxInts]);
 
     Format format;
 
     format = Format.EMPTY_MERGED;
-    putEmptyMerged(wmem, lgK, seedHash);
-    println(CpcSketch.toString((byte[])wmem.getArray(), true));
-    checkFirst8(wmem, format, lgK, (byte) 0);
-    assertFalse(hasHip(wmem));
+    putEmptyMerged(wseg, lgK, seedHash);
+    println(CpcSketch.toString((byte[])wseg.toArray(JAVA_BYTE), true));
+    checkFirst8(wseg, format, lgK, (byte) 0);
+    assertFalse(hasHip(wseg));
 
     format = Format.SPARSE_HYBRID_MERGED;
-    putSparseHybridMerged(wmem, lgK, numCoupons, csvLength, seedHash, 
csvStream);
-    println(CpcSketch.toString(wmem, true));
-    println(CpcSketch.toString(wmem, false));
-    checkFirst8(wmem, format, lgK, (byte) 0);
-    assertEquals(getNumCoupons(wmem), numCoupons);
-    assertEquals(getSvLengthInts(wmem), csvLength);
+    putSparseHybridMerged(wseg, lgK, numCoupons, csvLength, seedHash, 
csvStream);
+    println(CpcSketch.toString(wseg, true));
+    println(CpcSketch.toString(wseg, false));
+    checkFirst8(wseg, format, lgK, (byte) 0);
+    assertEquals(getNumCoupons(wseg), numCoupons);
+    assertEquals(getSvLengthInts(wseg), csvLength);
 
     format = Format.SPARSE_HYBRID_HIP;
-    putSparseHybridHip(wmem, lgK, numCoupons, csvLength, kxp, hipAccum, 
seedHash, csvStream);
-    println(CpcSketch.toString(wmem, true));
-    println(CpcSketch.toString(wmem, false));
-    checkFirst8(wmem, format, lgK, (byte) 0);
-    assertEquals(getNumCoupons(wmem), numCoupons);
-    assertEquals(getSvLengthInts(wmem), csvLength);
-    assertEquals(getKxP(wmem), kxp);
-    assertEquals(getHipAccum(wmem), hipAccum);
-    assertTrue(hasHip(wmem));
+    putSparseHybridHip(wseg, lgK, numCoupons, csvLength, kxp, hipAccum, 
seedHash, csvStream);
+    println(CpcSketch.toString(wseg, true));
+    println(CpcSketch.toString(wseg, false));
+    checkFirst8(wseg, format, lgK, (byte) 0);
+    assertEquals(getNumCoupons(wseg), numCoupons);
+    assertEquals(getSvLengthInts(wseg), csvLength);
+    assertEquals(getKxP(wseg), kxp);
+    assertEquals(getHipAccum(wseg), hipAccum);
+    assertTrue(hasHip(wseg));
 
     format = Format.PINNED_SLIDING_MERGED_NOSV;
-    putPinnedSlidingMergedNoSv(wmem, lgK, fiCol, numCoupons, cwLength, 
seedHash, cwStream);
-    println(CpcSketch.toString(wmem, true));
-    println(CpcSketch.toString(wmem, false));
-    checkFirst8(wmem, format, lgK, fiCol);
-    assertEquals(getNumCoupons(wmem), numCoupons);
-    assertEquals(getWLengthInts(wmem), cwLength);
+    putPinnedSlidingMergedNoSv(wseg, lgK, fiCol, numCoupons, cwLength, 
seedHash, cwStream);
+    println(CpcSketch.toString(wseg, true));
+    println(CpcSketch.toString(wseg, false));
+    checkFirst8(wseg, format, lgK, fiCol);
+    assertEquals(getNumCoupons(wseg), numCoupons);
+    assertEquals(getWLengthInts(wseg), cwLength);
 
     format = Format.PINNED_SLIDING_HIP_NOSV;
-    putPinnedSlidingHipNoSv(wmem, lgK, fiCol, numCoupons, cwLength, kxp, 
hipAccum, seedHash,
+    putPinnedSlidingHipNoSv(wseg, lgK, fiCol, numCoupons, cwLength, kxp, 
hipAccum, seedHash,
         cwStream);
-    println(CpcSketch.toString(wmem, true));
-    println(CpcSketch.toString(wmem, false));
-    checkFirst8(wmem, format, lgK, fiCol);
-    assertEquals(getNumCoupons(wmem), numCoupons);
-    assertEquals(getWLengthInts(wmem), cwLength);
-    assertEquals(getKxP(wmem), kxp);
-    assertEquals(getHipAccum(wmem), hipAccum);
+    println(CpcSketch.toString(wseg, true));
+    println(CpcSketch.toString(wseg, false));
+    checkFirst8(wseg, format, lgK, fiCol);
+    assertEquals(getNumCoupons(wseg), numCoupons);
+    assertEquals(getWLengthInts(wseg), cwLength);
+    assertEquals(getKxP(wseg), kxp);
+    assertEquals(getHipAccum(wseg), hipAccum);
 
     format = Format.PINNED_SLIDING_MERGED;
-    putPinnedSlidingMerged(wmem, lgK, fiCol, numCoupons, numSv, csvLength, 
cwLength, seedHash,
+    putPinnedSlidingMerged(wseg, lgK, fiCol, numCoupons, numSv, csvLength, 
cwLength, seedHash,
         csvStream, cwStream);
-    println(CpcSketch.toString(wmem, true));
-    println(CpcSketch.toString(wmem, false));
-    checkFirst8(wmem, format, lgK, fiCol);
-    assertEquals(getNumCoupons(wmem), numCoupons);
-    assertEquals(getNumSv(wmem), numSv);
-    assertEquals(getSvLengthInts(wmem), csvLength);
-    assertEquals(getWLengthInts(wmem), cwLength);
+    println(CpcSketch.toString(wseg, true));
+    println(CpcSketch.toString(wseg, false));
+    checkFirst8(wseg, format, lgK, fiCol);
+    assertEquals(getNumCoupons(wseg), numCoupons);
+    assertEquals(getNumSv(wseg), numSv);
+    assertEquals(getSvLengthInts(wseg), csvLength);
+    assertEquals(getWLengthInts(wseg), cwLength);
 
     format = Format.PINNED_SLIDING_HIP;
-    putPinnedSlidingHip(wmem, lgK, fiCol, numCoupons, numSv, kxp, hipAccum, 
csvLength, cwLength,
+    putPinnedSlidingHip(wseg, lgK, fiCol, numCoupons, numSv, kxp, hipAccum, 
csvLength, cwLength,
         seedHash, csvStream, cwStream);
-    println(CpcSketch.toString(wmem, true));
-    println(CpcSketch.toString(wmem, false));
-    checkFirst8(wmem, format, lgK, fiCol);
-    assertEquals(getNumCoupons(wmem), numCoupons);
-    assertEquals(getNumSv(wmem), numSv);
-    assertEquals(getSvLengthInts(wmem), csvLength);
-    assertEquals(getWLengthInts(wmem), cwLength);
-    assertEquals(getKxP(wmem), kxp);
-    assertEquals(getHipAccum(wmem), hipAccum);
+    println(CpcSketch.toString(wseg, true));
+    println(CpcSketch.toString(wseg, false));
+    checkFirst8(wseg, format, lgK, fiCol);
+    assertEquals(getNumCoupons(wseg), numCoupons);
+    assertEquals(getNumSv(wseg), numSv);
+    assertEquals(getSvLengthInts(wseg), csvLength);
+    assertEquals(getWLengthInts(wseg), cwLength);
+    assertEquals(getKxP(wseg), kxp);
+    assertEquals(getHipAccum(wseg), hipAccum);
   }
 
   @Test
   public void checkStreamErrors() {
-    WritableMemory wmem = WritableMemory.allocate(4 * 10);
-    putEmptyMerged(wmem, (byte) 12, defaultSeedHash);
-    try { getSvStreamOffset(wmem); fail(); } catch (SketchesArgumentException 
e) { }
-    wmem.putByte(5, (byte) (7 << 2));
-    try { getSvStreamOffset(wmem); fail(); } catch (SketchesStateException e) 
{ }
-    wmem.putByte(5, (byte) 0);
-    try { getWStreamOffset(wmem); fail(); } catch (SketchesArgumentException 
e) { }
-    wmem.putByte(5, (byte) (7 << 2));
-    try { getWStreamOffset(wmem); fail(); } catch (SketchesStateException e) { 
}
+    final MemorySegment wseg = MemorySegment.ofArray(new byte[4 * 10]);
+    putEmptyMerged(wseg, (byte) 12, defaultSeedHash);
+    try { getSvStreamOffset(wseg); fail(); } catch (final 
SketchesArgumentException e) { }
+    wseg.set(JAVA_BYTE, 5, (byte) (7 << 2));
+    try { getSvStreamOffset(wseg); fail(); } catch (final 
SketchesStateException e) { }
+    wseg.set(JAVA_BYTE, 5, (byte) 0);
+    try { getWStreamOffset(wseg); fail(); } catch (final 
SketchesArgumentException e) { }
+    wseg.set(JAVA_BYTE, 5, (byte) (7 << 2));
+    try { getWStreamOffset(wseg); fail(); } catch (final 
SketchesStateException e) { }
   }
 
   @Test
   public void checkStreamErrors2() {
-    WritableMemory wmem = WritableMemory.allocate(4 * 10);
-    int[] svStream = { 1 };
-    int[] wStream = { 2 };
+    final MemorySegment wseg = MemorySegment.ofArray(new byte[4 * 10]);
+    final int[] svStream = { 1 };
+    final int[] wStream = { 2 };
     try {
-      putPinnedSlidingMerged(wmem, 4, 0, 1, 1, 1, 0, (short) 0, svStream, 
wStream);
+      putPinnedSlidingMerged(wseg, 4, 0, 1, 1, 1, 0, (short) 0, svStream, 
wStream);
       fail();
-    } catch (SketchesStateException e) { }
-    assertTrue(PreambleUtil.isCompressed(wmem));
+    } catch (final SketchesStateException e) { }
+    assertTrue(PreambleUtil.isCompressed(wseg));
   }
 
   @Test
-  public void checkEmptyMemory() {
-    WritableMemory wmem = WritableMemory.allocate(4 * 10);
-    wmem.putByte(2, (byte) 16); //legal Family
-    wmem.putByte(5, (byte) (1 << 2)); //select NONE
-    println(CpcSketch.toString(wmem, false));
+  public void checkEmptySegment() {
+    final MemorySegment wseg = MemorySegment.ofArray(new byte[4 * 10]);
+    wseg.set(JAVA_BYTE, 2, (byte) 16); //legal Family
+    wseg.set(JAVA_BYTE, 5, (byte) (1 << 2)); //select NONE
+    println(CpcSketch.toString(wseg, false));
   }
 
   @Test(expectedExceptions = SketchesArgumentException.class)
@@ -214,7 +215,7 @@ public class PreambleUtilTest {
 
   @Test
   public void checkWindowOffset() {
-    long offset = CpcUtil.determineCorrectOffset(4, 54);
+    final long offset = CpcUtil.determineCorrectOffset(4, 54);
     assertEquals(offset, 1L);
   }
 
@@ -247,7 +248,7 @@ public class PreambleUtilTest {
   /**
    * @param s value to print
    */
-  static void println(String s) {
+  static void println(final String s) {
     //System.out.println(s); //disable here
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to