Skip to content

Commit

Permalink
Manage addresses using Pointer.[g|s]etAddress(..) (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
benalexau committed Feb 8, 2019
1 parent ba177af commit 9815ffe
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 16 deletions.
4 changes: 2 additions & 2 deletions src/main/java/org/lmdbjava/ByteArrayProxy.java
Expand Up @@ -94,7 +94,7 @@ protected final void in(final byte[] buffer, final Pointer ptr,
final Pointer pointer = MEM_MGR.allocateDirect(buffer.length);
pointer.put(0, buffer, 0, buffer.length);
ptr.putLong(STRUCT_FIELD_OFFSET_SIZE, buffer.length);
ptr.putLong(STRUCT_FIELD_OFFSET_DATA, pointer.address());
ptr.putAddress(STRUCT_FIELD_OFFSET_DATA, pointer.address());
}

@Override
Expand All @@ -106,7 +106,7 @@ protected final void in(final byte[] buffer, final int size, final Pointer ptr,
@Override
protected final byte[] out(final byte[] buffer, final Pointer ptr,
final long ptrAddr) {
final long addr = ptr.getLong(STRUCT_FIELD_OFFSET_DATA);
final long addr = ptr.getAddress(STRUCT_FIELD_OFFSET_DATA);
final int size = (int) ptr.getLong(STRUCT_FIELD_OFFSET_SIZE);
final Pointer pointer = MEM_MGR.newPointer(addr, size);
final byte[] bytes = new byte[size];
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/org/lmdbjava/ByteBufferProxy.java
Expand Up @@ -225,21 +225,21 @@ private static final class ReflectiveProxy extends AbstractByteBufferProxy {
@Override
protected void in(final ByteBuffer buffer, final Pointer ptr,
final long ptrAddr) {
ptr.putLong(STRUCT_FIELD_OFFSET_DATA, address(buffer));
ptr.putAddress(STRUCT_FIELD_OFFSET_DATA, address(buffer));
ptr.putLong(STRUCT_FIELD_OFFSET_SIZE, buffer.remaining());
}

@Override
protected void in(final ByteBuffer buffer, final int size, final Pointer ptr,
final long ptrAddr) {
ptr.putLong(STRUCT_FIELD_OFFSET_SIZE, size);
ptr.putLong(STRUCT_FIELD_OFFSET_DATA, address(buffer));
ptr.putAddress(STRUCT_FIELD_OFFSET_DATA, address(buffer));
}

@Override
protected ByteBuffer out(final ByteBuffer buffer, final Pointer ptr,
final long ptrAddr) {
final long addr = ptr.getLong(STRUCT_FIELD_OFFSET_DATA);
final long addr = ptr.getAddress(STRUCT_FIELD_OFFSET_DATA);
final long size = ptr.getLong(STRUCT_FIELD_OFFSET_SIZE);
try {
ADDRESS_FIELD.set(buffer, addr);
Expand Down Expand Up @@ -277,20 +277,20 @@ private static final class UnsafeProxy extends AbstractByteBufferProxy {
protected void in(final ByteBuffer buffer, final Pointer ptr,
final long ptrAddr) {
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE, buffer.remaining());
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA, address(buffer));
UNSAFE.putAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA, address(buffer));
}

@Override
protected void in(final ByteBuffer buffer, final int size, final Pointer ptr,
final long ptrAddr) {
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE, size);
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA, address(buffer));
UNSAFE.putAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA, address(buffer));
}

@Override
protected ByteBuffer out(final ByteBuffer buffer, final Pointer ptr,
final long ptrAddr) {
final long addr = UNSAFE.getLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA);
final long addr = UNSAFE.getAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA);
final long size = UNSAFE.getLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE);
UNSAFE.putLong(buffer, ADDRESS_OFFSET, addr);
UNSAFE.putInt(buffer, CAPACITY_OFFSET, (int) size);
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/org/lmdbjava/DirectBufferProxy.java
Expand Up @@ -130,22 +130,22 @@ protected void in(final DirectBuffer buffer, final Pointer ptr,
final long ptrAddr) {
final long addr = buffer.addressOffset();
final long size = buffer.capacity();
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA, addr);
UNSAFE.putAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA, addr);
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE, size);
}

@Override
protected void in(final DirectBuffer buffer, final int size, final Pointer ptr,
final long ptrAddr) {
final long addr = buffer.addressOffset();
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA, addr);
UNSAFE.putAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA, addr);
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE, size);
}

@Override
protected DirectBuffer out(final DirectBuffer buffer, final Pointer ptr,
final long ptrAddr) {
final long addr = UNSAFE.getLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA);
final long addr = UNSAFE.getAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA);
final long size = UNSAFE.getLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE);
buffer.wrap(addr, (int) size);
return buffer;
Expand Down
10 changes: 5 additions & 5 deletions src/test/java/org/lmdbjava/ByteBufProxy.java
Expand Up @@ -121,23 +121,23 @@ protected byte[] getBytes(final ByteBuf buffer) {
protected void in(final ByteBuf buffer, final Pointer ptr, final long ptrAddr) {
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE,
buffer.writerIndex() - buffer.readerIndex());
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA,
buffer.memoryAddress() + buffer.readerIndex());
UNSAFE.putAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA,
buffer.memoryAddress() + buffer.readerIndex());
}

@Override
protected void in(final ByteBuf buffer, final int size, final Pointer ptr,
final long ptrAddr) {
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE,
size);
UNSAFE.putLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA,
buffer.memoryAddress() + buffer.readerIndex());
UNSAFE.putAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA,
buffer.memoryAddress() + buffer.readerIndex());
}

@Override
protected ByteBuf out(final ByteBuf buffer, final Pointer ptr,
final long ptrAddr) {
final long addr = UNSAFE.getLong(ptrAddr + STRUCT_FIELD_OFFSET_DATA);
final long addr = UNSAFE.getAddress(ptrAddr + STRUCT_FIELD_OFFSET_DATA);
final long size = UNSAFE.getLong(ptrAddr + STRUCT_FIELD_OFFSET_SIZE);
UNSAFE.putLong(buffer, ADDRESS_OFFSET, addr);
UNSAFE.putInt(buffer, LENGTH_OFFSET, (int) size);
Expand Down

0 comments on commit 9815ffe

Please sign in to comment.