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/08/10 01:51:43 UTC
[datasketches-memory] branch DS-javaIssue358 updated: This commit
fixes the datasketches-java issue #358,
which was actually an issue in Memory, and the Druid issue #11544.
This is an automated email from the ASF dual-hosted git repository.
leerho pushed a commit to branch DS-javaIssue358
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git
The following commit(s) were added to refs/heads/DS-javaIssue358 by this push:
new 25a4d7c This commit fixes the datasketches-java issue #358, which was actually an issue in Memory, and the Druid issue #11544.
25a4d7c is described below
commit 25a4d7c03b7b5da2514d85e3fa1dcb692548c76e
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Mon Aug 9 18:51:28 2021 -0700
This commit fixes the datasketches-java issue #358, which was actually
an issue in Memory, and the Druid issue #11544.
---
.../memory/test/AllocateDirectMemoryTest.java | 7 +-
.../test/ExampleMemoryRequestServerTest.java | 7 +-
.../datasketches/memory/test/LeafImplTest.java | 410 ++++++++-------------
.../datasketches/memory/test/MemoryTest.java | 2 +-
.../datasketches/memory/test/ReflectUtil.java | 10 -
.../memory/test/WritableMemoryTest.java | 2 +-
.../apache/datasketches/memory/WritableBuffer.java | 10 +-
.../apache/datasketches/memory/WritableMemory.java | 33 +-
.../internal/BBNonNativeWritableBufferImpl.java | 12 +-
.../internal/BBNonNativeWritableMemoryImpl.java | 6 +-
.../memory/internal/BBWritableBufferImpl.java | 12 +-
.../memory/internal/BBWritableMemoryImpl.java | 6 +-
.../memory/internal/BaseStateImpl.java | 112 ++++--
.../memory/internal/WritableMemoryImpl.java | 6 +-
14 files changed, 284 insertions(+), 351 deletions(-)
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
index 4382ab5..c64679c 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/AllocateDirectMemoryTest.java
@@ -87,7 +87,7 @@ public class AllocateDirectMemoryTest {
@Test
public void checkNullMemoryRequestServer() throws Exception {
- try (WritableHandle wh = WritableMemory.allocateDirect(128, null)) {
+ try (WritableHandle wh = WritableMemory.allocateDirect(128, Util.nativeByteOrder, null)) {
WritableMemory wmem = wh.getWritable();
assertNotNull(wmem.getMemoryRequestServer());
}
@@ -95,9 +95,8 @@ public class AllocateDirectMemoryTest {
@Test
- public void checkNonNativeDirect() throws Exception { //not allowed in public API
- try (WritableHandle h = ReflectUtil.wrapDirect(8, Util.nonNativeByteOrder, null)) {
- //BaseWritableMemory.wrapDirect(8, Util.nonNativeByteOrder, null)) {
+ public void checkNonNativeDirect() throws Exception {
+ try (WritableHandle h = WritableMemory.allocateDirect(128, Util.nonNativeByteOrder, null)) {
WritableMemory wmem = h.getWritable();
wmem.putChar(0, (char) 1);
assertEquals(wmem.getByte(1), (byte) 1);
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java
index 398409a..e1a4bd9 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ExampleMemoryRequestServerTest.java
@@ -21,6 +21,7 @@ package org.apache.datasketches.memory.test;
import static org.testng.Assert.assertFalse;
+import java.nio.ByteOrder;
import java.util.IdentityHashMap;
import org.apache.datasketches.memory.MemoryRequestServer;
@@ -61,7 +62,7 @@ public class ExampleMemoryRequestServerTest {
public void checkExampleMemoryRequestServer2() throws Exception {
int bytes = 8;
ExampleMemoryRequestServer svr = new ExampleMemoryRequestServer();
- try (WritableHandle handle = WritableMemory.allocateDirect(bytes, svr)) {
+ try (WritableHandle handle = WritableMemory.allocateDirect(bytes, ByteOrder.nativeOrder(), svr)) {
WritableMemory wMem = handle.getWritable();
MemoryClient client = new MemoryClient(wMem);
client.process();
@@ -73,7 +74,7 @@ public class ExampleMemoryRequestServerTest {
@Test(expectedExceptions = IllegalArgumentException.class)
public void checkZeroCapacity() {
ExampleMemoryRequestServer svr = new ExampleMemoryRequestServer();
- WritableMemory.allocateDirect(0, svr);
+ WritableMemory.allocateDirect(0, ByteOrder.nativeOrder(), svr);
}
/**
@@ -126,7 +127,7 @@ public class ExampleMemoryRequestServerTest {
@SuppressWarnings("resource")
@Override
public WritableMemory request(long capacityBytes) {
- WritableHandle handle = WritableMemory.allocateDirect(capacityBytes, this);
+ WritableHandle handle = WritableMemory.allocateDirect(capacityBytes, ByteOrder.nativeOrder(), this);
WritableMemory wmem = handle.getWritable();
map.put(wmem, handle); //We track the newly allocated memory and its handle.
return wmem;
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
index ac59599..df17041 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/LeafImplTest.java
@@ -19,6 +19,8 @@
package org.apache.datasketches.memory.test;
+import static org.apache.datasketches.memory.internal.Util.nativeByteOrder;
+import static org.apache.datasketches.memory.internal.Util.nonNativeByteOrder;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
@@ -30,12 +32,11 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import org.apache.datasketches.memory.WritableHandle;
-import org.apache.datasketches.memory.internal.Util;
+import org.apache.datasketches.memory.MemoryRequestServer;
import org.apache.datasketches.memory.WritableBuffer;
-
-import org.apache.datasketches.memory.WritableMemory;
+import org.apache.datasketches.memory.WritableHandle;
import org.apache.datasketches.memory.WritableMapHandle;
+import org.apache.datasketches.memory.WritableMemory;
import org.testng.annotations.Test;
/**
@@ -43,78 +44,80 @@ import org.testng.annotations.Test;
*/
@SuppressWarnings("javadoc")
public class LeafImplTest {
- static final ByteOrder LE = ByteOrder.LITTLE_ENDIAN;
- static final ByteOrder BE = ByteOrder.BIG_ENDIAN;
+ private static final ByteOrder NO = nativeByteOrder;
+ private static final ByteOrder NNO = nonNativeByteOrder;
+ private static final MemoryRequestServer dummyMemReqSvr = new DummyMemoryRequestServer();
+
+ private static ByteOrder otherOrder(ByteOrder order) { return (order == NO) ? NNO : NO; }
+
+ static class DummyMemoryRequestServer implements MemoryRequestServer {
+ @Override
+ public WritableMemory request(long capacityBytes) { return null; }
+ @Override
+ public void requestClose(WritableMemory memToClose, WritableMemory newMemory) { }
+ }
@Test
public void checkDirectLeafs() throws Exception {
long off = 0;
long cap = 128;
- try (WritableHandle wdh = WritableMemory.allocateDirect(cap)) {
- WritableMemory memLE = wdh.getWritable();
- memLE.putShort(0, (short) 1);
- checkDirect(memLE, off, cap);
+ // Off Heap, Native order, No ByteBuffer, has MemReqSvr
+ try (WritableHandle wdh = WritableMemory.allocateDirect(cap, NO, dummyMemReqSvr)) {
+ WritableMemory memNO = wdh.getWritable();
+ memNO.putShort(0, (short) 1);
+ assertNull(ReflectUtil.getUnsafeObject(memNO));
+ assertTrue(memNO.isDirect());
+ checkCombinations(memNO, off, cap, memNO.isDirect(), NO, false, true);
+ }
+ // Off Heap, Non Native order, No ByteBuffer, has MemReqSvr
+ try (WritableHandle wdh = WritableMemory.allocateDirect(cap, NNO, dummyMemReqSvr)) {
+ WritableMemory memNNO = wdh.getWritable();
+ memNNO.putShort(0, (short) 1);
+ assertNull(ReflectUtil.getUnsafeObject(memNNO));
+ assertTrue(memNNO.isDirect());
+ checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNO, false, true);
}
}
- private static void checkDirect(WritableMemory mem, long off, long cap) {
- assertEquals(mem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(mem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(mem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(mem.getByteBuffer() == null);
- assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(mem.getMemoryRequestServer() != null);
- assertTrue(mem.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(mem) == null);
- //assertTrue(mem.getUnsafeObject() == null);
- assertTrue(mem.isValid() == true);
-
- WritableBuffer buf = mem.asWritableBuffer();
-
- assertEquals(buf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(buf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(buf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
-
- assertTrue(buf.getByteBuffer() == null);
- assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(buf.getMemoryRequestServer() != null);
- assertTrue(buf.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(buf) == null);
- //assertTrue(buf.getUnsafeObject() == null);
- assertTrue(buf.isValid() == true);
-
- WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
-
- assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnMem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(nnMem.getByteBuffer() == null);
- assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnMem.getMemoryRequestServer() != null);
- assertTrue(nnMem.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(nnMem) == null);
- //assertTrue(nnMem.getUnsafeObject() == null);
- assertTrue(nnMem.isValid() == true);
-
- WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
-
- assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnBuf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
-
- assertTrue(nnBuf.getByteBuffer() == null);
- assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnBuf.getMemoryRequestServer() != null);
- assertTrue(nnBuf.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(nnBuf) == null);
- //assertTrue(nnBuf.getUnsafeObject() == null);
- assertTrue(nnBuf.isValid() == true);
+ @Test
+ public void checkByteBufferLeafs() {
+ long off = 0;
+ long cap = 128;
+ //BB on heap, native order, has ByteBuffer, has MemReqSvr
+ ByteBuffer bb = ByteBuffer.allocate((int)cap);
+ bb.order(NO);
+ bb.putShort(0, (short) 1);
+ WritableMemory mem = WritableMemory.writableWrap(bb, NO, dummyMemReqSvr);
+ assertEquals(bb.isDirect(), mem.isDirect());
+ assertNotNull(ReflectUtil.getUnsafeObject(mem));
+ checkCombinations(mem, off, cap, mem.isDirect(), mem.getTypeByteOrder(), true, true);
+
+ //BB off heap, native order, has ByteBuffer, has MemReqSvr
+ ByteBuffer dbb = ByteBuffer.allocateDirect((int)cap);
+ dbb.order(NO);
+ dbb.putShort(0, (short) 1);
+ mem = WritableMemory.writableWrap(dbb, NO, dummyMemReqSvr);
+ assertEquals(dbb.isDirect(), mem.isDirect());
+ assertNull(ReflectUtil.getUnsafeObject(mem));
+ checkCombinations(mem, off, cap, mem.isDirect(), mem.getTypeByteOrder(), true, true);
+
+ //BB on heap, non native order, has ByteBuffer, has MemReqSvr
+ bb = ByteBuffer.allocate((int)cap);
+ bb.order(NNO);
+ bb.putShort(0, (short) 1);
+ mem = WritableMemory.writableWrap(bb, NNO, dummyMemReqSvr);
+ assertEquals(bb.isDirect(), mem.isDirect());
+ assertNotNull(ReflectUtil.getUnsafeObject(mem));
+ checkCombinations(mem, off, cap, mem.isDirect(), mem.getTypeByteOrder(), true, true);
+
+ //BB off heap, non native order, has ByteBuffer, has MemReqSvr
+ dbb = ByteBuffer.allocateDirect((int)cap);
+ dbb.order(NNO);
+ dbb.putShort(0, (short) 1);
+ mem = WritableMemory.writableWrap(dbb, NNO, dummyMemReqSvr);
+ assertEquals(dbb.isDirect(), mem.isDirect());
+ assertNull(ReflectUtil.getUnsafeObject(mem));
+ checkCombinations(mem, off, cap, mem.isDirect(), mem.getTypeByteOrder(), true, true);
}
@Test
@@ -133,103 +136,60 @@ public class LeafImplTest {
assertTrue(file.setWritable(true, false)); //writable=true, ownerOnly=false
assertTrue(file.isFile());
file.deleteOnExit(); //comment out if you want to examine the file.
-
- try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, Util.nativeByteOrder)) {
- WritableMemory mem = wmh.getWritable();
- mem.putShort(0, (short) 1);
- assertEquals(mem.getByte(0), (byte) 1);
- checkMap(mem, off, cap);
+ // Off Heap, Native order, No ByteBuffer, No MemReqSvr
+ try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, NO)) {
+ WritableMemory memNO = wmh.getWritable();
+ memNO.putShort(0, (short) 1);
+ assertNull(ReflectUtil.getUnsafeObject(memNO));
+ assertTrue(memNO.isDirect());
+ checkCombinations(memNO, off, cap, memNO.isDirect(), NO, false, false);
+ }
+ // Off heap, Non Native order, No ByteBuffer, no MemReqSvr
+ try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, NNO)) {
+ WritableMemory memNNO = wmh.getWritable();
+ memNNO.putShort(0, (short) 1);
+ assertNull(ReflectUtil.getUnsafeObject(memNNO));
+ assertTrue(memNNO.isDirect());
+ checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNO, false, false);
}
}
-
- private static void checkMap(WritableMemory mem, long off, long cap) {
- assertEquals(mem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(mem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(mem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(mem.getByteBuffer() == null);
- assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(mem.getMemoryRequestServer() == null);
- assertTrue(mem.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(mem) == null);
- //assertTrue(mem.getUnsafeObject() == null);
- assertTrue(mem.isValid() == true);
-
- WritableBuffer buf = mem.asWritableBuffer();
-
- assertEquals(buf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(buf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(buf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
-
- assertTrue(buf.getByteBuffer() == null);
- assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(buf.getMemoryRequestServer() == null);
- assertTrue(buf.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(buf) == null);
- //assertTrue(buf.getUnsafeObject() == null);
- assertTrue(buf.isValid() == true);
-
- WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
-
- assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnMem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(nnMem.getByteBuffer() == null);
- assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnMem.getMemoryRequestServer() == null);
- assertTrue(nnMem.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(nnMem) == null);
- //assertTrue(nnMem.getUnsafeObject() == null);
- assertTrue(nnMem.isValid() == true);
-
- WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
-
- assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnBuf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
-
- assertTrue(nnBuf.getByteBuffer() == null);
- assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnBuf.getMemoryRequestServer() == null);
- assertTrue(nnBuf.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(nnBuf) == null);
- //assertTrue(nnBuf.getUnsafeObject() == null);
- assertTrue(nnBuf.isValid() == true);
- }
-
+
@Test
- public void checkByteBufferLeafs() {
+ public void checkHeapLeafs() {
long off = 0;
long cap = 128;
- ByteBuffer bb = ByteBuffer.allocate((int)cap);
- bb.order(ByteOrder.nativeOrder());
- bb.putShort(0, (short) 1);
- WritableMemory mem = WritableMemory.writableWrap(bb);
- checkByteBuffer(mem, off, cap, false);
-
- ByteBuffer dbb = ByteBuffer.allocateDirect((int)cap);
- dbb.order(ByteOrder.nativeOrder());
- dbb.putShort(0, (short) 1);
- mem = WritableMemory.writableWrap(dbb);
- checkByteBuffer(mem, off, cap, true);
+ // On Heap, Native order, No ByteBuffer, No MemReqSvr
+ WritableMemory memNO = WritableMemory.allocate((int)cap); //assumes NO
+ memNO.putShort(0, (short) 1);
+ assertNotNull(ReflectUtil.getUnsafeObject(memNO));
+ assertFalse(memNO.isDirect());
+ checkCombinations(memNO, off, cap, memNO.isDirect(), NO, false, false);
+ // On Heap, Non-native order, No ByteBuffer, No MemReqSvr
+ WritableMemory memNNO = WritableMemory.allocate((int)cap, NNO);
+ memNNO.putShort(0, (short) 1);
+ assertNotNull(ReflectUtil.getUnsafeObject(memNNO));
+ assertFalse(memNNO.isDirect());
+ checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNO, false, false);
}
- private static void checkByteBuffer(WritableMemory mem, long off, long cap, boolean direct) {
- assertEquals(mem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(mem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(mem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(mem.getByteBuffer() != null);
- assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
- assertNotNull(mem.getMemoryRequestServer());
+ private static void checkCombinations(WritableMemory mem, long off, long cap,
+ boolean direct, ByteOrder bo, boolean hasByteBuffer, boolean hasMemReqSvr) {
+ ByteOrder oo = otherOrder(bo);
+
+ assertEquals(mem.writableRegion(off, cap, bo).getShort(0), 1);
+ assertEquals(mem.writableRegion(off, cap, oo).getShort(0), 256);
+
+ assertEquals(mem.asWritableBuffer(bo).getShort(0), 1);
+ assertEquals(mem.asWritableBuffer(oo).getShort(0), 256);
+
+ ByteBuffer bb = mem.getByteBuffer();
+ assertTrue( hasByteBuffer ? bb != null : bb == null);
+
+ assertTrue(mem.getTypeByteOrder() == bo);
+
+ if (hasMemReqSvr) { assertTrue(mem.getMemoryRequestServer() instanceof DummyMemoryRequestServer); }
+
Object obj = ReflectUtil.getUnsafeObject(mem);
- //Object obj = mem.getUnsafeObject();
if (direct) {
assertTrue(mem.isDirect());
assertNull(obj);
@@ -237,20 +197,24 @@ public class LeafImplTest {
assertFalse(mem.isDirect());
assertNotNull(obj);
}
+
assertTrue(mem.isValid() == true);
WritableBuffer buf = mem.asWritableBuffer();
- assertEquals(buf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(buf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(buf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
+ assertEquals(buf.writableRegion(off, cap, bo).getShort(0), 1);
+ assertEquals(buf.writableRegion(off, cap, oo).getShort(0), 256);
+ assertEquals(buf.writableDuplicate(bo).getShort(0), 1);
+ assertEquals(buf.writableDuplicate(oo).getShort(0), 256);
+
+ bb = buf.getByteBuffer();
+ assertTrue(hasByteBuffer ? bb != null : bb == null);
+
+ assertTrue(buf.getTypeByteOrder() == bo);
+
+ if (hasMemReqSvr) { assertTrue(buf.getMemoryRequestServer() instanceof DummyMemoryRequestServer); }
- assertTrue(buf.getByteBuffer() != null);
- assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(buf.getMemoryRequestServer() == null);
obj = ReflectUtil.getUnsafeObject(buf);
- //obj = buf.getUnsafeObject();
if (direct) {
assertTrue(buf.isDirect());
assertNull(obj);
@@ -258,20 +222,24 @@ public class LeafImplTest {
assertFalse(buf.isDirect());
assertNotNull(obj);
}
+
assertTrue(buf.isValid() == true);
- WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
+ WritableMemory nnMem = mem.writableRegion(off, cap, oo);
- assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnMem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
+ assertEquals(nnMem.writableRegion(off, cap, bo).getShort(0), 1);
+ assertEquals(nnMem.writableRegion(off, cap, oo).getShort(0), 256);
+ assertEquals(nnMem.asWritableBuffer(bo).getShort(0), 1);
+ assertEquals(nnMem.asWritableBuffer(oo).getShort(0), 256);
- assertTrue(nnMem.getByteBuffer() != null);
- assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertNotNull(nnMem.getMemoryRequestServer());
+ bb = nnMem.getByteBuffer();
+ assertTrue( hasByteBuffer ? bb != null : bb == null);
+
+ assertTrue(nnMem.getTypeByteOrder() == oo);
+
+ if (hasMemReqSvr) { assertTrue(nnMem.getMemoryRequestServer() instanceof DummyMemoryRequestServer); }
+
obj = ReflectUtil.getUnsafeObject(nnMem);
- //obj = nnMem.getUnsafeObject();
if (direct) {
assertTrue(nnMem.isDirect());
assertNull(obj);
@@ -279,20 +247,24 @@ public class LeafImplTest {
assertFalse(nnMem.isDirect());
assertNotNull(obj);
}
+
assertTrue(nnMem.isValid() == true);
- WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
+ WritableBuffer nnBuf = mem.asWritableBuffer(oo);
+
+ assertEquals(nnBuf.writableRegion(off, cap, bo).getShort(0), 1);
+ assertEquals(nnBuf.writableRegion(off, cap, oo).getShort(0), 256);
+ assertEquals(nnBuf.writableDuplicate(bo).getShort(0), 1);
+ assertEquals(nnBuf.writableDuplicate(oo).getShort(0), 256);
- assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnBuf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
+ bb = nnBuf.getByteBuffer();
+ assertTrue( hasByteBuffer ? bb != null : bb == null);
+
+ assertTrue(nnBuf.getTypeByteOrder() == oo);
+
+ if (hasMemReqSvr) { assertTrue(nnBuf.getMemoryRequestServer() instanceof DummyMemoryRequestServer); }
- assertTrue(nnBuf.getByteBuffer() != null);
- assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnBuf.getMemoryRequestServer() == null);
obj = ReflectUtil.getUnsafeObject(nnBuf);
- //obj = nnBuf.getUnsafeObject();
if (direct) {
assertTrue(nnBuf.isDirect());
assertNull(obj);
@@ -300,76 +272,8 @@ public class LeafImplTest {
assertFalse(nnBuf.isDirect());
assertNotNull(obj);
}
+
assertTrue(nnBuf.isValid() == true);
}
-
- @Test
- public void checkHeapLeafs() {
- long off = 0;
- long cap = 128;
- WritableMemory mem = WritableMemory.allocate((int)cap);
- mem.putShort(0, (short) 1);
- checkHeap(mem, off, cap);
- }
-
- private static void checkHeap(WritableMemory mem, long off, long cap) {
- assertEquals(mem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(mem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(mem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(mem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(mem.getByteBuffer() == null);
- assertTrue(mem.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(mem.getMemoryRequestServer() == null);
- assertFalse(mem.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(mem) != null);
- //assertTrue(mem.getUnsafeObject() != null);
- assertTrue(mem.isValid() == true);
-
- WritableBuffer buf = mem.asWritableBuffer();
-
- assertEquals(buf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(buf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(buf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(buf.writableDuplicate(BE).getShort(0), 256);
-
- assertTrue(buf.getByteBuffer() == null);
- assertTrue(buf.getTypeByteOrder() == Util.nativeByteOrder);
- assertTrue(buf.getMemoryRequestServer() == null);
- assertFalse(buf.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(buf) != null);
- //assertTrue(buf.getUnsafeObject() != null);
- assertTrue(buf.isValid() == true);
-
- WritableMemory nnMem = mem.writableRegion(off, cap, Util.nonNativeByteOrder);
-
- assertEquals(nnMem.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnMem.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnMem.asWritableBuffer(LE).getShort(0), 1);
- assertEquals(nnMem.asWritableBuffer(BE).getShort(0), 256);
-
- assertTrue(nnMem.getByteBuffer() == null);
- assertTrue(nnMem.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnMem.getMemoryRequestServer() == null);
- assertFalse(nnMem.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(nnMem) != null);
- //assertTrue(nnMem.getUnsafeObject() != null);
- assertTrue(nnMem.isValid() == true);
-
- WritableBuffer nnBuf = mem.asWritableBuffer(Util.nonNativeByteOrder);
-
- assertEquals(nnBuf.writableRegion(off, cap, LE).getShort(0), 1);
- assertEquals(nnBuf.writableRegion(off, cap, BE).getShort(0), 256);
- assertEquals(nnBuf.writableDuplicate(LE).getShort(0), 1);
- assertEquals(nnBuf.writableDuplicate(BE).getShort(0), 256);
-
- assertTrue(nnBuf.getByteBuffer() == null);
- assertTrue(nnBuf.getTypeByteOrder() == Util.nonNativeByteOrder);
- assertTrue(nnBuf.getMemoryRequestServer() == null);
- assertFalse(nnBuf.isDirect());
- assertTrue(ReflectUtil.getUnsafeObject(nnBuf) != null);
- //assertTrue(nnBuf.getUnsafeObject() != null);
- assertTrue(nnBuf.isValid() == true);
- }
-
+
}
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
index f6e5efc..08c4629 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/MemoryTest.java
@@ -458,7 +458,7 @@ public class MemoryTest {
@Test
public void wrapBigEndianAsLittle() {
ByteBuffer bb = ByteBuffer.allocate(64);
- bb.putChar(0, (char)1); //as BE
+ bb.putChar(0, (char)1); //as NNO
Memory mem = Memory.wrap(bb, ByteOrder.LITTLE_ENDIAN);
assertEquals(mem.getChar(0), 256);
}
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
index 814ac62..1999586 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/ReflectUtil.java
@@ -27,7 +27,6 @@ import java.lang.reflect.Method;
import java.nio.ByteOrder;
import org.apache.datasketches.memory.MemoryRequestServer;
-import org.apache.datasketches.memory.WritableHandle;
public final class ReflectUtil {
@@ -397,13 +396,4 @@ public final class ReflectUtil {
}
}
- static WritableHandle wrapDirect(final long capacityBytes,
- final ByteOrder byteOrder, final MemoryRequestServer memReqSvr) {
- try {
- return (WritableHandle) WRAP_DIRECT.invoke(null, capacityBytes, byteOrder, memReqSvr);
- } catch (final IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- throw new RuntimeException(e);
- }
- }
-
}
diff --git a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
index f9cbd78..4e00273 100644
--- a/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
+++ b/datasketches-memory-java8-tests/src/test/java/org/apache/datasketches/memory/test/WritableMemoryTest.java
@@ -46,7 +46,7 @@ public class WritableMemoryTest {
@Test
public void wrapBigEndianAsLittle() {
ByteBuffer bb = ByteBuffer.allocate(64);
- bb.putChar(0, (char)1); //as BE
+ bb.putChar(0, (char)1); //as NNO
WritableMemory wmem = WritableMemory.writableWrap(bb, ByteOrder.LITTLE_ENDIAN, null);
assertEquals(wmem.getChar(0), 256);
}
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 1b77930..9cfd4a5 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
@@ -55,8 +55,8 @@ public interface WritableBuffer extends Buffer {
static WritableBuffer writableWrap(ByteBuffer byteBuf, ByteOrder byteOrder, MemoryRequestServer memReqSvr) {
MemoryRequestServer mReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
return WritableBufferImpl.writableWrap(byteBuf, byteOrder, mReqSvr);
- }
-
+ }
+
//DUPLICATES
/**
* Returns a duplicate writable view of this Buffer with the same but independent values of
@@ -368,9 +368,9 @@ public interface WritableBuffer extends Buffer {
/**
* For ByteBuffer and Direct Memory backed resources only. Heap and Map backed resources will return null.
* Gets the MemoryRequestServer object used by dynamic Memory-backed objects
- * to request additional memory. To customize the actions of the MemoryRequestServer,
- * extend the MemoryRequestServer interfact and
- * set using {@link WritableMemory#allocateDirect(long, MemoryRequestServer)}.
+ * to request additional memory. To customize the actions of the MemoryRequestServer,
+ * extend the MemoryRequestServer interfact and
+ * set using {@link WritableMemory#allocateDirect(long, ByteOrder, MemoryRequestServer)}.
* If not explicity set, this returns the {@link DefaultMemoryRequestServer}.
* @return the MemoryRequestServer object (if direct memory) or null.
*/
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 29dd9c9..350836f 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
@@ -40,15 +40,15 @@ public interface WritableMemory extends Memory {
static WritableMemory writableWrap(ByteBuffer byteBuf) {
return WritableMemoryImpl.writableWrap(byteBuf);
}
-
+
/**
* Accesses the given ByteBuffer for write operations. The returned WritableMemory object has
* the given byte order, ignoring the byte order of the given ByteBuffer. If the capacity of
* the given ByteBuffer is zero the byte order of the returned WritableMemory object
* (as well as backing storage) is unspecified.
* @param byteBuf the given ByteBuffer, must not be null
- * @param byteOrder the byte order to be used, which may be independent of the byte order
- * state of the given ByteBuffer
+ * @param byteOrder the byte order to be used when reading and writing to the ByteBuffer.
+ * This is independent of the byte order state of the given ByteBuffer.
* @param memReqSvr A user-specified MemoryRequestServer. If null, the DefaultMemoryRequestServer is used.
* This is a callback mechanism for a user client to request a larger Memory.
* @return a new WritableMemory for write operations on the given ByteBuffer.
@@ -57,7 +57,7 @@ public interface WritableMemory extends Memory {
MemoryRequestServer mReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
return WritableMemoryImpl.writableWrap(byteBuf, byteOrder, mReqSvr);
}
-
+
//MAP
/**
* Maps the entire given file into native-ordered WritableMemory for write operations
@@ -73,7 +73,7 @@ public interface WritableMemory extends Memory {
static WritableMapHandle writableMap(File file) {
return WritableMemoryImpl.writableMap(file);
}
-
+
/**
* Maps the specified portion of the given file into Memory for write operations
* (including those > 2GB).
@@ -90,7 +90,7 @@ public interface WritableMemory extends Memory {
static WritableMapHandle writableMap(File file, long fileOffsetBytes, long capacityBytes, ByteOrder byteOrder) {
return WritableMemoryImpl.writableMap(file, fileOffsetBytes, capacityBytes, byteOrder);
}
-
+
//ALLOCATE DIRECT
/**
* Allocates and provides access to capacityBytes directly in native (off-heap) memory
@@ -113,7 +113,7 @@ public interface WritableMemory extends Memory {
static WritableHandle allocateDirect(long capacityBytes) {
return WritableMemoryImpl.allocateDirect(capacityBytes);
}
-
+
/**
* Allocates and provides access to capacityBytes directly in native (off-heap) memory
* leveraging the WritableMemory API. The allocated memory will be 8-byte aligned, but may not
@@ -125,16 +125,17 @@ public interface WritableMemory extends Memory {
* and to call <i>close()</i> when done.</p>
*
* @param capacityBytes the size of the desired memory in bytes.
+ * @param byteOrder the given byte order
* @param memReqSvr A user-specified MemoryRequestServer.
* This is a callback mechanism for a user client of direct memory to request more memory.
* @return WritableHandle for this off-heap resource.
* Please read Javadocs for {@link Handle}.
*/
- static WritableHandle allocateDirect(long capacityBytes, MemoryRequestServer memReqSvr) {
+ static WritableHandle allocateDirect(long capacityBytes, ByteOrder byteOrder, MemoryRequestServer memReqSvr) {
MemoryRequestServer mReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
- return WritableMemoryImpl.allocateDirect(capacityBytes, mReqSvr);
+ return WritableMemoryImpl.allocateDirect(capacityBytes, byteOrder, mReqSvr);
}
-
+
//REGIONS
/**
* A writable region is a writable view of this object.
@@ -207,7 +208,7 @@ public interface WritableMemory extends Memory {
*/
WritableBuffer asWritableBuffer(ByteOrder byteOrder);
-
+
//ALLOCATE HEAP VIA AUTOMATIC BYTE ARRAY
/**
* Creates on-heap WritableMemory with the given capacity and the native byte order. If the given
@@ -597,17 +598,17 @@ public interface WritableMemory extends Memory {
*/
void setBits(long offsetBytes, byte bitMask);
-
+
//OTHER WRITABLE API METHODS
/**
* For ByteBuffer and Direct Memory backed resources only. Heap and Map backed resources will return null.
* Gets the MemoryRequestServer object used by dynamic Memory-backed objects
- * to request additional memory. To customize the actions of the MemoryRequestServer,
- * extend the MemoryRequestServer interfact and
- * set using {@link WritableMemory#allocateDirect(long, MemoryRequestServer)}.
+ * to request additional memory. To customize the actions of the MemoryRequestServer,
+ * extend the MemoryRequestServer interfact and
+ * set using {@link WritableMemory#allocateDirect(long, ByteOrder, MemoryRequestServer)}.
* If not explicity set, this returns the {@link DefaultMemoryRequestServer}.
* @return the MemoryRequestServer object (if direct memory) or null.
*/
MemoryRequestServer getMemoryRequestServer();
-
+
}
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
index 584e4a3..88e3181 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
@@ -45,11 +45,13 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
final long capacityBytes,
final int typeId,
final ByteBuffer byteBuf,
+ final MemoryRequestServer memReqSvr,
final BaseWritableMemoryImpl originMemory) {
super(unsafeObj, nativeBaseOffset, regionOffset, capacityBytes, originMemory);
this.unsafeObj = unsafeObj;
this.nativeBaseOffset = nativeBaseOffset;
this.byteBuf = byteBuf;
+ this.memReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
this.typeId = (byte) (id | (typeId & 0x7));
}
@@ -60,10 +62,10 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
- type, byteBuf, originMemory)
+ type, byteBuf, memReqSvr, originMemory)
: new BBNonNativeWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
- type, byteBuf, originMemory);
+ type, byteBuf, memReqSvr, originMemory);
}
@Override
@@ -72,10 +74,10 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, originMemory)
+ type, byteBuf, memReqSvr, originMemory)
: new BBNonNativeWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, originMemory);
+ type, byteBuf, memReqSvr, originMemory);
}
@Override
@@ -89,7 +91,7 @@ final class BBNonNativeWritableBufferImpl extends NonNativeWritableBufferImpl {
assertValid();
return memReqSvr; //cannot be null
}
-
+
@Override
long getNativeBaseOffset() {
return nativeBaseOffset;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
index 7416901..5897271 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
@@ -73,10 +73,10 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, this)
+ type, byteBuf, memReqSvr, this)
: new BBNonNativeWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, this);
+ type, byteBuf, memReqSvr, this);
}
@Override
@@ -90,7 +90,7 @@ final class BBNonNativeWritableMemoryImpl extends NonNativeWritableMemoryImpl {
assertValid();
return memReqSvr; //cannot be null
}
-
+
@Override
long getNativeBaseOffset() {
return nativeBaseOffset;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
index eadd15e..49933f0 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
@@ -45,11 +45,13 @@ final class BBWritableBufferImpl extends NativeWritableBufferImpl {
final long capacityBytes,
final int typeId,
final ByteBuffer byteBuf,
+ final MemoryRequestServer memReqSvr,
final BaseWritableMemoryImpl originMemory) {
super(unsafeObj, nativeBaseOffset, regionOffset, capacityBytes, originMemory);
this.unsafeObj = unsafeObj;
this.nativeBaseOffset = nativeBaseOffset;
this.byteBuf = byteBuf;
+ this.memReqSvr = (memReqSvr == null) ? defaultMemReqSvr : memReqSvr;
this.typeId = (byte) (id | (typeId & 0x7));
}
@@ -60,10 +62,10 @@ final class BBWritableBufferImpl extends NativeWritableBufferImpl {
return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
- type, byteBuf, originMemory)
+ type, byteBuf, memReqSvr, originMemory)
: new BBNonNativeWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(offsetBytes), capacityBytes,
- type, byteBuf, originMemory);
+ type, byteBuf, memReqSvr, originMemory);
}
@Override
@@ -72,10 +74,10 @@ final class BBWritableBufferImpl extends NativeWritableBufferImpl {
return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, originMemory)
+ type, byteBuf, memReqSvr, originMemory)
: new BBNonNativeWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, originMemory);
+ type, byteBuf, memReqSvr, originMemory);
}
@Override
@@ -89,7 +91,7 @@ final class BBWritableBufferImpl extends NativeWritableBufferImpl {
assertValid();
return memReqSvr; //cannot be null
}
-
+
@Override
long getNativeBaseOffset() {
return nativeBaseOffset;
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
index 2cd0052..891a195 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
@@ -73,10 +73,10 @@ final class BBWritableMemoryImpl extends NativeWritableMemoryImpl {
return Util.isNativeByteOrder(byteOrder)
? new BBWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, this)
+ type, byteBuf, memReqSvr, this)
: new BBNonNativeWritableBufferImpl(
unsafeObj, nativeBaseOffset, getRegionOffset(), getCapacity(),
- type, byteBuf, this);
+ type, byteBuf, memReqSvr, this);
}
@Override
@@ -90,7 +90,7 @@ final class BBWritableMemoryImpl extends NativeWritableMemoryImpl {
assertValid();
return memReqSvr; //cannot be null
}
-
+
@Override
long getNativeBaseOffset() {
return nativeBaseOffset;
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 53b4a79..7795c8a 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
@@ -46,7 +46,7 @@ public abstract class BaseStateImpl implements BaseState {
static final AtomicLong currentDirectMemoryMapAllocations_ = new AtomicLong();
static final AtomicLong currentDirectMemoryMapAllocated_ = new AtomicLong();
-
+
//class type IDs. Do not change the bit orders
// 0000 0XXX
@@ -212,7 +212,7 @@ public abstract class BaseStateImpl implements BaseState {
public final long xxHash64(final long in, final long seed) {
return XxHash64.hash(in, seed);
}
-
+
@Override
public final boolean hasByteBuffer() {
assertValid();
@@ -331,44 +331,41 @@ public abstract class BaseStateImpl implements BaseState {
return (getTypeId() >>> 3 & 3) == 3;
}
- //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();
- }
-
- /**
- * 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();
- }
-
- //REACHABILITY FENCE
- static void reachabilityFence(@SuppressWarnings("unused") final Object obj) { }
-
//TO STRING
+ //For debugging
+ public static final String typeDecode(final BaseStateImpl mem) {
+ int typeId = mem.getTypeId();
+ StringBuilder sb = new StringBuilder();
+ int group1 = typeId & 0x7;
+ switch (group1) {
+ case 0 : sb.append(""); break;
+ 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;
+ }
+ 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;
+ }
+ int group3 = (typeId >>> 5) & 0x1;
+ switch (group3) {
+ case 0 : sb.append("Native, "); break;
+ case 1 : sb.append("NonNative, "); break;
+ }
+ int group4 = (typeId >>> 6) & 0x1;
+ switch (group4) {
+ case 0 : sb.append("Memory"); break;
+ case 1 : sb.append("Buffer"); break;
+ }
+ return sb.toString();
+ }
@Override
public final String toHexString(final String header, final long offsetBytes,
@@ -445,4 +442,41 @@ public abstract class BaseStateImpl implements BaseState {
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();
+ }
+
+ /**
+ * 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();
+ }
+
+ //REACHABILITY FENCE
+ static void reachabilityFence(@SuppressWarnings("unused") final Object obj) { }
+
}
diff --git a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java
index a4c32a5..9c68a4e 100644
--- a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java
+++ b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java
@@ -74,12 +74,12 @@ public abstract class WritableMemoryImpl extends MemoryImpl implements WritableM
//ALLOCATE DIRECT
public static WritableHandle allocateDirect(final long capacityBytes) {
- return allocateDirect(capacityBytes, null);
+ return allocateDirect(capacityBytes, ByteOrder.nativeOrder(), defaultMemReqSvr);
}
- public static WritableHandle allocateDirect(final long capacityBytes,
+ public static WritableHandle allocateDirect(final long capacityBytes, final ByteOrder byteOrder,
final MemoryRequestServer memReqSvr) {
- return BaseWritableMemoryImpl.wrapDirect(capacityBytes, Util.nativeByteOrder, memReqSvr);
+ return BaseWritableMemoryImpl.wrapDirect(capacityBytes, byteOrder, memReqSvr);
}
//REGIONS
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org