You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2022/12/14 05:26:55 UTC
[datasketches-memory] branch IntegrateJava17_v2 updated: Interim 4 refactoring 8 and 17 BaseStateImpl to sorta match.
This is an automated email from the ASF dual-hosted git repository.
leerho pushed a commit to branch IntegrateJava17_v2
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git
The following commit(s) were added to refs/heads/IntegrateJava17_v2 by this push:
new c6e5a83 Interim 4 refactoring 8 and 17 BaseStateImpl to sorta match.
c6e5a83 is described below
commit c6e5a83e17dff9e734d38912fd9f8b73502261df
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Tue Dec 13 21:26:41 2022 -0800
Interim 4 refactoring 8 and 17 BaseStateImpl to sorta match.
Plus removing all non-unsafe stuff from UnsafeUtil and placing it in
BaseStateImpl.
Plus fixing "type" management
All tests pass for both 8 and 17
---
.../org/apache/datasketches/memory/BaseState.java | 8 +-
.../memory/internal/BaseStateImpl.java | 154 +++---
.../memory/internal/BaseWritableBufferImpl.java | 2 -
.../memory/internal/BaseWritableMemoryImpl.java | 7 +-
.../internal/NonNativeWritableBufferImpl.java | 3 -
.../internal/NonNativeWritableMemoryImpl.java | 3 -
.../apache/datasketches/memory/internal/Util.java | 13 +-
.../internal/AllocateDirectMapMemoryTest.java | 2 +-
.../memory/internal/AllocateDirectMemoryTest.java | 2 +-
.../AllocateDirectWritableMapMemoryTest.java | 4 +-
.../memory/internal/BaseStateTest.java | 58 +--
.../datasketches/memory/internal/BufferTest.java | 2 +-
.../datasketches/memory/internal/LeafImplTest.java | 4 +-
.../datasketches/memory/internal/MemoryTest.java | 6 +-
.../internal/NativeWritableBufferImplTest.java | 5 +-
.../internal/NativeWritableMemoryImplTest.java | 7 +-
.../memory/internal/SpecificLeafTest.java | 10 +-
.../datasketches/memory/internal/UtilTest.java | 2 +-
.../org/apache/datasketches/memory/BaseState.java | 43 +-
.../org/apache/datasketches/memory/Memory.java | 6 +-
.../apache/datasketches/memory/WritableBuffer.java | 2 +-
.../apache/datasketches/memory/WritableMemory.java | 6 +-
.../memory/internal/AllocateDirect.java | 7 +-
.../memory/internal/AllocateDirectMap.java | 13 +-
.../memory/internal/BaseStateImpl.java | 556 ++++++++++++---------
.../memory/internal/BaseWritableBufferImpl.java | 1 -
.../memory/internal/BaseWritableMemoryImpl.java | 1 -
.../memory/internal/CompareAndCopy.java | 14 +-
.../memory/internal/NativeWritableBufferImpl.java | 7 -
.../memory/internal/NativeWritableMemoryImpl.java | 7 -
.../internal/NonNativeWritableBufferImpl.java | 6 -
.../internal/NonNativeWritableMemoryImpl.java | 6 -
.../apache/datasketches/memory/internal/Prim.java | 23 +-
.../datasketches/memory/internal/UnsafeUtil.java | 83 ---
.../apache/datasketches/memory/internal/Util.java | 20 +-
.../datasketches/memory/internal/XxHash64.java | 12 +-
.../internal/AllocateDirectMapMemoryTest.java | 4 +-
.../memory/internal/AllocateDirectMemoryTest.java | 15 +-
.../AllocateDirectWritableMapMemoryTest.java | 29 +-
.../memory/internal/BaseStateTest.java | 69 ++-
.../datasketches/memory/internal/Buffer2Test.java | 2 +-
.../datasketches/memory/internal/BufferTest.java | 2 +-
.../memory/internal/DruidIssue11544Test.java | 2 +-
.../internal/ExampleMemoryRequestServerTest.java | 2 +-
.../datasketches/memory/internal/LeafImplTest.java | 48 +-
.../memory/internal/MemoryReadWriteSafetyTest.java | 2 +-
.../datasketches/memory/internal/MemoryTest.java | 54 +-
.../internal/NativeWritableBufferImplTest.java | 7 +-
.../internal/NativeWritableMemoryImplTest.java | 10 +-
.../memory/internal/SpecificLeafTest.java | 10 +-
.../memory/internal/UnsafeUtilTest.java | 59 ---
.../datasketches/memory/internal/UtilTest.java | 5 +-
.../memory/internal/WritableMemoryTest.java | 2 +-
53 files changed, 627 insertions(+), 800 deletions(-)
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
index ef5d4f8..c8fe15b 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
@@ -55,10 +55,9 @@ public interface BaseState {
* same object for equals.
* @param thisOffsetBytes the starting offset in bytes for this object.
* @param that the given BaseState object
- * @param thatOffsetBytes the starting offset in bytes for the given object
+ * @param thatOffsetBytes the starting offset in bytes for the given BaseState object
* @param lengthBytes the size of the range in bytes
- * @return true if the given object has equal contents to this object in the given range of
- * bytes.
+ * @return true if the given BaseState object has equal contents to this object in the given range of bytes.
*/
boolean equalTo(long thisOffsetBytes, BaseState that, long thatOffsetBytes, long lengthBytes);
@@ -75,7 +74,6 @@ public interface BaseState {
*/
long getCapacity();
-
/**
* Returns true if this Memory is backed by a ByteBuffer.
* @return true if this Memory is backed by a ByteBuffer.
@@ -93,7 +91,7 @@ public interface BaseState {
/**
* Returns true if the backing resource is direct (off-heap) memory.
- * This can be true for allocated direct memory, memory mapped files,
+ * This is the case for allocated direct memory, memory mapped files,
* or from a wrapped ByteBuffer that was allocated direct.
* @return true if the backing resource is direct (off-heap) memory.
*/
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
index 6dd942f..78ec304 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
@@ -20,8 +20,6 @@
package org.apache.datasketches.memory.internal;
import static jdk.incubator.foreign.MemoryAccess.getByteAtOffset;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@@ -43,7 +41,7 @@ import jdk.incubator.foreign.ResourceScope;
*/
abstract class BaseStateImpl implements BaseState {
static final String JDK; //must be at least "1.8"
- static final int JDK_MAJOR; //8, 11, 12, etc
+ static final int JDK_MAJOR; //8, 11, 17, etc
static final int BOOLEAN_SHIFT = 0;
static final int BYTE_SHIFT = 0;
@@ -55,27 +53,37 @@ abstract class BaseStateImpl implements BaseState {
static final long DOUBLE_SHIFT = 3;
//class type IDs.
- // 0000 0XXX
+ // 0000 0XXX Group 1
static final int READONLY = 1;
static final int REGION = 1 << 1;
static final int DUPLICATE = 1 << 2; //for Buffer only
- // 000X X000
+ // 000X X000 Group 2
static final int HEAP = 0;
static final int DIRECT = 1 << 3;
static final int MAP = 1 << 4; //Map is always Direct also
- // 00X0 0000
+ // 00X0 0000 Group 3
static final int NATIVE = 0;
static final int NONNATIVE = 1 << 5;
- // 0X00 0000
+ // 0X00 0000 Group 4
static final int MEMORY = 0;
- static final int BUFFER = 1 << 6;
+ static final int BUFFER = 1 << 6;
- // X000 0000
+ // X000 0000 Group 5
static final int BYTEBUF = 1 << 7;
+ /**
+ * The java line separator character as a String.
+ */
+ static final String LS = System.getProperty("line.separator");
+
+ static final ByteOrder NATIVE_BYTE_ORDER = ByteOrder.nativeOrder();
+
+ static final ByteOrder NON_NATIVE_BYTE_ORDER =
+ (NATIVE_BYTE_ORDER == ByteOrder.LITTLE_ENDIAN) ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+
static {
final String jdkVer = System.getProperty("java.version");
final int[] p = parseJavaVersion(jdkVer);
@@ -94,6 +102,8 @@ abstract class BaseStateImpl implements BaseState {
this.memReqSvr = memReqSvr;
}
+ //**STATIC METHODS*****************************************
+
/**
* Check the requested offset and length against the allocated size.
* The invariants equation is: {@code 0 <= reqOff <= reqLen <= reqOff + reqLen <= allocSize}.
@@ -112,9 +122,9 @@ abstract class BaseStateImpl implements BaseState {
}
static void checkJavaVersion(final String jdkVer, final int p0) {
- if ( p0 != 17 ) {
- throw new IllegalArgumentException(
- "Unsupported JDK Major Version, must be 17; " + jdkVer);
+ boolean ok = p0 == 17;
+ if (!ok) { throw new IllegalArgumentException(
+ "Unsupported JDK Major Version, must be 17; " + jdkVer);
}
}
@@ -127,7 +137,7 @@ abstract class BaseStateImpl implements BaseState {
static int[] parseJavaVersion(final String jdkVer) {
final int p0, p1;
try {
- String[] parts = jdkVer.trim().split("\\.");//grab only number groups and "."
+ String[] parts = jdkVer.trim().split("^0-9\\.");//grab only number groups and "."
parts = parts[0].split("\\."); //split out the number groups
p0 = Integer.parseInt(parts[0]); //the first number group
p1 = (parts.length > 1) ? Integer.parseInt(parts[1]) : 0; //2nd number group, or 0
@@ -138,50 +148,6 @@ abstract class BaseStateImpl implements BaseState {
return new int[] {p0, p1};
}
- /**
- * Decodes the resource type. This is primarily for debugging.
- * @param typeId the given typeId
- * @return a human readable string.
- */
- static final String typeDecode(final int typeId) {
- final StringBuilder sb = new StringBuilder();
- final int group1 = typeId & 0x7;
- switch (group1) {
- case 0 : sb.append("Writable:\t"); break;
- case 1 : sb.append("ReadOnly:\t"); break;
- case 2 : sb.append("Writable:\tRegion:\t"); break;
- case 3 : sb.append("ReadOnly:\tRegion:\t"); break;
- case 4 : sb.append("Writable:\tDuplicate:\t"); break;
- case 5 : sb.append("ReadOnly:\tDuplicate:\t"); break;
- case 6 : sb.append("Writable:\tRegion:\tDuplicate:\t"); break;
- case 7 : sb.append("ReadOnly:\tRegion:\tDuplicate:\t"); break;
- default: break;
- }
- final int group2 = (typeId >>> 3) & 0x3;
- switch (group2) {
- case 0 : sb.append("Heap:\t"); break;
- case 1 : sb.append("Direct:\t"); break;
- case 2 : sb.append("Map:\t"); break;
- case 3 : sb.append("Direct:\tMap:\t"); break;
- default: break;
- }
- if ((typeId & BYTEBUF) > 0) { sb.append("ByteBuffer:\t"); }
-
- final int group3 = (typeId >>> 5) & 0x1;
- switch (group3) {
- case 0 : sb.append("NativeOrder:\t"); break;
- case 1 : sb.append("NonNativeOrder:\t"); break;
- default: break;
- }
- final int group4 = (typeId >>> 6) & 0x1;
- switch (group4) {
- case 0 : sb.append("Memory"); break;
- case 1 : sb.append("Buffer"); break;
- default: break;
- }
- return sb.toString();
- }
-
static final WritableBuffer selectBuffer(
final MemorySegment segment,
final int type,
@@ -267,13 +233,65 @@ abstract class BaseStateImpl implements BaseState {
return sb.toString();
}
+ /**
+ * Decodes the resource type. This is primarily for debugging.
+ * @param typeId the given typeId
+ * @return a human readable string.
+ */
+ static final String typeDecode(final int typeId) {
+ final StringBuilder sb = new StringBuilder();
+ final int group1 = typeId & 0x7;
+ switch (group1) { // 0000 0XXX
+ case 0 : sb.append("Writable:\t"); break;
+ case 1 : sb.append("ReadOnly:\t"); break;
+ case 2 : sb.append("Writable:\tRegion:\t"); break;
+ case 3 : sb.append("ReadOnly:\tRegion:\t"); break;
+ case 4 : sb.append("Writable:\tDuplicate:\t"); break;
+ case 5 : sb.append("ReadOnly:\tDuplicate:\t"); break;
+ case 6 : sb.append("Writable:\tRegion:\tDuplicate:\t"); break;
+ case 7 : sb.append("ReadOnly:\tRegion:\tDuplicate:\t"); break;
+ default: break;
+ }
+ final int group2 = (typeId >>> 3) & 0x3;
+ switch (group2) { // 000X X000
+ case 0 : sb.append("Heap:\t"); break;
+ case 1 : sb.append("Direct:\t"); break;
+ case 2 : sb.append("Map:\t"); break;
+ case 3 : sb.append("Direct:\tMap:\t"); break;
+ default: break;
+ }
+ if ((typeId & BYTEBUF) > 0) { sb.append("ByteBuffer:\t"); }
+
+ final int group3 = (typeId >>> 5) & 0x1;
+ switch (group3) { // 00X0 0000
+ case 0 : sb.append("NativeOrder:\t"); break;
+ case 1 : sb.append("NonNativeOrder:\t"); break;
+ default: break;
+ }
+ final int group4 = (typeId >>> 6) & 0x1;
+ switch (group4) { // 0X00 0000
+ case 0 : sb.append("Memory:\t"); break;
+ case 1 : sb.append("Buffer:\t"); break;
+ default: break;
+ }
+ final int group5 = (typeId >>> 7) & 0x1;
+ switch (group5) { // X000 0000
+ case 0 : sb.append(""); break;
+ case 1 : sb.append("ByteBuffer"); break;
+ default: break;
+ }
+ return sb.toString();
+ }
+
+ //**NON STATIC METHODS*****************************************
+
@Override
public final ByteBuffer asByteBufferView(final ByteOrder order) {
final ByteBuffer byteBuf = seg.asByteBuffer().order(order);
return byteBuf;
}
- @SuppressWarnings("resource")
+ //@SuppressWarnings("resource")
@Override
public void close() {
if (seg != null && seg.scope().isAlive() && !seg.scope().isImplicit()) {
@@ -299,13 +317,13 @@ abstract class BaseStateImpl implements BaseState {
}
@Override
- public MemoryRequestServer getMemoryRequestServer() {
- return memReqSvr;
+ public final ByteOrder getByteOrder() {
+ return (typeId & NONNATIVE) > 0 ? NON_NATIVE_BYTE_ORDER : NATIVE_BYTE_ORDER;
}
@Override
- public final ByteOrder getByteOrder() {
- return (typeId & NONNATIVE) > 0 ? NON_NATIVE_BYTE_ORDER : ByteOrder.nativeOrder();
+ public MemoryRequestServer getMemoryRequestServer() {
+ return memReqSvr;
}
@Override
@@ -318,19 +336,19 @@ abstract class BaseStateImpl implements BaseState {
return memReqSvr != null;
}
- @SuppressWarnings("resource")
+ //@SuppressWarnings("resource")
@Override
public boolean isAlive() { return seg.scope().isAlive(); }
@Override
- public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
- final ByteOrder typeBO = getByteOrder();
- return typeBO == ByteOrder.nativeOrder() && typeBO == byteOrder;
+ public final boolean isBuffer() {
+ return (typeId & BUFFER) > 0;
}
@Override
- public final boolean isBuffer() {
- return (typeId & BUFFER) > 0;
+ public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
+ final ByteOrder typeBO = getByteOrder();
+ return typeBO == ByteOrder.nativeOrder() && typeBO == byteOrder;
}
@Override
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
index 7b7ffa9..a92e75c 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
@@ -19,8 +19,6 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
-
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Objects;
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
index 586e3ac..8b07ab9 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
@@ -21,7 +21,6 @@ package org.apache.datasketches.memory.internal;
import static java.nio.channels.FileChannel.MapMode.READ_ONLY;
import static java.nio.channels.FileChannel.MapMode.READ_WRITE;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -123,7 +122,7 @@ public abstract class BaseWritableMemoryImpl extends BaseStateImpl implements Wr
//MAP FILE RESOURCE
- @SuppressWarnings("resource")
+ //@SuppressWarnings("resource")
public static WritableMemory wrapMap(
final File file,
final long fileOffsetBytes,
@@ -162,7 +161,7 @@ public abstract class BaseWritableMemoryImpl extends BaseStateImpl implements Wr
* This is a callback mechanism for a user client of direct memory to request more memory.
* @return WritableMemory
*/
- @SuppressWarnings("resource")
+ //@SuppressWarnings("resource")
public static WritableMemory wrapDirect(
final long capacityBytes,
final long alignmentBytes,
@@ -279,7 +278,7 @@ public abstract class BaseWritableMemoryImpl extends BaseStateImpl implements Wr
return MemoryAccess.getByteAtOffset(seg, offsetBytes);
}
- @Override //fundamental limitation of MemorySegment in Java17
+ @Override //Efficient handling of arrays is fundamental limitation of MemorySegment in Java17
public final void getByteArray(final long offsetBytes, final byte[] dstArray,
final int dstOffsetBytes, final int lengthBytes) {
checkBounds(dstOffsetBytes, lengthBytes, dstArray.length);
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
index 092ef89..a27878e 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
@@ -19,9 +19,6 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
-
import org.apache.datasketches.memory.MemoryRequestServer;
import org.apache.datasketches.memory.WritableBuffer;
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
index d8254be..c699e8e 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
@@ -19,9 +19,6 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
-
import org.apache.datasketches.memory.MemoryRequestServer;
import org.apache.datasketches.memory.WritableMemory;
diff --git a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/Util.java b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/Util.java
index f0d2b87..27e2fac 100644
--- a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/Util.java
+++ b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/Util.java
@@ -19,12 +19,13 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.nio.ByteOrder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;
@@ -35,16 +36,6 @@ import java.util.Objects;
//@SuppressWarnings("javadoc")
final class Util {
- /**
- * The java line separator character as a String.
- */
- static final String LS = System.getProperty("line.separator");
-
- static final ByteOrder NATIVE_BYTE_ORDER = ByteOrder.nativeOrder();
- static final ByteOrder NON_NATIVE_BYTE_ORDER =
- (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
-
-
private Util() { }
/**
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java
index c29a551..1cf8378 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java
@@ -23,7 +23,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
import static org.apache.datasketches.memory.internal.Util.getResourceFile;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
index 2c234e7..0032059 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java
index 89cf2fb..1a8d6fa 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java
@@ -24,8 +24,8 @@
package org.apache.datasketches.memory.internal;
import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.apache.datasketches.memory.internal.Util.getResourceFile;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BaseStateTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BaseStateTest.java
index d4c0bbf..181afc2 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BaseStateTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BaseStateTest.java
@@ -19,6 +19,8 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.nativeOverlap;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.typeDecode;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -39,36 +41,36 @@ public class BaseStateTest {
public void checkNativeOverlap() {
MemorySegment par = MemorySegment.allocateNative(100, ResourceScope.newImplicitScope());
//Equal sizes
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 40, 60)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 20, 40)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 0, 20)), 20);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 10, 30)), 10);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 10, 30), getSeg(par, 0, 20)), -10);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 20, 40), getSeg(par, 0, 20)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 0), getSeg(par, 0, 0)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 40, 60)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 20, 40)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 0, 20)), 20);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 10, 30)), 10);
+ assertEquals(nativeOverlap(getSeg(par, 10, 30), getSeg(par, 0, 20)), -10);
+ assertEquals(nativeOverlap(getSeg(par, 20, 40), getSeg(par, 0, 20)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 0), getSeg(par, 0, 0)), 0);
//Unequal Sizes A > B
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 40), getSeg(par, 60, 80)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 40), getSeg(par, 40, 60)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 40), getSeg(par, 30, 50)), 10);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 40), getSeg(par, 20, 40)), 20);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 40), getSeg(par, 10, 30)), 20);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 40), getSeg(par, 0, 20)), 20);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 10, 50), getSeg(par, 0, 20)), -10);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 20, 60), getSeg(par, 0, 20)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 40, 80), getSeg(par, 0, 20)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 40, 80), getSeg(par, 0, 0)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 40), getSeg(par, 60, 80)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 40), getSeg(par, 40, 60)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 40), getSeg(par, 30, 50)), 10);
+ assertEquals(nativeOverlap(getSeg(par, 0, 40), getSeg(par, 20, 40)), 20);
+ assertEquals(nativeOverlap(getSeg(par, 0, 40), getSeg(par, 10, 30)), 20);
+ assertEquals(nativeOverlap(getSeg(par, 0, 40), getSeg(par, 0, 20)), 20);
+ assertEquals(nativeOverlap(getSeg(par, 10, 50), getSeg(par, 0, 20)), -10);
+ assertEquals(nativeOverlap(getSeg(par, 20, 60), getSeg(par, 0, 20)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 40, 80), getSeg(par, 0, 20)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 40, 80), getSeg(par, 0, 0)), 0);
//Unequal Sizes B > A
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 60, 80), getSeg(par, 0, 40)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 40, 60), getSeg(par, 0, 40)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 30, 50), getSeg(par, 0, 40)), -10);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 20, 40), getSeg(par, 0, 40)), -20);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 10, 30), getSeg(par, 0, 40)), -20);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 0, 40)), 20);
- assertEquals(BaseStateImpl.nativeOverlap( getSeg(par, 0, 20), getSeg(par, 10, 50)), 10);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 20, 60)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 20), getSeg(par, 40, 80)), 0);
- assertEquals(BaseStateImpl.nativeOverlap(getSeg(par, 0, 0), getSeg(par, 40, 80)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 60, 80), getSeg(par, 0, 40)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 40, 60), getSeg(par, 0, 40)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 30, 50), getSeg(par, 0, 40)), -10);
+ assertEquals(nativeOverlap(getSeg(par, 20, 40), getSeg(par, 0, 40)), -20);
+ assertEquals(nativeOverlap(getSeg(par, 10, 30), getSeg(par, 0, 40)), -20);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 0, 40)), 20);
+ assertEquals(nativeOverlap( getSeg(par, 0, 20), getSeg(par, 10, 50)), 10);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 20, 60)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 20), getSeg(par, 40, 80)), 0);
+ assertEquals(nativeOverlap(getSeg(par, 0, 0), getSeg(par, 40, 80)), 0);
}
private static MemorySegment getSeg(MemorySegment parent, long left, long right) {
@@ -101,7 +103,7 @@ public class BaseStateTest {
@Test
public void checkTypeDecode() {
for (int i = 0; i < 256; i++) {
- String str = BaseStateImpl.typeDecode(i);
+ String str = typeDecode(i);
println(i + "\t" + str);
}
}
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BufferTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BufferTest.java
index 5727ef3..1f4a940 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BufferTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/BufferTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import java.nio.ByteBuffer;
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
index 73d5540..59f3f66 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
@@ -19,8 +19,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/MemoryTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/MemoryTest.java
index 9a52298..94da3ec 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/MemoryTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/MemoryTest.java
@@ -23,9 +23,9 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
index 2a4c751..dd4d398 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
@@ -19,7 +19,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -354,7 +355,7 @@ public class NativeWritableBufferImplTest {
@Test
public void checkGoodBounds() {
- BaseStateImpl.checkBounds(50, 50, 100);
+ checkBounds(50, 50, 100);
}
@Test
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
index 139dfd5..9c56ab6 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
@@ -19,7 +19,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -541,7 +542,7 @@ public class NativeWritableMemoryImplTest {
@Test
public void checkGoodBounds() {
- BaseStateImpl.checkBounds(50, 50, 100);
+ checkBounds(50, 50, 100);
}
@Test
@@ -570,7 +571,7 @@ public class NativeWritableMemoryImplTest {
assertEquals(comp, 0);
comp = mem3.compareTo(0, 4, mem4, 1, 4);
assertEquals(comp, -1);
- BaseStateImpl.checkBounds(0, 5, mem3.getCapacity());
+ checkBounds(0, 5, mem3.getCapacity());
}
@Test
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
index 993cb4b..6c6bcf7 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
@@ -19,8 +19,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -49,16 +49,16 @@ public class SpecificLeafTest {
public void checkByteBufferLeafs() {
int bytes = 128;
ByteBuffer bb = ByteBuffer.allocate(bytes);
- bb.order(ByteOrder.nativeOrder());
+ bb.order(NATIVE_BYTE_ORDER);
- Memory mem = Memory.wrap(bb).region(0, bytes, ByteOrder.nativeOrder());
+ Memory mem = Memory.wrap(bb).region(0, bytes, NATIVE_BYTE_ORDER);
assertTrue(mem.hasByteBuffer());
assertTrue(mem.isReadOnly());
assertTrue(mem.isMemory());
assertFalse(mem.isDirect());
assertFalse(mem.isMapped());
checkCrossLeafTypeIds(mem);
- Buffer buf = mem.asBuffer().region(0, bytes, ByteOrder.nativeOrder());
+ Buffer buf = mem.asBuffer().region(0, bytes, NATIVE_BYTE_ORDER);
assertEquals(buf.getByteOrder(), NATIVE_BYTE_ORDER);
bb.order(NON_NATIVE_BYTE_ORDER);
diff --git a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/UtilTest.java b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/UtilTest.java
index 7a34b9c..bfe30ad 100644
--- a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/UtilTest.java
+++ b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/UtilTest.java
@@ -23,7 +23,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
import static org.apache.datasketches.memory.internal.Util.getResourceBytes;
import static org.apache.datasketches.memory.internal.Util.getResourceFile;
import static org.testng.Assert.assertTrue;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
index 4f6a376..bf0127f 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
@@ -22,8 +22,6 @@ package org.apache.datasketches.memory;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import org.apache.datasketches.memory.internal.BaseStateImpl;
-
/**
* Keeps key configuration state for Memory and Buffer plus some common static variables
* and check methods.
@@ -91,6 +89,7 @@ public interface BaseState {
/**
* Returns true if the backing resource is direct (off-heap) memory.
* This is the case for allocated direct memory, memory mapped files,
+ * or from a wrapped ByteBuffer that was allocated direct.
* @return true if the backing resource is direct (off-heap) memory.
*/
boolean isDirect();
@@ -179,46 +178,6 @@ public interface BaseState {
@Deprecated
long getCumulativeOffset(long offsetBytes);
- /**
- * Gets the current size of active direct memory allocated.
- * @return the current size of active direct memory allocated.
- * @deprecated no longer supported for Java 17 versions.
- */
- @Deprecated
- static long getCurrentDirectMemoryAllocated() {
- return BaseStateImpl.getCurrentDirectMemoryAllocated();
- }
-
- /**
- * Gets the current number of active direct memory allocations.
- * @return the current number of active direct memory allocations.
- * @deprecated no longer supported for Java 17 versions.
- */
- @Deprecated
- static long getCurrentDirectMemoryAllocations() {
- return BaseStateImpl.getCurrentDirectMemoryAllocations();
- }
-
- /**
- * Gets the current size of active direct memory map allocated.
- * @return the current size of active direct memory map allocated.
- * @deprecated no longer supported for Java 17 versions.
- */
- @Deprecated
- static long getCurrentDirectMemoryMapAllocated() {
- return BaseStateImpl.getCurrentDirectMemoryMapAllocated();
- }
-
- /**
- * Gets the current number of active direct memory map allocations.
- * @return the current number of active direct memory map allocations.
- * @deprecated no longer supported for Java 17 versions.
- */
- @Deprecated
- static long getCurrentDirectMemoryMapAllocations() {
- return BaseStateImpl.getCurrentDirectMemoryMapAllocations();
- }
-
/**
* Returns the offset of address zero of this object relative to the address zero of the
* backing resource but not including the size of any Java object header.
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/Memory.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/Memory.java
index 414cdc9..9f674eb 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/Memory.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/Memory.java
@@ -19,7 +19,8 @@
package org.apache.datasketches.memory;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.apache.datasketches.memory.internal.Util.negativeCheck;
import java.io.File;
@@ -31,7 +32,6 @@ import java.util.Objects;
import org.apache.datasketches.memory.internal.BaseWritableMemoryImpl;
import org.apache.datasketches.memory.internal.Prim;
-import org.apache.datasketches.memory.internal.UnsafeUtil;
/**
* Defines the read-only API for offset access to a resource.
@@ -195,7 +195,7 @@ public interface Memory extends BaseState {
Objects.requireNonNull(byteOrder, "byteOrder must be non-null");
negativeCheck(offsetBytes, "offsetBytes");
negativeCheck(lengthBytes, "lengthBytes");
- UnsafeUtil.checkBounds(offsetBytes, lengthBytes, array.length);
+ checkBounds(offsetBytes, lengthBytes, array.length);
return BaseWritableMemoryImpl.wrapHeapArray(array, 0, lengthBytes, true, NATIVE_BYTE_ORDER, null);
}
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
index 965ae16..bc5671e 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableBuffer.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java
index 47b4684..db987c4 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/WritableMemory.java
@@ -19,7 +19,8 @@
package org.apache.datasketches.memory;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.apache.datasketches.memory.internal.Util.negativeCheck;
import java.io.File;
@@ -29,7 +30,6 @@ import java.util.Objects;
import org.apache.datasketches.memory.internal.BaseWritableMemoryImpl;
import org.apache.datasketches.memory.internal.Prim;
-import org.apache.datasketches.memory.internal.UnsafeUtil;
/**
* Defines the writable API for offset access to a resource.
@@ -318,7 +318,7 @@ public interface WritableMemory extends Memory {
Objects.requireNonNull(byteOrder, "byteOrder must be non-null");
negativeCheck(offsetBytes, "offsetBytes");
negativeCheck(lengthBytes, "lengthBytes");
- UnsafeUtil.checkBounds(offsetBytes, lengthBytes, array.length);
+ checkBounds(offsetBytes, lengthBytes, array.length);
return BaseWritableMemoryImpl.wrapHeapArray(array, offsetBytes, lengthBytes, false, byteOrder, memReqSvr);
}
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirect.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirect.java
index ae649ef..64fe4fa 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirect.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirect.java
@@ -19,6 +19,7 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.reachabilityFence;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import java.util.logging.Logger;
@@ -79,7 +80,7 @@ final class AllocateDirect {
}
return false;
} finally {
- BaseStateImpl.reachabilityFence(this);
+ reachabilityFence(this);
}
}
@@ -99,8 +100,6 @@ final class AllocateDirect {
private final StepBoolean valid = new StepBoolean(true); //only place for this
Deallocator(final long nativeAddress, final long allocationSize, final long capacity) {
- BaseStateImpl.currentDirectMemoryAllocations_.incrementAndGet();
- BaseStateImpl.currentDirectMemoryAllocated_.addAndGet(capacity);
this.nativeAddress = nativeAddress;
this.allocationSize = allocationSize;
this.capacity = capacity;
@@ -124,8 +123,6 @@ final class AllocateDirect {
}
unsafe.freeMemory(nativeAddress);
NioBits.unreserveMemory(allocationSize, capacity);
- BaseStateImpl.currentDirectMemoryAllocations_.decrementAndGet();
- BaseStateImpl.currentDirectMemoryAllocated_.addAndGet(-capacity);
return true;
}
return false;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirectMap.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirectMap.java
index 6126fac..a69f958 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirectMap.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/AllocateDirectMap.java
@@ -19,6 +19,7 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.reachabilityFence;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import java.io.File;
@@ -170,7 +171,7 @@ class AllocateDirectMap implements Map {
} catch (final Exception e) {
throw new MemoryCloseException(resource);
} finally {
- BaseStateImpl.reachabilityFence(this);
+ reachabilityFence(this);
}
}
@@ -260,8 +261,6 @@ class AllocateDirectMap implements Map {
Deallocator(final long nativeBaseOffset, final long capacityBytes,
final RandomAccessFile raf) {
- BaseStateImpl.currentDirectMemoryMapAllocations_.incrementAndGet();
- BaseStateImpl.currentDirectMemoryMapAllocated_.addAndGet(capacityBytes);
myRaf = raf;
assert myRaf != null;
myFc = myRaf.getChannel();
@@ -286,13 +285,7 @@ class AllocateDirectMap implements Map {
// Warn about non-deterministic resource cleanup.
LOG.warning("A WritableMapHandleImpl was not closed manually");
}
- try {
- unmap();
- }
- finally {
- BaseStateImpl.currentDirectMemoryMapAllocations_.decrementAndGet();
- BaseStateImpl.currentDirectMemoryMapAllocated_.addAndGet(-myCapacity);
- }
+ unmap();
return true;
}
return false;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
index 83b8f64..54bcc25 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
@@ -19,16 +19,10 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.assertBounds;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.checkBounds;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.datasketches.memory.BaseState;
import org.apache.datasketches.memory.MemoryRequestServer;
@@ -42,12 +36,18 @@ import org.apache.datasketches.memory.ReadOnlyException;
*/
@SuppressWarnings("restriction")
public abstract class BaseStateImpl implements BaseState {
-
- //Monitoring
- static final AtomicLong currentDirectMemoryAllocations_ = new AtomicLong();
- static final AtomicLong currentDirectMemoryAllocated_ = new AtomicLong();
- static final AtomicLong currentDirectMemoryMapAllocations_ = new AtomicLong();
- static final AtomicLong currentDirectMemoryMapAllocated_ = new AtomicLong();
+ static final String JDK; //must be at least "1.8"
+ static final int JDK_MAJOR; //8, 11, 17, etc
+
+ //Used to convert "type" to bytes: bytes = longs << LONG_SHIFT
+ static final int BOOLEAN_SHIFT = 0;
+ static final int BYTE_SHIFT = 0;
+ static final long SHORT_SHIFT = 1;
+ static final long CHAR_SHIFT = 1;
+ static final long INT_SHIFT = 2;
+ static final long LONG_SHIFT = 3;
+ static final long FLOAT_SHIFT = 2;
+ static final long DOUBLE_SHIFT = 3;
//class type IDs. Do not change the bit orders
//The first 3 bits are set dynamically
@@ -56,12 +56,12 @@ public abstract class BaseStateImpl implements BaseState {
static final int REGION = 2;
static final int DUPLICATE = 4;
- //The following 4 bits are set by the 16 leaf nodes
+ //The following 5 bits are set by the 16 leaf nodes
// 000X X000
static final int HEAP = 0;
static final int DIRECT = 1 << 3;
static final int MAP = 2 << 3;
- static final int BYTEBUF = 3 << 3;
+
// 00X0 0000
static final int NATIVE = 0;
@@ -71,6 +71,26 @@ public abstract class BaseStateImpl implements BaseState {
static final int MEMORY = 0;
static final int BUFFER = 1 << 6;
+ // X000 0000
+ static final int BYTEBUF = 1 << 7;
+
+ /**
+ * The java line separator character as a String.
+ */
+ static final String LS = System.getProperty("line.separator");
+
+ public static final ByteOrder NATIVE_BYTE_ORDER = ByteOrder.nativeOrder();
+
+ static final ByteOrder NON_NATIVE_BYTE_ORDER =
+ (NATIVE_BYTE_ORDER == ByteOrder.LITTLE_ENDIAN) ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+
+ static {
+ final String jdkVer = System.getProperty("java.version");
+ final int[] p = parseJavaVersion(jdkVer);
+ JDK = p[0] + "." + p[1];
+ JDK_MAJOR = (p[0] == 1) ? p[1] : p[0];
+ }
+
private final long capacityBytes_;
/**
@@ -81,7 +101,7 @@ public abstract class BaseStateImpl implements BaseState {
private final long cumBaseOffset_;
/**
- *
+ * Constructor
* @param unsafeObj The primitive backing array. It may be null. Used by Unsafe calls.
* @param nativeBaseOffset The off-heap memory address including DirectByteBuffer split offsets.
* @param regionOffset This offset defines address zero of this object (usually a region)
@@ -99,9 +119,44 @@ public abstract class BaseStateImpl implements BaseState {
: UnsafeUtil.getArrayBaseOffset(unsafeObj.getClass()));
}
- @Override
- public final ByteOrder getByteOrder() {
- return isNonNativeType() ? NON_NATIVE_BYTE_ORDER : NATIVE_BYTE_ORDER;
+ //**STATIC METHODS*****************************************
+
+ /**
+ * Assert the requested offset and length against the allocated size.
+ * The invariants equation is: {@code 0 <= reqOff <= reqLen <= reqOff + reqLen <= allocSize}.
+ * If this equation is violated and assertions are enabled, an {@link AssertionError} will
+ * be thrown.
+ * @param reqOff the requested offset
+ * @param reqLen the requested length
+ * @param allocSize the allocated size.
+ */
+ public static void assertBounds(final long reqOff, final long reqLen, final long allocSize) {
+ assert ((reqOff | reqLen | (reqOff + reqLen) | (allocSize - (reqOff + reqLen))) >= 0) :
+ "reqOffset: " + reqOff + ", reqLength: " + reqLen
+ + ", (reqOff + reqLen): " + (reqOff + reqLen) + ", allocSize: " + allocSize;
+ }
+
+ /**
+ * Check the requested offset and length against the allocated size.
+ * The invariants equation is: {@code 0 <= reqOff <= reqLen <= reqOff + reqLen <= allocSize}.
+ * If this equation is violated an {@link IllegalArgumentException} will be thrown.
+ * @param reqOff the requested offset
+ * @param reqLen the requested length
+ * @param allocSize the allocated size.
+ */
+ public static void checkBounds(final long reqOff, final long reqLen, final long allocSize) {
+ if ((reqOff | reqLen | (reqOff + reqLen) | (allocSize - (reqOff + reqLen))) < 0) {
+ throw new IllegalArgumentException(
+ "reqOffset: " + reqOff + ", reqLength: " + reqLen
+ + ", (reqOff + reqLen): " + (reqOff + reqLen) + ", allocSize: " + allocSize);
+ }
+ }
+
+ static void checkJavaVersion(final String jdkVer, final int p0, final int p1 ) {
+ boolean ok = ((p0 == 1) && (p1 == 8)) || (p0 == 8) || (p0 == 11);
+ if (!ok) { throw new IllegalArgumentException(
+ "Unsupported JDK Major Version. It must be one of 1.8, 8, 11: " + jdkVer);
+ }
}
/**
@@ -109,17 +164,191 @@ public abstract class BaseStateImpl implements BaseState {
* @param byteOrder the given byte order
* @return true if the given byteOrder is the same as the native byte order.
*/
- public static boolean isNativeByteOrder(final ByteOrder byteOrder) {
+ static boolean isNativeByteOrder(final ByteOrder byteOrder) {
if (byteOrder == null) {
throw new IllegalArgumentException("ByteOrder parameter cannot be null.");
}
return NATIVE_BYTE_ORDER == byteOrder;
}
+ /**
+ * Returns first two number groups of the java version string.
+ * @param jdkVer the java version string from System.getProperty("java.version").
+ * @return first two number groups of the java version string.
+ * @throws IllegalArgumentException for an improper Java version string.
+ */
+ static int[] parseJavaVersion(final String jdkVer) {
+ final int p0, p1;
+ try {
+ String[] parts = jdkVer.trim().split("^0-9\\.");//grab only number groups and "."
+ parts = parts[0].split("\\."); //split out the number groups
+ p0 = Integer.parseInt(parts[0]); //the first number group
+ p1 = (parts.length > 1) ? Integer.parseInt(parts[1]) : 0; //2nd number group, or 0
+ } catch (final NumberFormatException | ArrayIndexOutOfBoundsException e) {
+ throw new IllegalArgumentException("Improper Java -version string: " + jdkVer + "\n" + e);
+ }
+ checkJavaVersion(jdkVer, p0, p1);
+ return new int[] {p0, p1};
+ }
+
+ //REACHABILITY FENCE
+ static void reachabilityFence(final Object obj) { }
+
+ final static byte setReadOnlyType(final byte type, final boolean readOnly) {
+ return (byte)((type & ~1) | (readOnly ? READONLY : 0));
+ }
+
+ /**
+ * Returns a formatted hex string of an area of this object.
+ * Used primarily for testing.
+ * @param state the BaseStateImpl
+ * @param preamble a descriptive header
+ * @param offsetBytes offset bytes relative to the MemoryImpl start
+ * @param lengthBytes number of bytes to convert to a hex string
+ * @return a formatted hex string in a human readable array
+ */
+ static final String toHex(final BaseStateImpl state, final String preamble, final long offsetBytes,
+ final int lengthBytes) {
+ final long capacity = state.getCapacity();
+ checkBounds(offsetBytes, lengthBytes, capacity);
+ final StringBuilder sb = new StringBuilder();
+ final Object uObj = state.getUnsafeObject();
+ final String uObjStr;
+ final long uObjHeader;
+ if (uObj == null) {
+ uObjStr = "null";
+ uObjHeader = 0;
+ } else {
+ uObjStr = uObj.getClass().getSimpleName() + ", " + (uObj.hashCode() & 0XFFFFFFFFL);
+ uObjHeader = UnsafeUtil.getArrayBaseOffset(uObj.getClass());
+ }
+ final ByteBuffer bb = state.getByteBuffer();
+ final String bbStr = bb == null ? "null"
+ : bb.getClass().getSimpleName() + ", " + (bb.hashCode() & 0XFFFFFFFFL);
+ final MemoryRequestServer memReqSvr = state.getMemoryRequestServer();
+ final String memReqStr = memReqSvr != null
+ ? memReqSvr.getClass().getSimpleName() + ", " + (memReqSvr.hashCode() & 0XFFFFFFFFL)
+ : "null";
+ final long cumBaseOffset = state.getCumulativeOffset();
+ sb.append(preamble).append(LS);
+ sb.append("UnsafeObj, hashCode : ").append(uObjStr).append(LS);
+ sb.append("UnsafeObjHeader : ").append(uObjHeader).append(LS);
+ sb.append("ByteBuf, hashCode : ").append(bbStr).append(LS);
+ sb.append("RegionOffset : ").append(state.getRegionOffset()).append(LS);
+ sb.append("Capacity : ").append(capacity).append(LS);
+ sb.append("CumBaseOffset : ").append(cumBaseOffset).append(LS);
+ sb.append("MemReq, hashCode : ").append(memReqStr).append(LS);
+ sb.append("Valid : ").append(state.isValid()).append(LS);
+ sb.append("Read Only : ").append(state.isReadOnly()).append(LS);
+ sb.append("Type Byte Order : ").append(state.getByteOrder().toString()).append(LS);
+ sb.append("Native Byte Order : ").append(NATIVE_BYTE_ORDER.toString()).append(LS);
+ sb.append("JDK Runtime Version : ").append(JDK).append(LS);
+ //Data detail
+ sb.append("Data, littleEndian : 0 1 2 3 4 5 6 7");
+
+ for (long i = 0; i < lengthBytes; i++) {
+ final int b = unsafe.getByte(uObj, cumBaseOffset + offsetBytes + i) & 0XFF;
+ if (i % 8 == 0) { //row header
+ sb.append(String.format("%n%20s: ", offsetBytes + i));
+ }
+ sb.append(String.format("%02x ", b));
+ }
+ sb.append(LS);
+
+ return sb.toString();
+ }
+
+ /**
+ * Decodes the resource type. This is primarily for debugging.
+ * @param typeId the given typeId
+ * @return a human readable string.
+ */
+ public static final String typeDecode(final int typeId) {
+ final StringBuilder sb = new StringBuilder();
+ final int group1 = typeId & 0x7;
+ switch (group1) { // 0000 0XXX
+ case 0 : sb.append("Writable:\t"); break;
+ case 1 : sb.append("ReadOnly:\t"); break;
+ case 2 : sb.append("Writable:\tRegion:\t"); break;
+ case 3 : sb.append("ReadOnly:\tRegion:\t"); break;
+ case 4 : sb.append("Writable:\tDuplicate:\t"); break;
+ case 5 : sb.append("ReadOnly:\tDuplicate:\t"); break;
+ case 6 : sb.append("Writable:\tRegion:\tDuplicate:\t"); break;
+ case 7 : sb.append("ReadOnly:\tRegion:\tDuplicate:\t"); break;
+ default: break;
+ }
+ final int group2 = (typeId >>> 3) & 0x3;
+ switch (group2) { // 000X X000
+ case 0 : sb.append("Heap:\t"); break;
+ case 1 : sb.append("Direct:\t"); break;
+ case 2 : sb.append("Map:\t"); break;
+ case 3 : sb.append("Direct:\tMap:\t"); break;
+ default: break;
+ }
+ final int group3 = (typeId >>> 5) & 0x1;
+ switch (group3) { // 00X0 0000
+ case 0 : sb.append("NativeOrder:\t"); break;
+ case 1 : sb.append("NonNativeOrder:\t"); break;
+ default: break;
+ }
+ final int group4 = (typeId >>> 6) & 0x1;
+ switch (group4) { // 0X00 0000
+ case 0 : sb.append("Memory:\t"); break;
+ case 1 : sb.append("Buffer:\t"); break;
+ default: break;
+ }
+ final int group5 = (typeId >>> 7) & 0x1;
+ switch (group5) { // X000 0000
+ case 0 : sb.append(""); break;
+ case 1 : sb.append("ByteBuffer"); break;
+ default: break;
+ }
+ return sb.toString();
+ }
+
+ //**NON STATIC METHODS*****************************************
+
+ final void assertValid() {
+ assert isValid() : "MemoryImpl not valid.";
+ }
+
+ final void assertValidAndBoundsForRead(final long offsetBytes, final long lengthBytes) {
+ assertValid();
+ // capacityBytes_ is intentionally read directly instead of calling getCapacity()
+ // because the later can make JVM to not inline the assert code path (and entirely remove it)
+ // even though it does nothing in production code path.
+ assertBounds(offsetBytes, lengthBytes, capacityBytes_);
+ }
+
+ final void assertValidAndBoundsForWrite(final long offsetBytes, final long lengthBytes) {
+ assertValid();
+ // capacityBytes_ is intentionally read directly instead of calling getCapacity()
+ // because the later can make JVM to not inline the assert code path (and entirely remove it)
+ // even though it does nothing in production code path.
+ assertBounds(offsetBytes, lengthBytes, capacityBytes_);
+ assert !isReadOnly() : "MemoryImpl is read-only.";
+ }
+
+ void checkValid() {
+ if (!isValid()) {
+ throw new IllegalStateException("MemoryImpl not valid.");
+ }
+ }
+
@Override
- public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
- final ByteOrder typeBO = getByteOrder();
- return typeBO == NATIVE_BYTE_ORDER && typeBO == byteOrder;
+ public final void checkValidAndBounds(final long offsetBytes, final long lengthBytes) {
+ checkValid();
+ //read capacityBytes_ directly to eliminate extra checkValid() call
+ checkBounds(offsetBytes, lengthBytes, capacityBytes_);
+ }
+
+ final void checkValidAndBoundsForWrite(final long offsetBytes, final long lengthBytes) {
+ checkValid();
+ //read capacityBytes_ directly to eliminate extra checkValid() call
+ checkBounds(offsetBytes, lengthBytes, capacityBytes_);
+ if (isReadOnly()) {
+ throw new ReadOnlyException("MemoryImpl is read-only.");
+ }
}
@Override
@@ -129,6 +358,11 @@ public abstract class BaseStateImpl implements BaseState {
return CompareAndCopy.equals(this, thisOffsetBytes, (BaseStateImpl) that, thatOffsetBytes, lengthBytes);
}
+ @Override
+ public final ByteOrder getByteOrder() {
+ return isNonNativeType() ? NON_NATIVE_BYTE_ORDER : NATIVE_BYTE_ORDER;
+ }
+
//Overridden by ByteBuffer Leafs
@Override
public ByteBuffer getByteBuffer() {
@@ -190,26 +424,29 @@ public abstract class BaseStateImpl implements BaseState {
return getUnsafeObject() != null;
}
+ @Override
+ public final boolean hasByteBuffer() {
+ assertValid();
+ return (getTypeId() & BYTEBUF) > 0;
+ }
+
@Override
public final int hashCode() {
return (int) xxHash64(0, capacityBytes_, 0); //xxHash64() calls checkValid()
}
- @Override
- public final long xxHash64(final long offsetBytes, final long lengthBytes, final long seed) {
- checkValid();
- return XxHash64.hash(getUnsafeObject(), cumBaseOffset_ + offsetBytes, lengthBytes, seed);
+ final boolean isBBType() {
+ return (getTypeId() & BYTEBUF) > 0;
}
- @Override
- public final long xxHash64(final long in, final long seed) {
- return XxHash64.hash(in, seed);
+ final boolean isBufferType() {
+ return (getTypeId() & BUFFER) > 0;
}
@Override
- public final boolean hasByteBuffer() {
- assertValid();
- return getByteBuffer() != null;
+ public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
+ final ByteOrder typeBO = getByteOrder();
+ return typeBO == NATIVE_BYTE_ORDER && typeBO == byteOrder;
}
@Override
@@ -217,157 +454,62 @@ public abstract class BaseStateImpl implements BaseState {
return getUnsafeObject() == null;
}
- @Override
- public final boolean isReadOnly() {
- assertValid();
- return isReadOnlyType();
- }
-
- @Override
- public final boolean isSameResource(final Object that) {
- checkValid();
- if (that == null) { return false; }
- final BaseStateImpl that1 = (BaseStateImpl) that;
- that1.checkValid();
- if (this == that1) { return true; }
-
- return cumBaseOffset_ == that1.cumBaseOffset_
- && capacityBytes_ == that1.capacityBytes_
- && getUnsafeObject() == that1.getUnsafeObject()
- && getByteBuffer() == that1.getByteBuffer();
+ final boolean isDirectType() {
+ return (getTypeId() >>> 3 & 3) == 1;
}
- //Overridden by Direct and Map leafs
- @Override
- public boolean isValid() {
- return true;
+ final boolean isDuplicateType() {
+ return (getTypeId() & DUPLICATE) > 0;
}
- //ASSERTS AND CHECKS
- final void assertValid() {
- assert isValid() : "MemoryImpl not valid.";
+ final boolean isHeapType() {
+ return (getTypeId() >>> 3 & 3) == 0;
}
- void checkValid() {
- if (!isValid()) {
- throw new IllegalStateException("MemoryImpl not valid.");
- }
+ final boolean isMapType() {
+ return (getTypeId() >>> 3 & 3) == 2;
}
- final void assertValidAndBoundsForRead(final long offsetBytes, final long lengthBytes) {
- assertValid();
- // capacityBytes_ is intentionally read directly instead of calling getCapacity()
- // because the later can make JVM to not inline the assert code path (and entirely remove it)
- // even though it does nothing in production code path.
- assertBounds(offsetBytes, lengthBytes, capacityBytes_);
+ final boolean isMemoryType() {
+ return (getTypeId() & BUFFER) == 0;
}
- final void assertValidAndBoundsForWrite(final long offsetBytes, final long lengthBytes) {
- assertValid();
- // capacityBytes_ is intentionally read directly instead of calling getCapacity()
- // because the later can make JVM to not inline the assert code path (and entirely remove it)
- // even though it does nothing in production code path.
- assertBounds(offsetBytes, lengthBytes, capacityBytes_);
- assert !isReadOnly() : "MemoryImpl is read-only.";
+ final boolean isNonNativeType() {
+ return (getTypeId() & NONNATIVE) > 0;
}
@Override
- public final void checkValidAndBounds(final long offsetBytes, final long lengthBytes) {
- checkValid();
- //read capacityBytes_ directly to eliminate extra checkValid() call
- checkBounds(offsetBytes, lengthBytes, capacityBytes_);
- }
-
- final void checkValidAndBoundsForWrite(final long offsetBytes, final long lengthBytes) {
- checkValid();
- //read capacityBytes_ directly to eliminate extra checkValid() call
- checkBounds(offsetBytes, lengthBytes, capacityBytes_);
- if (isReadOnly()) {
- throw new ReadOnlyException("MemoryImpl is read-only.");
- }
+ public final boolean isReadOnly() {
+ assertValid();
+ return isReadOnlyType();
}
- //TYPE ID Management
final boolean isReadOnlyType() {
return (getTypeId() & READONLY) > 0;
}
- final static byte setReadOnlyType(final byte type, final boolean readOnly) {
- return (byte)((type & ~1) | (readOnly ? READONLY : 0));
- }
-
final boolean isRegionType() {
return (getTypeId() & REGION) > 0;
}
- final boolean isDuplicateType() {
- return (getTypeId() & DUPLICATE) > 0;
- }
-
- //The following are set by the leaf nodes
- final boolean isBufferType() {
- return (getTypeId() & BUFFER) > 0;
- }
-
- final boolean isNonNativeType() {
- return (getTypeId() & NONNATIVE) > 0;
- }
-
- final boolean isHeapType() {
- return (getTypeId() >>> 3 & 3) == 0;
- }
-
- final boolean isDirectType() {
- return (getTypeId() >>> 3 & 3) == 1;
- }
-
- final boolean isMapType() {
- return (getTypeId() >>> 3 & 3) == 2;
- }
+ @Override
+ public final boolean isSameResource(final Object that) {
+ checkValid();
+ if (that == null) { return false; }
+ final BaseStateImpl that1 = (BaseStateImpl) that;
+ that1.checkValid();
+ if (this == that1) { return true; }
- final boolean isBBType() {
- return (getTypeId() >>> 3 & 3) == 3;
+ return cumBaseOffset_ == that1.cumBaseOffset_
+ && capacityBytes_ == that1.capacityBytes_
+ && getUnsafeObject() == that1.getUnsafeObject()
+ && getByteBuffer() == that1.getByteBuffer();
}
- /**
- * Decodes the resource type. This is primarily for debugging.
- * @param typeId the given typeId
- * @return a human readable string.
- */
- public static final String typeDecode(final int typeId) {
- final StringBuilder sb = new StringBuilder();
- final int group1 = typeId & 0x7;
- switch (group1) {
- case 1 : sb.append("ReadOnly, "); break;
- case 2 : sb.append("Region, "); break;
- case 3 : sb.append("ReadOnly Region, "); break;
- case 4 : sb.append("Duplicate, "); break;
- case 5 : sb.append("ReadOnly Duplicate, "); break;
- case 6 : sb.append("Region Duplicate, "); break;
- case 7 : sb.append("ReadOnly Region Duplicate, "); break;
- default: break;
- }
- final int group2 = (typeId >>> 3) & 0x3;
- switch (group2) {
- case 0 : sb.append("Heap, "); break;
- case 1 : sb.append("Direct, "); break;
- case 2 : sb.append("Map, "); break;
- case 3 : sb.append("ByteBuffer, "); break;
- default: break;
- }
- final int group3 = (typeId >>> 5) & 0x1;
- switch (group3) {
- case 0 : sb.append("Native, "); break;
- case 1 : sb.append("NonNative, "); break;
- default: break;
- }
- final int group4 = (typeId >>> 6) & 0x1;
- switch (group4) {
- case 0 : sb.append("Memory"); break;
- case 1 : sb.append("Buffer"); break;
- default: break;
- }
- return sb.toString();
+ //Overridden by Direct and Map leafs
+ @Override
+ public boolean isValid() {
+ return true;
}
@Override
@@ -385,101 +527,15 @@ public abstract class BaseStateImpl implements BaseState {
return toHex(this, sb.toString(), offsetBytes, lengthBytes);
}
- /**
- * Returns a formatted hex string of an area of this object.
- * Used primarily for testing.
- * @param state the BaseStateImpl
- * @param preamble a descriptive header
- * @param offsetBytes offset bytes relative to the MemoryImpl start
- * @param lengthBytes number of bytes to convert to a hex string
- * @return a formatted hex string in a human readable array
- */
- static final String toHex(final BaseStateImpl state, final String preamble, final long offsetBytes,
- final int lengthBytes) {
- final long capacity = state.getCapacity();
- UnsafeUtil.checkBounds(offsetBytes, lengthBytes, capacity);
- final StringBuilder sb = new StringBuilder();
- final Object uObj = state.getUnsafeObject();
- final String uObjStr;
- final long uObjHeader;
- if (uObj == null) {
- uObjStr = "null";
- uObjHeader = 0;
- } else {
- uObjStr = uObj.getClass().getSimpleName() + ", " + (uObj.hashCode() & 0XFFFFFFFFL);
- uObjHeader = UnsafeUtil.getArrayBaseOffset(uObj.getClass());
- }
- final ByteBuffer bb = state.getByteBuffer();
- final String bbStr = bb == null ? "null"
- : bb.getClass().getSimpleName() + ", " + (bb.hashCode() & 0XFFFFFFFFL);
- final MemoryRequestServer memReqSvr = state.getMemoryRequestServer();
- final String memReqStr = memReqSvr != null
- ? memReqSvr.getClass().getSimpleName() + ", " + (memReqSvr.hashCode() & 0XFFFFFFFFL)
- : "null";
- final long cumBaseOffset = state.getCumulativeOffset();
- sb.append(preamble).append(LS);
- sb.append("UnsafeObj, hashCode : ").append(uObjStr).append(LS);
- sb.append("UnsafeObjHeader : ").append(uObjHeader).append(LS);
- sb.append("ByteBuf, hashCode : ").append(bbStr).append(LS);
- sb.append("RegionOffset : ").append(state.getRegionOffset()).append(LS);
- sb.append("Capacity : ").append(capacity).append(LS);
- sb.append("CumBaseOffset : ").append(cumBaseOffset).append(LS);
- sb.append("MemReq, hashCode : ").append(memReqStr).append(LS);
- sb.append("Valid : ").append(state.isValid()).append(LS);
- sb.append("Read Only : ").append(state.isReadOnly()).append(LS);
- sb.append("Type Byte Order : ").append(state.getByteOrder().toString()).append(LS);
- sb.append("Native Byte Order : ").append(NATIVE_BYTE_ORDER.toString()).append(LS);
- sb.append("JDK Runtime Version : ").append(UnsafeUtil.JDK).append(LS);
- //Data detail
- sb.append("Data, littleEndian : 0 1 2 3 4 5 6 7");
-
- for (long i = 0; i < lengthBytes; i++) {
- final int b = unsafe.getByte(uObj, cumBaseOffset + offsetBytes + i) & 0XFF;
- if (i % 8 == 0) { //row header
- sb.append(String.format("%n%20s: ", offsetBytes + i));
- }
- sb.append(String.format("%02x ", b));
- }
- sb.append(LS);
-
- return sb.toString();
- }
-
- //MONITORING
-
- /**
- * Gets the current number of active direct memory allocations.
- * @return the current number of active direct memory allocations.
- */
- public static final long getCurrentDirectMemoryAllocations() {
- return BaseStateImpl.currentDirectMemoryAllocations_.get();
- }
-
- /**
- * Gets the current size of active direct memory allocated.
- * @return the current size of active direct memory allocated.
- */
- public static final long getCurrentDirectMemoryAllocated() {
- return BaseStateImpl.currentDirectMemoryAllocated_.get();
- }
-
- /**
- * Gets the current number of active direct memory map allocations.
- * @return the current number of active direct memory map allocations.
- */
- public static final long getCurrentDirectMemoryMapAllocations() {
- return BaseStateImpl.currentDirectMemoryMapAllocations_.get();
+ @Override
+ public final long xxHash64(final long offsetBytes, final long lengthBytes, final long seed) {
+ checkValid();
+ return XxHash64.hash(getUnsafeObject(), cumBaseOffset_ + offsetBytes, lengthBytes, seed);
}
- /**
- * Gets the current size of active direct memory map allocated.
- * @return the current size of active direct memory map allocated.
- */
- public static final long getCurrentDirectMemoryMapAllocated() {
- return BaseStateImpl.currentDirectMemoryMapAllocated_.get();
+ @Override
+ public final long xxHash64(final long in, final long seed) {
+ return XxHash64.hash(in, seed);
}
- //REACHABILITY FENCE
- static void reachabilityFence(final Object obj) { }
-
}
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
index 37d8fbf..ea8daef 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
@@ -27,7 +27,6 @@ import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_CHAR_INDE
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.checkBounds;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import java.nio.ByteBuffer;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
index 1e75d7d..818ab53 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
@@ -27,7 +27,6 @@ import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_CHAR_INDE
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.checkBounds;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import static org.apache.datasketches.memory.internal.Util.negativeCheck;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
index 225a18b..5be228d 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
@@ -19,13 +19,13 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.checkBounds;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.CHAR_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.DOUBLE_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.FLOAT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.INT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LONG_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.SHORT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import static org.apache.datasketches.memory.internal.Util.UNSAFE_COPY_THRESHOLD_BYTES;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
index 2dd1ce2..64b5841 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
@@ -27,13 +27,6 @@ import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_FLOAT_IND
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_BASE_OFFSET;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.checkBounds;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import org.apache.datasketches.memory.WritableBuffer;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
index c16423e..4603158 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
@@ -28,13 +28,6 @@ import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_BASE_
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_BASE_OFFSET;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.checkBounds;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import org.apache.datasketches.memory.WritableMemory;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
index a8203ba..5fd033d 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
@@ -21,12 +21,6 @@ package org.apache.datasketches.memory.internal;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_DOUBLE_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_FLOAT_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import org.apache.datasketches.memory.WritableBuffer;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
index de74333..bbf2dc3 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
@@ -22,12 +22,6 @@ package org.apache.datasketches.memory.internal;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_DOUBLE_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_FLOAT_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
import org.apache.datasketches.memory.WritableMemory;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Prim.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Prim.java
index 411be5b..ca8c2ff 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Prim.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Prim.java
@@ -19,6 +19,14 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.BOOLEAN_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.BYTE_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.CHAR_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.DOUBLE_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.FLOAT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.INT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LONG_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.SHORT_SHIFT;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_BOOLEAN_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_BOOLEAN_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_BYTE_BASE_OFFSET;
@@ -33,19 +41,9 @@ import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_BASE_
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_OBJECT_BASE_OFFSET;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_OBJECT_INDEX_SCALE;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.BOOLEAN_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.BYTE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.OBJECT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
+
/**
* Creates easy to access association between the major Unsafe constants.
@@ -60,8 +58,7 @@ public enum Prim {
INT(ARRAY_INT_BASE_OFFSET, ARRAY_INT_INDEX_SCALE, INT_SHIFT),
LONG(ARRAY_LONG_BASE_OFFSET, ARRAY_LONG_INDEX_SCALE, LONG_SHIFT),
FLOAT(ARRAY_FLOAT_BASE_OFFSET, ARRAY_FLOAT_INDEX_SCALE, FLOAT_SHIFT),
- DOUBLE(ARRAY_DOUBLE_BASE_OFFSET, ARRAY_DOUBLE_INDEX_SCALE, DOUBLE_SHIFT),
- OBJECT(ARRAY_OBJECT_BASE_OFFSET, ARRAY_OBJECT_INDEX_SCALE, OBJECT_SHIFT);
+ DOUBLE(ARRAY_DOUBLE_BASE_OFFSET, ARRAY_DOUBLE_INDEX_SCALE, DOUBLE_SHIFT);
private final long arrBaseOff_;
private final long arrIdxScale_;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/UnsafeUtil.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/UnsafeUtil.java
index 8b391f2..0731c98 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/UnsafeUtil.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/UnsafeUtil.java
@@ -32,8 +32,6 @@ import sun.misc.Unsafe;
@SuppressWarnings({"restriction"})
public final class UnsafeUtil {
public static final Unsafe unsafe;
- public static final String JDK; //must be at least "1.8"
- public static final int JDK_MAJOR; //8, 9, 10, 11, 12, etc
//not an indicator of whether compressed references are used.
public static final int ADDRESS_SIZE;
@@ -50,7 +48,6 @@ public final class UnsafeUtil {
public static final long ARRAY_LONG_BASE_OFFSET;
public static final long ARRAY_FLOAT_BASE_OFFSET;
public static final long ARRAY_DOUBLE_BASE_OFFSET;
- public static final long ARRAY_OBJECT_BASE_OFFSET;
//@formatter:off
@@ -65,18 +62,6 @@ public final class UnsafeUtil {
public static final long ARRAY_LONG_INDEX_SCALE = 8;
public static final long ARRAY_FLOAT_INDEX_SCALE = 4;
public static final long ARRAY_DOUBLE_INDEX_SCALE = 8;
- public static final long ARRAY_OBJECT_INDEX_SCALE; // varies, 4 or 8 depending on coop
-
- //Used to convert "type" to bytes: bytes = longs << LONG_SHIFT
- public static final int BOOLEAN_SHIFT = 0;
- public static final int BYTE_SHIFT = 0;
- public static final long SHORT_SHIFT = 1;
- public static final long CHAR_SHIFT = 1;
- public static final long INT_SHIFT = 2;
- public static final long LONG_SHIFT = 3;
- public static final long FLOAT_SHIFT = 2;
- public static final long DOUBLE_SHIFT = 3;
- public static final long OBJECT_SHIFT; // varies, 2 or 3 depending on coop
//@formatter:on
@@ -109,45 +94,10 @@ public final class UnsafeUtil {
ARRAY_LONG_BASE_OFFSET = unsafe.arrayBaseOffset(long[].class);
ARRAY_FLOAT_BASE_OFFSET = unsafe.arrayBaseOffset(float[].class);
ARRAY_DOUBLE_BASE_OFFSET = unsafe.arrayBaseOffset(double[].class);
- ARRAY_OBJECT_BASE_OFFSET = unsafe.arrayBaseOffset(Object[].class);
-
- ARRAY_OBJECT_INDEX_SCALE = unsafe.arrayIndexScale(Object[].class);
- OBJECT_SHIFT = ARRAY_OBJECT_INDEX_SCALE == 4 ? 2 : 3;
-
- final String jdkVer = System.getProperty("java.version");
- final int[] p = parseJavaVersion(jdkVer);
- JDK = p[0] + "." + p[1];
- JDK_MAJOR = (p[0] == 1) ? p[1] : p[0];
}
private UnsafeUtil() {}
- /**
- * Returns first two number groups of the java version string.
- * @param jdkVer the java version string from System.getProperty("java.version").
- * @return first two number groups of the java version string.
- */
- public static int[] parseJavaVersion(final String jdkVer) {
- final int p0, p1;
- try {
- String[] parts = jdkVer.trim().split("[^0-9\\.]");//grab only number groups and "."
- parts = parts[0].split("\\."); //split out the number groups
- p0 = Integer.parseInt(parts[0]); //the first number group
- p1 = (parts.length > 1) ? Integer.parseInt(parts[1]) : 0; //2nd number group, or 0
- } catch (final NumberFormatException | ArrayIndexOutOfBoundsException e) {
- throw new IllegalArgumentException("Improper Java -version string: " + jdkVer + "\n" + e);
- }
- //checkJavaVersion(jdkVer, p0, p1); //TODO Optional to omit this.
- return new int[] {p0, p1};
- }
-
- public static void checkJavaVersion(final String jdkVer, final int p0, final int p1) {
- if ( (p0 < 1) || ((p0 == 1) && (p1 < 8)) || (p0 > 13) ) {
- throw new IllegalArgumentException(
- "Unsupported JDK Major Version, must be one of 1.8, 8, 9, 10, 11, 12, 13: " + jdkVer);
- }
- }
-
public static long getFieldOffset(final Class<?> c, final String fieldName) {
try {
return unsafe.objectFieldOffset(c.getDeclaredField(fieldName));
@@ -180,41 +130,8 @@ public final class UnsafeUtil {
return ARRAY_SHORT_BASE_OFFSET;
} else if (c == char[].class) {
return ARRAY_CHAR_BASE_OFFSET;
- } else if (c == Object[].class) {
- return ARRAY_OBJECT_BASE_OFFSET;
} else {
return unsafe.arrayBaseOffset(c);
}
}
-
- /**
- * Assert the requested offset and length against the allocated size.
- * The invariants equation is: {@code 0 <= reqOff <= reqLen <= reqOff + reqLen <= allocSize}.
- * If this equation is violated and assertions are enabled, an {@link AssertionError} will
- * be thrown.
- * @param reqOff the requested offset
- * @param reqLen the requested length
- * @param allocSize the allocated size.
- */
- public static void assertBounds(final long reqOff, final long reqLen, final long allocSize) {
- assert ((reqOff | reqLen | (reqOff + reqLen) | (allocSize - (reqOff + reqLen))) >= 0) :
- "reqOffset: " + reqOff + ", reqLength: " + reqLen
- + ", (reqOff + reqLen): " + (reqOff + reqLen) + ", allocSize: " + allocSize;
- }
-
- /**
- * Check the requested offset and length against the allocated size.
- * The invariants equation is: {@code 0 <= reqOff <= reqLen <= reqOff + reqLen <= allocSize}.
- * If this equation is violated an {@link IllegalArgumentException} will be thrown.
- * @param reqOff the requested offset
- * @param reqLen the requested length
- * @param allocSize the allocated size.
- */
- public static void checkBounds(final long reqOff, final long reqLen, final long allocSize) {
- if ((reqOff | reqLen | (reqOff + reqLen) | (allocSize - (reqOff + reqLen))) < 0) {
- throw new IllegalArgumentException(
- "reqOffset: " + reqOff + ", reqLength: " + reqLen
- + ", (reqOff + reqLen): " + (reqOff + reqLen) + ", allocSize: " + allocSize);
- }
- }
}
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Util.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Util.java
index df4f18f..143cb44 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Util.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/Util.java
@@ -19,6 +19,10 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
+
import java.io.File;
import java.io.IOException;
import java.net.URI;
@@ -37,16 +41,6 @@ import org.apache.datasketches.memory.Memory;
*/
public final class Util {
- /**
- * The java line separator character as a String.
- */
- public static final String LS = System.getProperty("line.separator");
-
- //Byte Order related
- public static final ByteOrder NATIVE_BYTE_ORDER = ByteOrder.nativeOrder();
- public static final ByteOrder NON_NATIVE_BYTE_ORDER = NATIVE_BYTE_ORDER == ByteOrder.LITTLE_ENDIAN
- ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
-
/**
* Don't use sun.misc.Unsafe#copyMemory to copy blocks of memory larger than this
* threshold, because internally it doesn't have safepoint polls, that may cause long
@@ -61,8 +55,6 @@ public final class Util {
private Util() { }
- //Byte Order Related
-
/**
* Returns true if the given byteOrder is the same as the native byte order.
* @param byteOrder the given byte order
@@ -72,7 +64,7 @@ public final class Util {
if (byteOrder == null) {
throw new IllegalArgumentException("ByteOrder parameter cannot be null.");
}
- return ByteOrder.nativeOrder() == byteOrder;
+ return NATIVE_BYTE_ORDER == byteOrder;
}
/**
@@ -92,7 +84,7 @@ public final class Util {
*/
public static long binarySearchLongs(final Memory mem, final long fromLongIndex,
final long toLongIndex, final long key) {
- UnsafeUtil.checkBounds(fromLongIndex << 3, (toLongIndex - fromLongIndex) << 3, mem.getCapacity());
+ checkBounds(fromLongIndex << 3, (toLongIndex - fromLongIndex) << 3, mem.getCapacity());
long low = fromLongIndex;
long high = toLongIndex - 1L;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/XxHash64.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/XxHash64.java
index f5eb8cf..46785f6 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/XxHash64.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/XxHash64.java
@@ -19,6 +19,12 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.CHAR_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.DOUBLE_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.FLOAT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.INT_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LONG_SHIFT;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.SHORT_SHIFT;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_BOOLEAN_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_BYTE_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_CHAR_BASE_OFFSET;
@@ -27,12 +33,6 @@ import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_FLOAT_BAS
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_INT_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_LONG_BASE_OFFSET;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_SHORT_BASE_OFFSET;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.CHAR_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.DOUBLE_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.FLOAT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.INT_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.LONG_SHIFT;
-import static org.apache.datasketches.memory.internal.UnsafeUtil.SHORT_SHIFT;
import static org.apache.datasketches.memory.internal.UnsafeUtil.unsafe;
/**
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java
index dcbd2d1..c3185cc 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java
@@ -23,8 +23,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import static org.apache.datasketches.memory.internal.Util.getResourceFile;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
index 024c1b4..c5cb6d5 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.fail;
@@ -29,10 +29,8 @@ import org.apache.datasketches.memory.DefaultMemoryRequestServer;
import org.apache.datasketches.memory.MemoryRequestServer;
import org.apache.datasketches.memory.WritableHandle;
import org.apache.datasketches.memory.WritableMemory;
-import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
-@SuppressWarnings("deprecation")
public class AllocateDirectMemoryTest {
@Test
@@ -107,17 +105,6 @@ public class AllocateDirectMemoryTest {
} //end of scope call to Cleaner/Deallocator also will be redundant
}
-
- @AfterClass
- public void checkDirectCounter() {
- WritableMemory.writableWrap(new byte[8]);
- long count = BaseState.getCurrentDirectMemoryAllocations();
- if (count != 0) {
- println(""+count);
- fail();
- }
- }
-
@Test
public void printlnTest() {
println("PRINTING: "+this.getClass().getName());
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java
index 5b62610..51cc4c7 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java
@@ -24,9 +24,9 @@
package org.apache.datasketches.memory.internal;
import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.apache.datasketches.memory.internal.Util.getResourceFile;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
@@ -37,20 +37,16 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
-import java.nio.ByteOrder;
-import org.apache.datasketches.memory.BaseState;
import org.apache.datasketches.memory.MapHandle;
import org.apache.datasketches.memory.Memory;
import org.apache.datasketches.memory.ReadOnlyException;
import org.apache.datasketches.memory.WritableHandle;
import org.apache.datasketches.memory.WritableMapHandle;
import org.apache.datasketches.memory.WritableMemory;
-import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-@SuppressWarnings("deprecation")
public class AllocateDirectWritableMapMemoryTest {
@BeforeClass
@@ -187,8 +183,7 @@ public class AllocateDirectWritableMapMemoryTest {
assertEquals(bufStr, origStr);
}
- try (WritableMapHandle wrh = WritableMemory.writableMap(origFile, 0, corrBytes,
- ByteOrder.nativeOrder())) {
+ try (WritableMapHandle wrh = WritableMemory.writableMap(origFile, 0, corrBytes, NATIVE_BYTE_ORDER)) {
WritableMemory wMap = wrh.getWritable();
wrh.load();
assertTrue(wrh.isLoaded());
@@ -225,14 +220,14 @@ public class AllocateDirectWritableMapMemoryTest {
} //end of scope call to Cleaner/Deallocator also will be redundant
}
- @AfterClass
- public void checkDirectCounter() {
- long count = BaseState.getCurrentDirectMemoryMapAllocations();
- if (count != 0) {
- println(""+count);
- fail();
- }
- }
+// @AfterClass
+// public void checkDirectCounter() {
+// long count = BaseState.getCurrentDirectMemoryMapAllocations();
+// if (count != 0) {
+// println(""+count);
+// fail();
+// }
+// }
@Test
public void printlnTest() {
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BaseStateTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BaseStateTest.java
index eef5799..0c09fc6 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BaseStateTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BaseStateTest.java
@@ -19,8 +19,12 @@
package org.apache.datasketches.memory.internal;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkJavaVersion;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.isNativeByteOrder;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.parseJavaVersion;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.typeDecode;
import static org.apache.datasketches.memory.internal.UnsafeUtil.ARRAY_DOUBLE_INDEX_SCALE;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -35,6 +39,63 @@ import org.testng.annotations.Test;
@SuppressWarnings("deprecation")
public class BaseStateTest {
+ @Test
+ public void checkJdkString() {
+ String jdkVer;
+ int[] p = new int[2];
+ String[] good1_Strings = {"1.8.0_121", "8", "11"};
+ int len = good1_Strings.length;
+ for (int i = 0; i < len; i++) {
+ jdkVer = good1_Strings[i];
+ p = parseJavaVersion(jdkVer);
+ checkJavaVersion(jdkVer, p[0], p[1]);
+ int jdkMajor = (p[0] == 1) ? p[1] : p[0]; //model the actual JDK_MAJOR
+ if (p[0] == 1) { assertTrue(jdkMajor == p[1]); }
+ if (p[0] > 1 ) { assertTrue(jdkMajor == p[0]); }
+ }
+ try {
+ jdkVer = "14.0.4"; //ver 14 string
+ p = parseJavaVersion(jdkVer);
+ checkJavaVersion(jdkVer, p[0], p[1]);
+ fail();
+ } catch (IllegalArgumentException e) {
+ println("" + e);
+ }
+
+ try {
+ jdkVer = "1.7.0_80"; //1.7 string
+ p = parseJavaVersion(jdkVer);
+ checkJavaVersion(jdkVer, p[0], p[1]);
+ fail();
+ } catch (IllegalArgumentException e) {
+ println("" + e);
+ }
+ try {
+ jdkVer = "1.6.0_65"; //valid string but < 1.7
+ p = parseJavaVersion(jdkVer);
+ checkJavaVersion(jdkVer, p[0], p[1]); //throws
+ fail();
+ } catch (IllegalArgumentException e) {
+ println("" + e);
+ }
+ try {
+ jdkVer = "b"; //invalid string
+ p = parseJavaVersion(jdkVer);
+ checkJavaVersion(jdkVer, p[0], p[1]); //throws
+ fail();
+ } catch (IllegalArgumentException e) {
+ println("" + e);
+ }
+ try {
+ jdkVer = ""; //invalid string
+ p = parseJavaVersion(jdkVer);
+ checkJavaVersion(jdkVer, p[0], p[1]); //throws
+ fail();
+ } catch (IllegalArgumentException e) {
+ println("" + e);
+ }
+ }
+
@Test
public void checkPrimOffset() {
int off = (int)Prim.BYTE.off();
@@ -98,9 +159,9 @@ public class BaseStateTest {
@Test
public void checkIsNativeByteOrder() {
- assertTrue(BaseStateImpl.isNativeByteOrder(NATIVE_BYTE_ORDER));
+ assertTrue(isNativeByteOrder(NATIVE_BYTE_ORDER));
try {
- BaseStateImpl.isNativeByteOrder(null);
+ isNativeByteOrder(null);
fail();
} catch (final IllegalArgumentException e) {}
}
@@ -115,7 +176,7 @@ public class BaseStateTest {
@Test
public void checkTypeDecode() {
for (int i = 0; i < 128; i++) {
- BaseStateImpl.typeDecode(i);
+ typeDecode(i);
}
}
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
index f378d5e..7bf9269 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
index ca9700f..1c00746 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import java.nio.ByteBuffer;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
index 1e8d187..4db938f 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
index c1e9fe4..c75553d 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertFalse;
import java.nio.ByteOrder;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
index 1a7f738..fec0387 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
@@ -19,8 +19,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -44,12 +44,10 @@ import org.testng.annotations.Test;
*/
@SuppressWarnings("deprecation")
public class LeafImplTest {
- private static final ByteOrder NBO = NATIVE_BYTE_ORDER;
- private static final ByteOrder NNBO = NON_NATIVE_BYTE_ORDER;
private static final MemoryRequestServer dummyMemReqSvr = new DummyMemoryRequestServer();
private static ByteOrder otherByteOrder(final ByteOrder order) {
- return (order == ByteOrder.nativeOrder()) ? NNBO : ByteOrder.nativeOrder();
+ return (order == NATIVE_BYTE_ORDER) ? NON_NATIVE_BYTE_ORDER : NATIVE_BYTE_ORDER;
}
static class DummyMemoryRequestServer implements MemoryRequestServer {
@@ -64,20 +62,20 @@ public class LeafImplTest {
long off = 0;
long cap = 128;
// Off Heap, Native order, No ByteBuffer, has MemReqSvr
- try (WritableHandle wdh = WritableMemory.allocateDirect(cap, NBO, dummyMemReqSvr)) {
+ try (WritableHandle wdh = WritableMemory.allocateDirect(cap, NATIVE_BYTE_ORDER, dummyMemReqSvr)) {
WritableMemory memNO = wdh.getWritable();
memNO.putShort(0, (short) 1);
assertNull(((BaseStateImpl)memNO).getUnsafeObject());
assertTrue(memNO.isDirect());
- checkCombinations(memNO, off, cap, memNO.isDirect(), NBO, false, true);
+ checkCombinations(memNO, off, cap, memNO.isDirect(), NATIVE_BYTE_ORDER, false, true);
}
// Off Heap, Non Native order, No ByteBuffer, has MemReqSvr
- try (WritableHandle wdh = WritableMemory.allocateDirect(cap, NNBO, dummyMemReqSvr)) {
+ try (WritableHandle wdh = WritableMemory.allocateDirect(cap, NON_NATIVE_BYTE_ORDER, dummyMemReqSvr)) {
WritableMemory memNNO = wdh.getWritable();
memNNO.putShort(0, (short) 1);
assertNull(((BaseStateImpl)memNNO).getUnsafeObject());
assertTrue(memNNO.isDirect());
- checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNBO, false, true);
+ checkCombinations(memNNO, off, cap, memNNO.isDirect(), NON_NATIVE_BYTE_ORDER, false, true);
}
}
@@ -87,36 +85,36 @@ public class LeafImplTest {
long cap = 128;
//BB on heap, native order, has ByteBuffer, has MemReqSvr
ByteBuffer bb = ByteBuffer.allocate((int)cap);
- bb.order(NBO);
+ bb.order(NATIVE_BYTE_ORDER);
bb.putShort(0, (short) 1);
- WritableMemory mem = WritableMemory.writableWrap(bb, NBO, dummyMemReqSvr);
+ WritableMemory mem = WritableMemory.writableWrap(bb, NATIVE_BYTE_ORDER, dummyMemReqSvr);
assertEquals(bb.isDirect(), mem.isDirect());
assertNotNull(((BaseStateImpl)mem).getUnsafeObject());
checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, true);
//BB off heap, native order, has ByteBuffer, has MemReqSvr
ByteBuffer dbb = ByteBuffer.allocateDirect((int)cap);
- dbb.order(NBO);
+ dbb.order(NATIVE_BYTE_ORDER);
dbb.putShort(0, (short) 1);
- mem = WritableMemory.writableWrap(dbb, NBO, dummyMemReqSvr);
+ mem = WritableMemory.writableWrap(dbb, NATIVE_BYTE_ORDER, dummyMemReqSvr);
assertEquals(dbb.isDirect(), mem.isDirect());
assertNull(((BaseStateImpl)mem).getUnsafeObject());
checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, true);
//BB on heap, non native order, has ByteBuffer, has MemReqSvr
bb = ByteBuffer.allocate((int)cap);
- bb.order(NNBO);
+ bb.order(NON_NATIVE_BYTE_ORDER);
bb.putShort(0, (short) 1);
- mem = WritableMemory.writableWrap(bb, NNBO, dummyMemReqSvr);
+ mem = WritableMemory.writableWrap(bb, NON_NATIVE_BYTE_ORDER, dummyMemReqSvr);
assertEquals(bb.isDirect(), mem.isDirect());
assertNotNull(((BaseStateImpl)mem).getUnsafeObject());
checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, true);
//BB off heap, non native order, has ByteBuffer, has MemReqSvr
dbb = ByteBuffer.allocateDirect((int)cap);
- dbb.order(NNBO);
+ dbb.order(NON_NATIVE_BYTE_ORDER);
dbb.putShort(0, (short) 1);
- mem = WritableMemory.writableWrap(dbb, NNBO, dummyMemReqSvr);
+ mem = WritableMemory.writableWrap(dbb, NON_NATIVE_BYTE_ORDER, dummyMemReqSvr);
assertEquals(dbb.isDirect(), mem.isDirect());
assertNull(((BaseStateImpl)mem).getUnsafeObject());
checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, true);
@@ -139,20 +137,20 @@ public class LeafImplTest {
assertTrue(file.isFile());
file.deleteOnExit(); //comment out if you want to examine the file.
// Off Heap, Native order, No ByteBuffer, No MemReqSvr
- try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, NBO)) {
+ try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, NATIVE_BYTE_ORDER)) {
WritableMemory memNO = wmh.getWritable();
memNO.putShort(0, (short) 1);
assertNull(((BaseStateImpl)memNO).getUnsafeObject());
assertTrue(memNO.isDirect());
- checkCombinations(memNO, off, cap, memNO.isDirect(), NBO, false, false);
+ checkCombinations(memNO, off, cap, memNO.isDirect(), NATIVE_BYTE_ORDER, false, false);
}
// Off heap, Non Native order, No ByteBuffer, no MemReqSvr
- try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, NNBO)) {
+ try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, NON_NATIVE_BYTE_ORDER)) {
WritableMemory memNNO = wmh.getWritable();
memNNO.putShort(0, (short) 1);
assertNull(((BaseStateImpl)memNNO).getUnsafeObject());
assertTrue(memNNO.isDirect());
- checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNBO, false, false);
+ checkCombinations(memNNO, off, cap, memNNO.isDirect(), NON_NATIVE_BYTE_ORDER, false, false);
}
}
@@ -161,17 +159,17 @@ public class LeafImplTest {
long off = 0;
long cap = 128;
// On Heap, Native order, No ByteBuffer, No MemReqSvr
- WritableMemory memNO = WritableMemory.allocate((int)cap); //assumes NBO
+ WritableMemory memNO = WritableMemory.allocate((int)cap); //assumes NATIVE_BYTE_ORDER
memNO.putShort(0, (short) 1);
assertNotNull(((BaseStateImpl)memNO).getUnsafeObject());
assertFalse(memNO.isDirect());
- checkCombinations(memNO, off, cap, memNO.isDirect(), NBO, false, false);
+ checkCombinations(memNO, off, cap, memNO.isDirect(), NATIVE_BYTE_ORDER, false, false);
// On Heap, Non-native order, No ByteBuffer, No MemReqSvr
- WritableMemory memNNO = WritableMemory.allocate((int)cap, NNBO);
+ WritableMemory memNNO = WritableMemory.allocate((int)cap, NON_NATIVE_BYTE_ORDER);
memNNO.putShort(0, (short) 1);
assertNotNull(((BaseStateImpl)memNNO).getUnsafeObject());
assertFalse(memNNO.isDirect());
- checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNBO, false, false);
+ checkCombinations(memNNO, off, cap, memNNO.isDirect(), NON_NATIVE_BYTE_ORDER, false, false);
}
private static void checkCombinations(WritableMemory mem, long off, long cap,
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java
index e21eae7..d97fac5 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import java.io.File;
import java.io.RandomAccessFile;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
index 02d44a0..81e9fd6 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
@@ -23,23 +23,20 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.LS;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.getResourceFile;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
-import java.io.File;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.List;
import org.apache.datasketches.memory.BaseState;
-import org.apache.datasketches.memory.MapHandle;
import org.apache.datasketches.memory.Memory;
import org.apache.datasketches.memory.WritableBuffer;
import org.apache.datasketches.memory.WritableHandle;
@@ -48,7 +45,6 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.testng.collections.Lists;
-@SuppressWarnings("deprecation")
public class MemoryTest {
@BeforeClass
@@ -345,50 +341,6 @@ public class MemoryTest {
region.getByte(0);
}
- @Test
- public void checkMonitorDirectStats() throws Exception {
- int bytes = 1024;
- long curAllocations = BaseState.getCurrentDirectMemoryAllocations();
- long curAllocated = BaseState.getCurrentDirectMemoryAllocated();
- if (curAllocations != 0) { System.err.println(curAllocations + " should be zero!"); }
- WritableHandle wh1 = WritableMemory.allocateDirect(bytes);
- WritableHandle wh2 = WritableMemory.allocateDirect(bytes);
- assertEquals(BaseState.getCurrentDirectMemoryAllocations(), 2L + curAllocations);
- assertEquals(BaseState.getCurrentDirectMemoryAllocated(), 2 * bytes + curAllocated);
-
- wh1.close();
- assertEquals(BaseState.getCurrentDirectMemoryAllocations(), 1L + curAllocations);
- assertEquals(BaseState.getCurrentDirectMemoryAllocated(), bytes + curAllocated);
-
- wh2.close();
- wh2.close(); //check that it doesn't go negative.
- //even though the handles are closed, these methods are static access
- assertEquals(BaseState.getCurrentDirectMemoryAllocations(), 0L + curAllocations);
- assertEquals(BaseState.getCurrentDirectMemoryAllocated(), 0L + curAllocated);
- }
-
- @Test
- public void checkMonitorDirectMapStats() throws Exception {
- File file = getResourceFile("GettysburgAddress.txt");
- long bytes = file.length();
-
- MapHandle mmh1 = Memory.map(file);
- MapHandle mmh2 = Memory.map(file);
-
- assertEquals(BaseState.getCurrentDirectMemoryMapAllocations(), 2L);
- assertEquals(BaseState.getCurrentDirectMemoryMapAllocated(), 2 * bytes);
-
- mmh1.close();
- assertEquals(BaseState.getCurrentDirectMemoryMapAllocations(), 1L);
- assertEquals(BaseState.getCurrentDirectMemoryMapAllocated(), bytes);
-
- mmh2.close();
- mmh2.close(); //check that it doesn't go negative.
- //even though the handles are closed, these methods are static access
- assertEquals(BaseState.getCurrentDirectMemoryMapAllocations(), 0L);
- assertEquals(BaseState.getCurrentDirectMemoryMapAllocated(), 0L);
- }
-
@Test
public void checkMemReqSvr() throws Exception {
WritableMemory wmem;
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
index 63bfc4d..ef9381d 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
@@ -19,8 +19,9 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -372,7 +373,7 @@ public class NativeWritableBufferImplTest {
@Test
public void checkGoodBounds() {
- UnsafeUtil.checkBounds(50, 50, 100);
+ checkBounds(50, 50, 100);
}
@Test
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
index 08d79c0..0356249 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
@@ -19,15 +19,15 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import org.apache.datasketches.memory.Buffer;
import org.apache.datasketches.memory.Memory;
@@ -461,7 +461,7 @@ public class NativeWritableMemoryImplTest {
public void checkWrapWithBBReadonly1() {
int memCapacity = 64;
ByteBuffer byteBuf = ByteBuffer.allocate(memCapacity);
- byteBuf.order(ByteOrder.nativeOrder());
+ byteBuf.order(NATIVE_BYTE_ORDER);
for (int i = 0; i < memCapacity; i++) {
byteBuf.put(i, (byte) i);
@@ -565,7 +565,7 @@ public class NativeWritableMemoryImplTest {
@Test
public void checkGoodBounds() {
- UnsafeUtil.checkBounds(50, 50, 100);
+ checkBounds(50, 50, 100);
}
@Test
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
index dbccbc0..7a8cbff 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
@@ -19,8 +19,9 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
-import static org.apache.datasketches.memory.internal.Util.NON_NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NON_NATIVE_BYTE_ORDER;
+import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@@ -49,8 +50,12 @@ public class SpecificLeafTest {
Memory mem = Memory.wrap(bb).region(0, bytes, NATIVE_BYTE_ORDER);
assertTrue(((BaseStateImpl)mem).isBBType());
assertTrue(mem.isReadOnly());
+ assertTrue(((BaseStateImpl)mem).isMemoryType());
+ assertFalse(((BaseStateImpl)mem).isDirectType());
+ assertFalse(((BaseStateImpl)mem).isMapType());
checkCrossLeafTypeIds(mem);
Buffer buf = mem.asBuffer().region(0, bytes, NATIVE_BYTE_ORDER);
+ assertEquals(buf.getByteOrder(), NATIVE_BYTE_ORDER);
bb.order(NON_NATIVE_BYTE_ORDER);
Memory mem2 = Memory.wrap(bb).region(0, bytes, NON_NATIVE_BYTE_ORDER);
@@ -87,6 +92,7 @@ public class SpecificLeafTest {
assertTrue(((BaseStateImpl)buf).isRegionType());
assertTrue(((BaseStateImpl)buf2).isRegionType());
assertTrue(((BaseStateImpl)buf3).isDuplicateType());
+ assertTrue(((BaseStateImpl)mem).isMemoryType());
}
}
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UnsafeUtilTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UnsafeUtilTest.java
index baaf90a..d81178e 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UnsafeUtilTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UnsafeUtilTest.java
@@ -20,7 +20,6 @@
package org.apache.datasketches.memory.internal;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.util.ArrayList;
@@ -35,64 +34,6 @@ import org.testng.annotations.Test;
public class UnsafeUtilTest {
long testField = 1; //Do not remove & cannot be static. Used in reflection check.
-
- @Test
- public void checkJdkString() {
- String jdkVer;
- int[] p = new int[2];
- String[] good1_Strings = {"1.8.0_121", "8", "9", "10", "11", "12", "13"};
- int len = good1_Strings.length;
- for (int i = 0; i < len; i++) {
- jdkVer = good1_Strings[i];
- p = UnsafeUtil.parseJavaVersion(jdkVer);
- UnsafeUtil.checkJavaVersion(jdkVer, p[0], p[1]);
- int jdkMajor = (p[0] == 1) ? p[1] : p[0]; //model the actual JDK_MAJOR
- if (p[0] == 1) { assertTrue(jdkMajor == p[1]); }
- if (p[0] > 1 ) { assertTrue(jdkMajor == p[0]); }
- }
- try {
- jdkVer = "14.0.4"; //ver 14 string
- p = UnsafeUtil.parseJavaVersion(jdkVer);
- UnsafeUtil.checkJavaVersion(jdkVer, p[0], p[1]);
- fail();
- } catch (IllegalArgumentException e) {
- println("" + e);
- }
-
- try {
- jdkVer = "1.7.0_80"; //1.7 string
- p = UnsafeUtil.parseJavaVersion(jdkVer);
- UnsafeUtil.checkJavaVersion(jdkVer, p[0], p[1]);
- fail();
- } catch (IllegalArgumentException e) {
- println("" + e);
- }
- try {
- jdkVer = "1.6.0_65"; //valid string but < 1.7
- p = UnsafeUtil.parseJavaVersion(jdkVer);
- UnsafeUtil.checkJavaVersion(jdkVer, p[0], p[1]); //throws
- fail();
- } catch (IllegalArgumentException e) {
- println("" + e);
- }
- try {
- jdkVer = "b"; //invalid string
- p = UnsafeUtil.parseJavaVersion(jdkVer);
- UnsafeUtil.checkJavaVersion(jdkVer, p[0], p[1]); //throws
- fail();
- } catch (IllegalArgumentException e) {
- println("" + e);
- }
- try {
- jdkVer = ""; //invalid string
- p = UnsafeUtil.parseJavaVersion(jdkVer);
- UnsafeUtil.checkJavaVersion(jdkVer, p[0], p[1]); //throws
- fail();
- } catch (IllegalArgumentException e) {
- println("" + e);
- }
- }
-
@Test
public void checkFieldOffset() {
assertEquals(testField, 1);
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java
index 0b8b42c..b807aad 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java
@@ -23,7 +23,8 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.LS;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.checkBounds;
import static org.apache.datasketches.memory.internal.Util.characterPad;
import static org.apache.datasketches.memory.internal.Util.getResourceBytes;
import static org.apache.datasketches.memory.internal.Util.getResourceFile;
@@ -65,7 +66,7 @@ public class UtilTest {
@Test(expectedExceptions = IllegalArgumentException.class)
public void checkBoundsTest() {
- UnsafeUtil.checkBounds(999, 2, 1000);
+ checkBounds(999, 2, 1000);
}
@Test
diff --git a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
index 33d1529..6a46e0d 100644
--- a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
+++ b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
@@ -19,7 +19,7 @@
package org.apache.datasketches.memory.internal;
-import static org.apache.datasketches.memory.internal.Util.NATIVE_BYTE_ORDER;
+import static org.apache.datasketches.memory.internal.BaseStateImpl.NATIVE_BYTE_ORDER;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org