From 86a80fc3522cb14dd0b5a8f4913e8653111bbcc0 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Wed, 21 Apr 2004 15:33:53 +0000 Subject: 2004-04-21 Michael Koch * java/nio/DirectByteBufferImpl.java (shiftDown): Made static, give address as argument and provide a convenience method that overwrites shiftDown in ByteBufferImpl and calls the native shiftDown. * java/nio/MappedByteBufferImpl.java (): Use optimized method in DirectByteBufferImpl. * java/nio/natDirectByteBufferImpl.cc (shiftDown): Changed method signature. Removed usage of array_offset. From-SVN: r80967 --- libjava/java/nio/DirectByteBufferImpl.java | 9 +++++++-- libjava/java/nio/MappedByteBufferImpl.java | 3 ++- libjava/java/nio/natDirectByteBufferImpl.cc | 6 +++--- 3 files changed, 12 insertions(+), 6 deletions(-) (limited to 'libjava/java') diff --git a/libjava/java/nio/DirectByteBufferImpl.java b/libjava/java/nio/DirectByteBufferImpl.java index 7c2b783..be0fc52 100644 --- a/libjava/java/nio/DirectByteBufferImpl.java +++ b/libjava/java/nio/DirectByteBufferImpl.java @@ -136,15 +136,20 @@ final class DirectByteBufferImpl extends ByteBuffer return this; } - native void shiftDown (int dst_offset, int src_offset, int count); + static native void shiftDown(RawData address, int dst_offset, int src_offset, int count); + void shiftDown(int dst_offset, int src_offset, int count) + { + shiftDown(address, dst_offset, src_offset, count); + } + public ByteBuffer compact () { int pos = position(); if (pos > 0) { int count = remaining(); - shiftDown(0, pos, count); + shiftDown(address, 0, pos, count); position(count); limit(capacity()); } diff --git a/libjava/java/nio/MappedByteBufferImpl.java b/libjava/java/nio/MappedByteBufferImpl.java index ccd987e..5932c99 100644 --- a/libjava/java/nio/MappedByteBufferImpl.java +++ b/libjava/java/nio/MappedByteBufferImpl.java @@ -121,7 +121,8 @@ final class MappedByteBufferImpl extends MappedByteBuffer if (pos > 0) { int count = remaining(); - shiftDown(0, pos, count); + // Call shiftDown method optimized for direct buffers. + DirectByteBufferImpl.shiftDown(address, 0, pos, count); position(count); limit(capacity()); } diff --git a/libjava/java/nio/natDirectByteBufferImpl.cc b/libjava/java/nio/natDirectByteBufferImpl.cc index 94225c3..88f53fc 100644 --- a/libjava/java/nio/natDirectByteBufferImpl.cc +++ b/libjava/java/nio/natDirectByteBufferImpl.cc @@ -65,9 +65,9 @@ java::nio::DirectByteBufferImpl::adjustAddress (RawData* address, jint offset) void java::nio::DirectByteBufferImpl::shiftDown -(jint dst_offset, jint src_offset, jint count) +(RawData* address, jint dst_offset, jint src_offset, jint count) { - jbyte* dst = reinterpret_cast (address) + array_offset + dst_offset; - jbyte* src = reinterpret_cast (address) + array_offset + src_offset; + jbyte* dst = reinterpret_cast (address) + dst_offset; + jbyte* src = reinterpret_cast (address) + src_offset; ::memmove(dst, src, count); } -- cgit v1.1