From 35d0b14df6995e79e84201c45d49ef986f9e0b77 Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Mon, 16 Feb 2004 12:00:33 -0800 Subject: ByteBuffer.java (endian): Make non-private so other java.nio classes can inherit it. * java/nio/ByteBuffer.java (endian): Make non-private so other java.nio classes can inherit it. (): Don't bother clearing array_offset. * java/nio/ByteBuffer.java (allocate): Re-implement using wrap. * java/nio/ByteBuffer.java (get(byte[],int,int)): Check underflow. Remove redundant test. * java/nio/ByteBufferImpl.java (asCharBuffer, asShortBuffer, asIntBuffer, asLongBuffer, asFloatBuffer, asDoubleBuffer): Use new XxxViewBufferImpl constructors. * java/nio/MappedByteBufferImpl.java: Likewise. * java/nio/DirectByteBufferImpl.java: Likewise. * java/nio/ByteBufferImpl.java: Remove one constructor. Inline super in remaining constructor. * java/nio/ByteBuffer.java: Remove unused constructor. * java/nio/ByteBufferImpl.java (shiftDown): New optimized method. * java/nio/ByteBufferImpl.java (get, put): Add array_offset. * java/nio/DirectByteBufferImpl.java (owner): New field. (offset): Remove unused field. (): Modify one and add another constructor. Change callers. (allocateDirect): Removed - not used. (getImpl, putImpl): Make static and pass address explicitly, to make them useful for MappedByteBufferImpl. (get, put): Check for underflow. Modify for new getImpl. (getImpl): New native method where target is array. (get(byte[],int,int)): Use the above. (adjustAddress): New static native method. (slice, duplicate, asReadOnly): New implementations. * java/nio/natDirectByteBufferImpl.cc (getImpl, putImpl, shiftDown, adjustAddress): New or updated native methods. From-SVN: r77919 --- libjava/java/nio/ByteBufferImpl.java | 41 ++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'libjava/java/nio/ByteBufferImpl.java') diff --git a/libjava/java/nio/ByteBufferImpl.java b/libjava/java/nio/ByteBufferImpl.java index 6a3814862c9..5d3c3d31a86 100644 --- a/libjava/java/nio/ByteBufferImpl.java +++ b/libjava/java/nio/ByteBufferImpl.java @@ -45,45 +45,42 @@ final class ByteBufferImpl extends ByteBuffer { private boolean readOnly; - ByteBufferImpl (int capacity) - { - this (new byte [capacity], 0, capacity, capacity, 0, -1, false); - } - ByteBufferImpl (byte[] buffer, int offset, int capacity, int limit, int position, int mark, boolean readOnly) { - super (buffer, offset, capacity, limit, position, mark); + super (capacity, limit, position, mark); + this.backing_buffer = buffer; + this.array_offset = offset; this.readOnly = readOnly; } public CharBuffer asCharBuffer () { - return new CharViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order()); + return new CharViewBufferImpl (this, remaining() >> 1); } public ShortBuffer asShortBuffer () { - return new ShortViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order()); + return new ShortViewBufferImpl (this, remaining() >> 1); } public IntBuffer asIntBuffer () { - return new IntViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order()); + return new IntViewBufferImpl (this, remaining() >> 2); } public LongBuffer asLongBuffer () { - return new LongViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order()); + return new LongViewBufferImpl (this, remaining() >> 3); } public FloatBuffer asFloatBuffer () { - return new FloatViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order()); + return new FloatViewBufferImpl (this, remaining() >> 2); } public DoubleBuffer asDoubleBuffer () { - return new DoubleViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order()); + return new DoubleViewBufferImpl (this, remaining() >> 3); } public boolean isReadOnly () @@ -106,6 +103,13 @@ final class ByteBufferImpl extends ByteBuffer return new ByteBufferImpl (backing_buffer, array_offset, capacity (), limit (), position (), mark, true); } + void shiftDown (int dst_offset, int src_offset, int count) + { + System.arraycopy(backing_buffer, array_offset + src_offset, + backing_buffer, array_offset + dst_offset, + count); + } + public ByteBuffer compact () { int pos = position(); @@ -129,7 +133,7 @@ final class ByteBufferImpl extends ByteBuffer */ final public byte get () { - byte result = backing_buffer [position ()]; + byte result = backing_buffer [position () + array_offset]; position (position () + 1); return result; } @@ -144,9 +148,10 @@ final class ByteBufferImpl extends ByteBuffer { if (readOnly) throw new ReadOnlyBufferException (); - - backing_buffer [position ()] = value; - position (position () + 1); + + int pos = position(); + backing_buffer [pos + array_offset] = value; + position (pos + 1); return this; } @@ -159,7 +164,7 @@ final class ByteBufferImpl extends ByteBuffer */ final public byte get (int index) { - return backing_buffer [index]; + return backing_buffer [index + array_offset]; } /** @@ -175,7 +180,7 @@ final class ByteBufferImpl extends ByteBuffer if (readOnly) throw new ReadOnlyBufferException (); - backing_buffer [index] = value; + backing_buffer [index + array_offset] = value; return this; } -- cgit v1.2.3