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 2021/05/11 05:25:18 UTC
[datasketches-memory] 02/04: interim update
This is an automated email from the ASF dual-hosted git repository.
leerho pushed a commit to branch noSplitPackage
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git
commit 9c318efc1c89ff4cd71a2aaca9240a5abaecae7f
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Fri May 7 09:44:36 2021 -0700
interim update
---
.../datasketches/memory/AllocateDirectMap.java | 9 +-
.../memory/BBNonNativeWritableBufferImpl.java | 4 +-
.../memory/BBNonNativeWritableMemoryImpl.java | 4 +-
.../datasketches/memory/BBWritableBufferImpl.java | 4 +-
.../datasketches/memory/BBWritableMemoryImpl.java | 4 +-
.../org/apache/datasketches/memory/BaseState.java | 23 +---
.../memory/BaseWritableMemoryImpl.java | 8 +-
.../memory/DirectNonNativeWritableBufferImpl.java | 11 +-
.../memory/DirectNonNativeWritableMemoryImpl.java | 11 +-
.../memory/DirectWritableBufferImpl.java | 10 +-
.../memory/DirectWritableMemoryImpl.java | 13 +-
.../memory/HeapNonNativeWritableBufferImpl.java | 4 +-
.../memory/HeapNonNativeWritableMemoryImpl.java | 4 +-
.../memory/HeapWritableBufferImpl.java | 4 +-
.../memory/HeapWritableMemoryImpl.java | 4 +-
.../memory/MapNonNativeWritableBufferImpl.java | 11 +-
.../memory/MapNonNativeWritableMemoryImpl.java | 11 +-
.../datasketches/memory/MapWritableBufferImpl.java | 11 +-
.../datasketches/memory/MapWritableMemoryImpl.java | 11 +-
.../org/apache/datasketches/memory/Memory.java | 16 +--
.../java/org/apache/datasketches/memory/Prim.java | 8 +-
.../apache/datasketches/memory/StepBoolean.java | 10 +-
.../java/org/apache/datasketches/memory/Util.java | 31 ++++-
.../apache/datasketches/memory/WritableMemory.java | 25 ++--
.../memory/test/AllocateDirectMemoryTest.java | 60 ++++++---
.../test/AllocateDirectWritableMapMemoryTest.java | 53 ++++++--
.../datasketches/memory/test/BaseStateTest.java | 8 +-
.../datasketches/memory/test/ReflectUtil.java | 143 +++++++++++++++++++++
28 files changed, 389 insertions(+), 126 deletions(-)
diff --git a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java b/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
index 29c2d48..25bfef7 100644
--- a/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
+++ b/src/main/java/org/apache/datasketches/memory/AllocateDirectMap.java
@@ -242,13 +242,8 @@ class AllocateDirectMap implements Map {
}
}
- static boolean isFileReadOnly(final File file) {
- try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
- raf.close();
- return false;
- } catch (final SecurityException | IOException f) { //could not open for write
- return true;
- }
+ public static boolean isFileReadOnly(final File file) {
+ return (!file.canWrite());
}
private static final class Deallocator implements Runnable {
diff --git a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
index 44d87b9..cc01a7e 100644
--- a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, byteBuf, originMemory)
@@ -66,7 +66,7 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
type, byteBuf, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
index 1a43bf2..4f83901 100644
--- a/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBNonNativeWritableMemoryImpl.java
@@ -53,7 +53,7 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableMemoryImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, getByteBuffer())
@@ -65,7 +65,7 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
type, byteBuf, this)
diff --git a/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
index a44e118..20802b9 100644
--- a/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class BBWritableBufferImpl extends WritableBufferImpl {
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, byteBuf, originMemory)
@@ -66,7 +66,7 @@ final class BBWritableBufferImpl extends WritableBufferImpl {
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
type, byteBuf, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
index 99284e3..dd06c0b 100644
--- a/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BBWritableMemoryImpl.java
@@ -53,7 +53,7 @@ final class BBWritableMemoryImpl extends WritableMemoryImpl {
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableMemoryImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, getByteBuffer())
@@ -65,7 +65,7 @@ final class BBWritableMemoryImpl extends WritableMemoryImpl {
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
type, byteBuf, this)
diff --git a/src/main/java/org/apache/datasketches/memory/BaseState.java b/src/main/java/org/apache/datasketches/memory/BaseState.java
index da66836..82f4e7d 100644
--- a/src/main/java/org/apache/datasketches/memory/BaseState.java
+++ b/src/main/java/org/apache/datasketches/memory/BaseState.java
@@ -37,11 +37,6 @@ import java.util.concurrent.atomic.AtomicLong;
@SuppressWarnings({"restriction"})
abstract class BaseState {
- //Byte Order related
- static final ByteOrder nativeByteOrder = ByteOrder.nativeOrder();
- static final ByteOrder nonNativeByteOrder = nativeByteOrder == ByteOrder.LITTLE_ENDIAN
- ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
-
//Monitoring
static final AtomicLong currentDirectMemoryAllocations_ = new AtomicLong();
static final AtomicLong currentDirectMemoryAllocated_ = new AtomicLong();
@@ -101,20 +96,12 @@ abstract class BaseState {
//Byte Order Related
/**
- * Returns the Native Byte Order
- * @return the Native Byte Order
- */
- public static final ByteOrder getNativeByteOrder() {
- return nativeByteOrder;
- }
-
- /**
* Gets the current Type ByteOrder.
* This may be different from the ByteOrder of the backing resource and of the Native Byte Order.
* @return the current Type ByteOrder.
*/
public final ByteOrder getTypeByteOrder() {
- return isNonNativeType() ? BaseState.nonNativeByteOrder : BaseState.nativeByteOrder;
+ return isNonNativeType() ? Util.nonNativeByteOrder : Util.nativeByteOrder;
}
/**
@@ -126,7 +113,7 @@ abstract class BaseState {
if (byteOrder == null) {
throw new IllegalArgumentException("ByteOrder parameter cannot be null.");
}
- return BaseState.nativeByteOrder == byteOrder;
+ return Util.nativeByteOrder == byteOrder;
}
/**
@@ -138,7 +125,7 @@ abstract class BaseState {
*/
public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
final ByteOrder typeBO = getTypeByteOrder();
- return typeBO == getNativeByteOrder() && typeBO == byteOrder;
+ return typeBO == Util.nativeByteOrder && typeBO == byteOrder;
}
/**
@@ -364,7 +351,7 @@ abstract class BaseState {
assert isValid() : "Memory not valid.";
}
- final void checkValid() {
+ void checkValid() {
if (!isValid()) {
throw new IllegalStateException("Memory not valid.");
}
@@ -548,7 +535,7 @@ abstract class BaseState {
sb.append("Valid : ").append(state.isValid()).append(LS);
sb.append("Read Only : ").append(state.isReadOnly()).append(LS);
sb.append("Type Byte Order : ").append(state.getTypeByteOrder().toString()).append(LS);
- sb.append("Native Byte Order : ").append(nativeByteOrder.toString()).append(LS);
+ sb.append("Native Byte Order : ").append(Util.nativeByteOrder.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");
diff --git a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
index 829fe14..820358f 100644
--- a/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/BaseWritableMemoryImpl.java
@@ -76,7 +76,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
final long lengthBytes, final boolean localReadOnly, final ByteOrder byteOrder) {
if (lengthBytes == 0) { return BaseWritableMemoryImpl.ZERO_SIZE_MEMORY; }
final int typeId = localReadOnly ? READONLY : 0;
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableMemoryImpl(arr, offsetBytes, lengthBytes, typeId)
: new HeapNonNativeWritableMemoryImpl(arr, offsetBytes, lengthBytes, typeId);
}
@@ -88,7 +88,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
throw new ReadOnlyException("ByteBuffer is Read Only");
}
final int typeId = (abb.resourceReadOnly || localReadOnly) ? READONLY : 0;
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new BBWritableMemoryImpl(abb.unsafeObj, abb.nativeBaseOffset,
abb.regionOffset, abb.capacityBytes, typeId, byteBuf)
: new BBNonNativeWritableMemoryImpl(abb.unsafeObj, abb.nativeBaseOffset,
@@ -106,7 +106,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
throw new ReadOnlyException("File is Read Only");
}
final int typeId = (dirWMap.resourceReadOnly || localReadOnly) ? READONLY : 0;
- final BaseWritableMemoryImpl wmem = isNativeByteOrder(byteOrder)
+ final BaseWritableMemoryImpl wmem = Util.isNativeByteOrder(byteOrder)
? new MapWritableMemoryImpl(dirWMap.nativeBaseOffset, 0L, capacityBytes,
typeId, dirWMap.getValid())
: new MapNonNativeWritableMemoryImpl(dirWMap.nativeBaseOffset, 0L, capacityBytes,
@@ -123,7 +123,7 @@ abstract class BaseWritableMemoryImpl extends WritableMemory {
}
final AllocateDirect direct = new AllocateDirect(capacityBytes);
final int typeId = 0; //direct is never read-only on construction
- final BaseWritableMemoryImpl wmem = isNativeByteOrder(byteOrder)
+ final BaseWritableMemoryImpl wmem = Util.isNativeByteOrder(byteOrder)
? new DirectWritableMemoryImpl(direct.getNativeBaseOffset(), 0L, capacityBytes,
typeId, direct.getValid(), memReqSvr)
: new DirectNonNativeWritableMemoryImpl(direct.getNativeBaseOffset(), 0L, capacityBytes,
diff --git a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
index c3801da..db02695 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableBufferImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid, memReqSvr, originMemory)
@@ -66,7 +66,7 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, memReqSvr, originMemory)
@@ -96,4 +96,11 @@ final class DirectNonNativeWritableBufferImpl extends NonNativeWritableBufferImp
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
index 6e74efa..6649830 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectNonNativeWritableMemoryImpl.java
@@ -52,7 +52,7 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableMemoryImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid, memReqSvr)
@@ -64,7 +64,7 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, memReqSvr, this)
@@ -94,4 +94,11 @@ final class DirectNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImp
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
index 4a222f3..076910f 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectWritableBufferImpl.java
@@ -54,7 +54,7 @@ final class DirectWritableBufferImpl extends WritableBufferImpl {
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableBufferImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid, memReqSvr, originMemory)
@@ -66,7 +66,7 @@ final class DirectWritableBufferImpl extends WritableBufferImpl {
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, memReqSvr, originMemory)
@@ -96,4 +96,10 @@ final class DirectWritableBufferImpl extends WritableBufferImpl {
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
}
diff --git a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
index 4c86746..886c7bb 100644
--- a/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/DirectWritableMemoryImpl.java
@@ -52,7 +52,7 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableMemoryImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid, memReqSvr)
@@ -64,7 +64,7 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new DirectWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, memReqSvr, this)
@@ -93,5 +93,12 @@ final class DirectWritableMemoryImpl extends WritableMemoryImpl {
public boolean isValid() {
return valid.get();
}
-
+
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
index 9ab8ba7..f7e2838 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableBufferImpl.java
@@ -47,7 +47,7 @@ final class HeapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableBufferImpl(
unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
type, originMemory)
@@ -59,7 +59,7 @@ final class HeapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableBufferImpl(
unsafeObj, getRegionOffset(), getCapacity(),
type, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
index e9957ca..359a8c6 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapNonNativeWritableMemoryImpl.java
@@ -46,7 +46,7 @@ final class HeapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableMemoryImpl(
unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
type)
@@ -58,7 +58,7 @@ final class HeapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableBufferImpl(
unsafeObj, getRegionOffset(), getCapacity(),
type, this)
diff --git a/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
index 17f2fb6..0e3cb56 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapWritableBufferImpl.java
@@ -47,7 +47,7 @@ final class HeapWritableBufferImpl extends WritableBufferImpl {
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableBufferImpl(
unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
type, originMemory)
@@ -59,7 +59,7 @@ final class HeapWritableBufferImpl extends WritableBufferImpl {
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableBufferImpl(
unsafeObj, getRegionOffset(), getCapacity(),
type, originMemory)
diff --git a/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
index a26abcf..147702e 100644
--- a/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/HeapWritableMemoryImpl.java
@@ -46,7 +46,7 @@ final class HeapWritableMemoryImpl extends WritableMemoryImpl {
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableMemoryImpl(
unsafeObj, getRegionOffset(offsetBytes), capacityBytes,
type)
@@ -58,7 +58,7 @@ final class HeapWritableMemoryImpl extends WritableMemoryImpl {
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new HeapWritableBufferImpl(
unsafeObj, getRegionOffset(), getCapacity(),
type, this)
diff --git a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
index 354030c..2ab9c58 100644
--- a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableBufferImpl.java
@@ -50,7 +50,7 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableBufferImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid, originMemory)
@@ -62,7 +62,7 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, originMemory)
@@ -86,4 +86,11 @@ final class MapNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
index a7e578f..05f6989 100644
--- a/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapNonNativeWritableMemoryImpl.java
@@ -49,7 +49,7 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableMemoryImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid)
@@ -61,7 +61,7 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, this)
@@ -85,4 +85,11 @@ final class MapNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java b/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
index ccf0a74..6aab451 100644
--- a/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapWritableBufferImpl.java
@@ -50,7 +50,7 @@ final class MapWritableBufferImpl extends WritableBufferImpl {
BaseWritableBufferImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableBufferImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid, originMemory)
@@ -62,7 +62,7 @@ final class MapWritableBufferImpl extends WritableBufferImpl {
@Override
BaseWritableBufferImpl toDuplicate(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | DUPLICATE | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, originMemory)
@@ -86,4 +86,11 @@ final class MapWritableBufferImpl extends WritableBufferImpl {
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
index fdcbe9b..1448947 100644
--- a/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
+++ b/src/main/java/org/apache/datasketches/memory/MapWritableMemoryImpl.java
@@ -49,7 +49,7 @@ final class MapWritableMemoryImpl extends WritableMemoryImpl {
BaseWritableMemoryImpl toWritableRegion(final long offsetBytes, final long capacityBytes,
final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | REGION | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableMemoryImpl(
nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
type, valid)
@@ -61,7 +61,7 @@ final class MapWritableMemoryImpl extends WritableMemoryImpl {
@Override
BaseWritableBufferImpl toWritableBuffer(final boolean readOnly, final ByteOrder byteOrder) {
final int type = typeId | (readOnly ? READONLY : 0);
- return isNativeByteOrder(byteOrder)
+ return Util.isNativeByteOrder(byteOrder)
? new MapWritableBufferImpl(
nativeBaseOffset, getRegionOffset(), getCapacity(),
type, valid, this)
@@ -85,4 +85,11 @@ final class MapWritableMemoryImpl extends WritableMemoryImpl {
return valid.get();
}
+ @Override
+ void checkValid() {
+ if (!this.isValid()) {
+ throw new IllegalStateException("Memory not valid.");
+ }
+ }
+
}
diff --git a/src/main/java/org/apache/datasketches/memory/Memory.java b/src/main/java/org/apache/datasketches/memory/Memory.java
index 3af3631..c6c9ba1 100644
--- a/src/main/java/org/apache/datasketches/memory/Memory.java
+++ b/src/main/java/org/apache/datasketches/memory/Memory.java
@@ -227,7 +227,7 @@ public abstract class Memory extends BaseState {
public static Memory wrap(final boolean[] arr) {
final long lengthBytes = arr.length << Prim.BOOLEAN.shift();
return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true,
- BaseState.nativeByteOrder);
+ Util.nativeByteOrder);
}
/**
@@ -241,7 +241,7 @@ public abstract class Memory extends BaseState {
* @return a new <i>Memory</i> for read operations
*/
public static Memory wrap(final byte[] arr) {
- return Memory.wrap(arr, 0, arr.length, BaseState.nativeByteOrder);
+ return Memory.wrap(arr, 0, arr.length, Util.nativeByteOrder);
}
/**
@@ -289,7 +289,7 @@ public abstract class Memory extends BaseState {
*/
public static Memory wrap(final char[] arr) {
final long lengthBytes = arr.length << Prim.CHAR.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
}
/**
@@ -303,7 +303,7 @@ public abstract class Memory extends BaseState {
*/
public static Memory wrap(final short[] arr) {
final long lengthBytes = arr.length << Prim.SHORT.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
}
/**
@@ -317,7 +317,7 @@ public abstract class Memory extends BaseState {
*/
public static Memory wrap(final int[] arr) {
final long lengthBytes = arr.length << Prim.INT.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
}
/**
@@ -332,7 +332,7 @@ public abstract class Memory extends BaseState {
*/
public static Memory wrap(final long[] arr) {
final long lengthBytes = arr.length << Prim.LONG.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
}
/**
@@ -347,7 +347,7 @@ public abstract class Memory extends BaseState {
*/
public static Memory wrap(final float[] arr) {
final long lengthBytes = arr.length << Prim.FLOAT.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
}
/**
@@ -362,7 +362,7 @@ public abstract class Memory extends BaseState {
*/
public static Memory wrap(final double[] arr) {
final long lengthBytes = arr.length << Prim.DOUBLE.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, true, Util.nativeByteOrder);
}
//PRIMITIVE getX() and getXArray()
diff --git a/src/main/java/org/apache/datasketches/memory/Prim.java b/src/main/java/org/apache/datasketches/memory/Prim.java
index 0178d27..9b956bd 100644
--- a/src/main/java/org/apache/datasketches/memory/Prim.java
+++ b/src/main/java/org/apache/datasketches/memory/Prim.java
@@ -52,7 +52,7 @@ import static org.apache.datasketches.memory.UnsafeUtil.SHORT_SHIFT;
*
* @author Lee Rhodes
*/
-enum Prim {
+public enum Prim {
BOOLEAN(ARRAY_BOOLEAN_BASE_OFFSET, ARRAY_BOOLEAN_INDEX_SCALE, BOOLEAN_SHIFT),
BYTE(ARRAY_BYTE_BASE_OFFSET, ARRAY_BYTE_INDEX_SCALE, BYTE_SHIFT),
CHAR(ARRAY_CHAR_BASE_OFFSET, ARRAY_CHAR_INDEX_SCALE, CHAR_SHIFT),
@@ -73,15 +73,15 @@ enum Prim {
this.sizeShift_ = sizeShift;
}
- long off() {
+ public long off() {
return arrBaseOff_;
}
- long scale() {
+ public long scale() {
return arrIdxScale_;
}
- long shift() {
+ public long shift() {
return sizeShift_;
}
diff --git a/src/main/java/org/apache/datasketches/memory/StepBoolean.java b/src/main/java/org/apache/datasketches/memory/StepBoolean.java
index 16d6b19..e614d4c 100644
--- a/src/main/java/org/apache/datasketches/memory/StepBoolean.java
+++ b/src/main/java/org/apache/datasketches/memory/StepBoolean.java
@@ -26,7 +26,7 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
*
* @author Lee Rhodes
*/
-final class StepBoolean {
+public final class StepBoolean {
private static final int FALSE = 0;
private static final int TRUE = 1;
private static final AtomicIntegerFieldUpdater<StepBoolean> STATE_FIELD_UPDATER =
@@ -35,7 +35,7 @@ final class StepBoolean {
private final int initialState;
private volatile int state;
- StepBoolean(final boolean initialState) {
+ public StepBoolean(final boolean initialState) {
this.initialState = initialState ? TRUE : FALSE;
state = this.initialState;
}
@@ -44,7 +44,7 @@ final class StepBoolean {
* Gets the current state.
* @return the current state.
*/
- boolean get() {
+ public boolean get() {
return state == TRUE;
}
@@ -53,7 +53,7 @@ final class StepBoolean {
* @return true if this call led to the change of the state; false if the state has already been
* changed
*/
- boolean change() {
+ public boolean change() {
final int notInitialState = initialState == TRUE ? FALSE : TRUE;
return STATE_FIELD_UPDATER.compareAndSet(this, initialState, notInitialState);
}
@@ -62,7 +62,7 @@ final class StepBoolean {
* Return true if the state has changed from the initial state
* @return true if the state has changed from the initial state
*/
- boolean hasChanged() {
+ public boolean hasChanged() {
return state != initialState;
}
}
diff --git a/src/main/java/org/apache/datasketches/memory/Util.java b/src/main/java/org/apache/datasketches/memory/Util.java
index 10b3eb5..3866c59 100644
--- a/src/main/java/org/apache/datasketches/memory/Util.java
+++ b/src/main/java/org/apache/datasketches/memory/Util.java
@@ -26,6 +26,7 @@ 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.Random;
@@ -34,10 +35,38 @@ import java.util.Random;
* @author Lee Rhodes
*/
public final class Util {
- private static final String LS = System.getProperty("line.separator");
+ public static final String LS = System.getProperty("line.separator");
+
+ //Byte Order related
+ public static final ByteOrder nativeByteOrder = ByteOrder.nativeOrder();
+ public static final ByteOrder nonNativeByteOrder = nativeByteOrder == ByteOrder.LITTLE_ENDIAN
+ ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
private Util() { }
+ //Byte Order Related
+
+ /**
+ * Returns the Native Byte Order
+ * @return the Native Byte Order
+ */
+ public static final ByteOrder getNativeByteOrder() {
+ return nativeByteOrder;
+ }
+
+ /**
+ * Returns true if the given byteOrder is the same as the native byte order.
+ * @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) {
+ if (byteOrder == null) {
+ throw new IllegalArgumentException("ByteOrder parameter cannot be null.");
+ }
+ return Util.nativeByteOrder == byteOrder;
+ }
+
+
/**
* Searches a range of the specified array of longs for the specified value using the binary
* search algorithm. The range must be sorted method) prior to making this call.
diff --git a/src/main/java/org/apache/datasketches/memory/WritableMemory.java b/src/main/java/org/apache/datasketches/memory/WritableMemory.java
index 39eaef7..84f3d85 100644
--- a/src/main/java/org/apache/datasketches/memory/WritableMemory.java
+++ b/src/main/java/org/apache/datasketches/memory/WritableMemory.java
@@ -90,7 +90,7 @@ public abstract class WritableMemory extends Memory {
* @throws IOException file not found or a RuntimeException.
*/
public static WritableMapHandle map(final File file) throws IOException {
- return map(file, 0, file.length(), BaseState.nativeByteOrder);
+ return map(file, 0, file.length(), Util.nativeByteOrder);
}
/**
@@ -157,7 +157,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableDirectHandle allocateDirect(final long capacityBytes,
final MemoryRequestServer memReqSvr) {
- return BaseWritableMemoryImpl.wrapDirect(capacityBytes, BaseState.nativeByteOrder, memReqSvr);
+ return BaseWritableMemoryImpl.wrapDirect(capacityBytes, Util.nativeByteOrder, memReqSvr);
}
//REGIONS
@@ -243,7 +243,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory allocate(final int capacityBytes) {
final byte[] arr = new byte[capacityBytes];
- return wrap(arr, BaseState.nativeByteOrder);
+ return wrap(arr, Util.nativeByteOrder);
}
/**
@@ -272,7 +272,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final boolean[] arr) {
final long lengthBytes = arr.length << Prim.BOOLEAN.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
/**
@@ -286,7 +286,7 @@ public abstract class WritableMemory extends Memory {
* @return a new WritableMemory for write operations on the given primitive array.
*/
public static WritableMemory wrap(final byte[] arr) {
- return WritableMemory.wrap(arr, 0, arr.length, BaseState.nativeByteOrder);
+ return WritableMemory.wrap(arr, 0, arr.length, Util.nativeByteOrder);
}
/**
@@ -335,7 +335,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final char[] arr) {
final long lengthBytes = arr.length << Prim.CHAR.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
/**
@@ -350,7 +350,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final short[] arr) {
final long lengthBytes = arr.length << Prim.SHORT.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
/**
@@ -365,7 +365,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final int[] arr) {
final long lengthBytes = arr.length << Prim.INT.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
/**
@@ -380,7 +380,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final long[] arr) {
final long lengthBytes = arr.length << Prim.LONG.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
/**
@@ -395,7 +395,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final float[] arr) {
final long lengthBytes = arr.length << Prim.FLOAT.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
/**
@@ -410,7 +410,7 @@ public abstract class WritableMemory extends Memory {
*/
public static WritableMemory wrap(final double[] arr) {
final long lengthBytes = arr.length << Prim.DOUBLE.shift();
- return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, BaseState.nativeByteOrder);
+ return BaseWritableMemoryImpl.wrapHeapArray(arr, 0L, lengthBytes, false, Util.nativeByteOrder);
}
//END OF CONSTRUCTOR-TYPE METHODS
@@ -640,6 +640,7 @@ public abstract class WritableMemory extends Memory {
*/
public abstract void setBits(long offsetBytes, byte bitMask);
+
//OTHER WRITABLE API METHODS
/**
* For Direct Memory only. Other types of backing resources will return null.
@@ -653,5 +654,5 @@ public abstract class WritableMemory extends Memory {
public MemoryRequestServer getMemoryRequestServer() {
return null;
}
-
+
}
diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
index 877ee5c..6a37003 100644
--- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
@@ -24,9 +24,12 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.fail;
-import org.apache.datasketches.memory.BaseState;
-import org.apache.datasketches.memory.BaseWritableMemoryImpl;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.ByteOrder;
+
import org.apache.datasketches.memory.MemoryRequestServer;
+import org.apache.datasketches.memory.Util;
import org.apache.datasketches.memory.WritableDirectHandle;
import org.apache.datasketches.memory.WritableHandle;
import org.apache.datasketches.memory.WritableMemory;
@@ -35,23 +38,28 @@ import org.testng.annotations.Test;
@SuppressWarnings("javadoc")
public class AllocateDirectMemoryTest {
-
+
@Test
public void simpleAllocateDirect() {
int longs = 32;
- WritableMemory wMem1;
+ WritableMemory wMem;
try (WritableHandle wh = WritableMemory.allocateDirect(longs << 3)) {
- wMem1 = wh.get();
+ wMem = wh.get();
for (int i = 0; i<longs; i++) {
- wMem1.putLong(i << 3, i);
- assertEquals(wMem1.getLong(i << 3), i);
+ wMem.putLong(i << 3, i);
+ assertEquals(wMem.getLong(i << 3), i);
}
}
+ //The TWR block has exited, so the memory should be invalid
try {
- wMem1.checkValid();
+ final Class<?> wMemClass = wMem.getClass();
+ Method method = ReflectUtil.getMethod(wMemClass, "checkValid", (Class<?>[])null);
+ method.invoke(wMem, (Object[]) null);
+ //wMem.checkValid();
fail();
- } catch (IllegalStateException e) {
- //ok
+ } catch (final Exception e) {
+ if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+ else { throw new RuntimeException(e); }
}
}
@@ -87,19 +95,24 @@ public class AllocateDirectMemoryTest {
try (WritableHandle wh = WritableMemory.allocateDirect(128, null)) {
WritableMemory wmem = wh.get();
assertNotNull(wmem.getMemoryRequestServer());
-
-
}
}
@Test
public void checkNonNativeDirect() { //not allowed in public API
- try (WritableDirectHandle h =
- BaseWritableMemoryImpl.wrapDirect(8, BaseState.nonNativeByteOrder, null)) {
+ Class<?> bwMemImpl = ReflectUtil.getClass("org.apache.datasketches.memory.BaseWritableMemoryImpl");
+ Method wrapDirectMethod =
+ ReflectUtil.getMethod(bwMemImpl, "wrapDirect", long.class, ByteOrder.class, MemoryRequestServer.class);
+ try (WritableDirectHandle h = (WritableDirectHandle)
+ wrapDirectMethod.invoke(wrapDirectMethod, 8, Util.nonNativeByteOrder, null)) {
+ //BaseWritableMemoryImpl.wrapDirect(8, Util.nonNativeByteOrder, null)) {
WritableMemory wmem = h.get();
wmem.putChar(0, (char) 1);
assertEquals(wmem.getByte(1), (byte) 1);
+ } catch (final Exception e) {
+ if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+ else { throw new RuntimeException(e); }
}
}
@@ -108,16 +121,25 @@ public class AllocateDirectMemoryTest {
final long cap = 128;
try (WritableDirectHandle wdh = WritableMemory.allocateDirect(cap)) {
wdh.close(); //explicit close. Does the work of closing
- wdh.direct.close(); //redundant
} //end of scope call to Cleaner/Deallocator also will be redundant
}
@AfterClass
public void checkDirectCounter() {
- final long count = BaseState.getCurrentDirectMemoryAllocations();
- if (count != 0) {
- println(""+count);
- fail();
+ final Class<?> baseStateClass = ReflectUtil.getClass("org.apache.datasketches.memory.BaseState");
+ final Method currDirMemAllocMethod =
+ ReflectUtil.getMethod(baseStateClass, "getCurrentDirectMemoryAllocations", (Class<?>[])null);
+ long count;
+ try {
+ count = (long) currDirMemAllocMethod.invoke(currDirMemAllocMethod, (Object[])null);
+ //final long count = BaseState.getCurrentDirectMemoryAllocations();
+ if (count != 0) {
+ println(""+count);
+ fail();
+ }
+ } catch (final Exception e) {
+ if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+ else { throw new RuntimeException(e); }
}
}
diff --git a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
index dd56842..25af375 100644
--- a/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/AllocateDirectWritableMapMemoryTest.java
@@ -24,8 +24,8 @@
package org.apache.datasketches.memory.test;
import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.datasketches.memory.AllocateDirectMap.isFileReadOnly;
-import static org.apache.datasketches.memory.Util.getResourceFile;
+//import static org.apache.datasketches.memory.AllocateDirectMap.isFileReadOnly;
+import static org.apache.datasketches.memory.Util.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
@@ -35,12 +35,14 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
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.Util;
import org.apache.datasketches.memory.WritableHandle;
import org.apache.datasketches.memory.WritableMapHandle;
import org.apache.datasketches.memory.WritableMemory;
@@ -130,7 +132,7 @@ public class AllocateDirectWritableMapMemoryTest {
file.deleteOnExit(); //comment out if you want to examine the file.
final long bytes = 8;
- try (WritableMapHandle h = WritableMemory.map(file, 0L, bytes, BaseState.nonNativeByteOrder)) {
+ try (WritableMapHandle h = WritableMemory.map(file, 0L, bytes, Util.nonNativeByteOrder)) {
WritableMemory wmem = h.get();
wmem.putChar(0, (char) 1);
assertEquals(wmem.getByte(1), (byte) 1);
@@ -148,7 +150,15 @@ public class AllocateDirectWritableMapMemoryTest {
@Test(expectedExceptions = ReadOnlyException.class)
public void simpleMap2() throws IOException {
File file = getResourceFile("GettysburgAddress.txt");
- assertTrue(isFileReadOnly(file));
+ final Class<?> allocDirMapClass = ReflectUtil.getClass("org.apache.datasketches.memory.AllocateDirectMap");
+ final Method roMethod = ReflectUtil.getMethod(allocDirMapClass, "isFileReadOnly", file.getClass());
+ try {
+ assertTrue((boolean)roMethod.invoke(roMethod, file));
+ //assertTrue(isFileReadOnly(file));
+ } catch (final Exception e) {
+ if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+ else { throw new RuntimeException(e); }
+ }
try (WritableMapHandle rh = WritableMemory.map(file)) {
//
}
@@ -219,19 +229,38 @@ public class AllocateDirectWritableMapMemoryTest {
public void checkExplicitClose() throws Exception {
File file = getResourceFile("GettysburgAddress.txt");
try (MapHandle wmh = Memory.map(file)) {
- wmh.close(); //explicit close. Does the work of closing
- wmh.dirMap.close(); //redundant
+ wmh.close(); //explicit close.
} //end of scope call to Cleaner/Deallocator also will be redundant
}
@AfterClass
- public void checkMapCounter() {
- final long count = BaseState.getCurrentDirectMemoryMapAllocations();
- if (count != 0) {
- println(""+count);
- fail();
+ public void checkDirectCounter() {
+ final Class<?> baseStateClass = ReflectUtil.getClass("org.apache.datasketches.memory.BaseState");
+ final Method currDirMemAllocMethod =
+ ReflectUtil.getMethod(baseStateClass, "getCurrentDirectMemoryMapAllocations", (Class<?>[])null);
+ long count;
+ try {
+ count = (long) currDirMemAllocMethod.invoke(currDirMemAllocMethod, (Object[])null);
+ //final long count = BaseState.getCurrentDirectMemoryMapAllocations();
+ if (count != 0) {
+ println(""+count);
+ fail();
+ }
+ } catch (final Exception e) {
+ if (e instanceof IllegalStateException || e instanceof InvocationTargetException) { } //OK
+ else { throw new RuntimeException(e); }
}
}
+
+
+// @AfterClass
+// public void checkMapCounter() {
+// final long count = BaseState.getCurrentDirectMemoryMapAllocations();
+// if (count != 0) {
+// println(""+count);
+// fail();
+// }
+// }
@Test
public void printlnTest() {
diff --git a/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
index 2151b05..21045ff 100644
--- a/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
+++ b/src/test/java/org/apache/datasketches/memory/test/BaseStateTest.java
@@ -27,11 +27,11 @@ import static org.testng.Assert.fail;
import java.nio.ByteOrder;
-import org.apache.datasketches.memory.BaseState;
import org.apache.datasketches.memory.Buffer;
import org.apache.datasketches.memory.Memory;
import org.apache.datasketches.memory.Prim;
import org.apache.datasketches.memory.StepBoolean;
+import org.apache.datasketches.memory.Util;
import org.apache.datasketches.memory.WritableBuffer;
import org.apache.datasketches.memory.WritableMemory;
import org.testng.annotations.Test;
@@ -90,7 +90,9 @@ public class BaseStateTest {
@Test
public void checkGetNativeBaseOffset_Heap() {
- WritableMemory wmem = WritableMemory.allocate(8);
+ WritableMemory wmem = WritableMemory.allocate(8); //heap
+ final long offset;
+
assertEquals(wmem.getNativeBaseOffset(), 0L);
}
@@ -102,7 +104,7 @@ public class BaseStateTest {
@Test(expectedExceptions = IllegalArgumentException.class)
public void checkByteOrderNull() {
- BaseState.isNativeByteOrder(null);
+ Util.isNativeByteOrder(null);
fail();
}
diff --git a/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java b/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
new file mode 100644
index 0000000..c60e113
--- /dev/null
+++ b/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.test;
+
+import java.lang.reflect.*;
+
+public class ReflectUtil {
+
+ /**
+ * Gets a Class reference to the given class loaded by the SystemClassLoader.
+ * This will work for private, package-private and abstract classes.
+ * @param fullyQualifiedBinaryName the binary name is the name of the class file on disk. This does not instantiate
+ * a concrete class, but allows access to constructors, static fields and static methods.
+ * @return the Class object of the given class.
+ */
+ public static Class<?> getClass(String fullyQualifiedBinaryName) {
+ try {
+ ClassLoader scl = ClassLoader.getSystemClassLoader();
+ return scl.loadClass(fullyQualifiedBinaryName);
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Gets a declared constructor given the owner class and parameter types
+ * @param ownerClass the Class<?> object of the class loaded by the SystemClassLoader.
+ * @param parameterTypes parameter types for the constructor
+ * @return the constructor
+ */
+ public static Constructor<?> getConstructor(final Class<?> ownerClass, final Class<?>... parameterTypes ) {
+ try {
+ Constructor<?> ctor = ownerClass.getDeclaredConstructor(parameterTypes);
+ ctor.setAccessible(true);
+ return ctor;
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Gets a class instance from its constructor and initializing arguments.
+ * @param constructor the given Constructor
+ * @param initargs the initializing arguments
+ * @return the instantiated class.
+ */
+ public static Object getInstance(final Constructor<?> constructor, final Object... initargs) {
+ try {
+ constructor.setAccessible(true);
+ return constructor.newInstance(initargs);
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ /**
+ * Gets a declared field of the given the loaded owner class and field name. The accessible flag will be set true.
+ * @param ownerClass the Class<?> object of the class loaded by the SystemClassLoader.
+ * @param fieldName the desired field name
+ * @return the desired field.
+ */
+ public static Field getField(final Class<?> ownerClass, final String fieldName) {
+ try {
+ Field field = ownerClass.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ return field;
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Gets a field value given the loaded owner class and the Field. The accessible flag will be set true.
+ * @param ownerClass the loaded class owning the field
+ * @param field The Field object
+ * @return the returned value as an object.
+ */
+ public static Object getFieldValue(final Class<?> ownerClass, final Field field) {
+ try {
+ field.setAccessible(true);
+ return field.get(ownerClass);
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Gets a declared method of the given the loaded owning class, method name and parameter types.
+ * The accessible flag will be set true.
+ * @param ownerClass the given
+ * @param methodName the given method name
+ * @param parameterTypes the list of parameter types
+ * @return the desired method.
+ */
+ public static Method getMethod(final Class<?> ownerClass, final String methodName, final Class<?>... parameterTypes ) {
+ try {
+ Method method = (parameterTypes == null)
+ ? ownerClass.getDeclaredMethod(methodName)
+ : ownerClass.getDeclaredMethod(methodName, parameterTypes);
+ method.setAccessible(true);
+ return method;
+ } catch (final Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+// /**
+// * Invoke the given method along with its concreteOwnerClass and method argueents.
+// * Any exception is returned to the caller.
+// * @param method the given method
+// * @param concreteOwnerInstance the concrete owning class instance
+// * @param args the method arguments
+// * @return the result of the invoked method.
+// */
+// public static Object invokeMethod(
+// final Method method,
+// final Object concreteOwnerInstance,
+// Object... args) throws IllegalAccessException, InvocationTargetException, IllegalArgumentException {
+// method.setAccessible(true);
+// return method.invoke(concreteOwnerInstance, args);
+// }
+
+}
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org