aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/nio/ByteBuffer.java
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2003-05-13 06:04:19 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2003-05-13 06:04:19 +0000
commit3b6b673dabbab53b8e57cc7ad533f336841356f5 (patch)
tree44f31eb3b58450408facde2f506a93324a6ebc41 /libjava/java/nio/ByteBuffer.java
parent250ab7c3087404b67719302f92721f43b0bf365e (diff)
downloadgcc-3b6b673dabbab53b8e57cc7ad533f336841356f5.zip
gcc-3b6b673dabbab53b8e57cc7ad533f336841356f5.tar.gz
gcc-3b6b673dabbab53b8e57cc7ad533f336841356f5.tar.bz2
2003-05-13 Michael Koch <konqueror@gmx.de>
* gnu/java/nio/ByteBufferImpl.java (ByteBufferImpl): All constructors revised. (slice): Reimplemented. (duplicate): Reimplemented. (asReadOnlyBuffer): Reimplemented. * java/nio/ByteBuffer.java: Reformatted. (array_offset): Renamed from "offset" to match all other buffer classes. (ByteBuffer): All constructors revised. (allocateDirect): Implemented. (allocate): New implementation, documentation reworked. (wrap): Likewise. (get): Documentation reworked. (put): New implementation, documentation reworked. (hasArray): Documentation reworked. (arrayOffset): Likewise. (hashCode): Likewise. (equals): Likewise. (compareTo): Likewise. (order): Likewise. (compact): Likewise. (isDirect): Likewise. (slice): Likewise. (duplicate): Likewise. (asReadOnlyBuffer): Likewise. * Makefile.am (ordinary_java_source_files): Added gnu/java/nio/DirectByteBufferImpl.java. (nat_source_files): Added gnu/java/nio/natDirectByteBufferImpl.cc. * Makefile.in: Regenerated. From-SVN: r66749
Diffstat (limited to 'libjava/java/nio/ByteBuffer.java')
-rw-r--r--libjava/java/nio/ByteBuffer.java301
1 files changed, 161 insertions, 140 deletions
diff --git a/libjava/java/nio/ByteBuffer.java b/libjava/java/nio/ByteBuffer.java
index 5a687ca..66c31ed 100644
--- a/libjava/java/nio/ByteBuffer.java
+++ b/libjava/java/nio/ByteBuffer.java
@@ -1,5 +1,5 @@
/* ByteBuffer.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,70 +38,81 @@ exception statement from your version. */
package java.nio;
import gnu.java.nio.ByteBufferImpl;
+import gnu.java.nio.DirectByteBufferImpl;
/**
* @since 1.4
*/
-public abstract class ByteBuffer extends Buffer implements Comparable
+public abstract class ByteBuffer extends Buffer
+ implements Comparable
{
private ByteOrder endian = ByteOrder.BIG_ENDIAN;
- int offset;
+ int array_offset;
byte[] backing_buffer;
-
+
+ ByteBuffer (int capacity, int limit, int position, int mark)
+ {
+ super (capacity, limit, position, mark);
+ array_offset = 0;
+ }
+
+ ByteBuffer (byte[] buffer, int offset, int capacity, int limit, int position, int mark)
+ {
+ super (capacity, limit, position, mark);
+ this.backing_buffer = buffer;
+ this.array_offset = offset;
+ }
/**
* Allocates a new direct byte buffer.
*/
public static ByteBuffer allocateDirect (int capacity)
{
- throw new Error ("direct buffers are not implemented");
+ return DirectByteBufferImpl.allocate (capacity);
}
/**
- * Allocates a new byte buffer.
+ * Allocates a new <code>ByteBuffer</code> object with a given capacity.
*/
public static ByteBuffer allocate (int capacity)
{
- return new ByteBufferImpl (capacity, 0, capacity);
+ return new ByteBufferImpl (capacity);
}
-
+
/**
- * Wraps a byte array into a buffer.
- *
+ * Wraps a <code>byte</code> array into a <code>ByteBuffer</code>
+ * object.
+ *
* @exception IndexOutOfBoundsException If the preconditions on the offset
* and length parameters do not hold
*/
final public static ByteBuffer wrap (byte[] array, int offset, int length)
{
- return new ByteBufferImpl (array, offset, length);
+ return new ByteBufferImpl (array, 0, array.length, offset + length, offset, -1, false);
}
/**
- * Wraps a byte array into a buffer.
+ * Wraps a <code>byte</code> array into a <code>ByteBuffer</code>
+ * object.
*/
final public static ByteBuffer wrap (byte[] array)
{
return wrap (array, 0, array.length);
}
-
- ByteBuffer (int capacity, int limit, int position, int mark)
- {
- super (capacity, limit, position, mark);
- }
-
+
/**
- * This method transfers bytes from this buffer into
- * the given destination array.
+ * This method transfers <code>bytes<code> from this buffer into the given
+ * destination array.
*
* @param dst The destination array
- * @param offset The offset within the array of the first byte to be written;
- * must be non-negative and no larger than dst.length.
+ * @param offset The offset within the array of the first <code>byte</code>
+ * to be written; must be non-negative and no larger than dst.length.
* @param length The maximum number of bytes to be written to the given array;
* must be non-negative and no larger than dst.length - offset.
*
- * @exception BufferUnderflowException If there are fewer than length bytes
- * remaining in this buffer.
- * @exception IndexOutOfBoundsException - If the preconditions on the offset
+ * @exception BufferUnderflowException If there are fewer than length
+ * <code>bytes</code> remaining in this buffer.
+ * @exception IndexOutOfBoundsException If the preconditions on the offset
* and length parameters do not hold.
*/
public ByteBuffer get (byte[] dst, int offset, int length)
@@ -114,61 +125,70 @@ public abstract class ByteBuffer extends Buffer implements Comparable
for (int i = offset; i < offset + length; i++)
{
- dst [i] = get();
+ dst [i] = get ();
}
return this;
}
/**
- * This method transfers bytes from this buffer into the given
+ * This method transfers <code>bytes<code> from this buffer into the given
* destination array.
*
* @param dst The byte array to write into.
*
* @exception BufferUnderflowException If there are fewer than dst.length
- * bytes remaining in this buffer.
+ * <code>bytes</code> remaining in this buffer.
*/
public ByteBuffer get (byte[] dst)
{
return get (dst, 0, dst.length);
}
-
+
/**
- * Writes the content of src into the buffer.
+ * Writes the content of the the <code>ByteBUFFER</code> src
+ * into the buffer.
*
* @param src The source data.
*
* @exception BufferOverflowException If there is insufficient space in this
- * buffer for the remaining bytes in the source buffer.
+ * buffer for the remaining <code>bytes<code> in the source buffer.
* @exception IllegalArgumentException If the source buffer is this buffer.
- * @exception ReadOnlyBufferException If this buffer is read only.
+ * @exception ReadOnlyBufferException If this buffer is read-only.
*/
public ByteBuffer put (ByteBuffer src)
{
if (src == this)
throw new IllegalArgumentException ();
- while (src.hasRemaining ())
- put (src.get ());
-
+ if (src.remaining () > remaining ())
+ throw new BufferOverflowException ();
+
+ if (src.remaining () > 0)
+ {
+ byte[] toPut = new byte [src.remaining ()];
+ src.get (toPut);
+ src.put (toPut);
+ }
+
return this;
}
/**
- * Writes the content of the the array src into the buffer.
+ * Writes the content of the the <code>byte array</code> src
+ * into the buffer.
*
* @param src The array to copy into the buffer.
* @param offset The offset within the array of the first byte to be read;
* must be non-negative and no larger than src.length.
* @param length The number of bytes to be read from the given array;
* must be non-negative and no larger than src.length - offset.
- *
+ *
* @exception BufferOverflowException If there is insufficient space in this
- * buffer for the remaining bytes in the source buffer.
+ * buffer for the remaining <code>bytes<code> in the source array.
* @exception IndexOutOfBoundsException If the preconditions on the offset
- * and length parameters do not hold.
- * @exception ReadOnlyBufferException If this buffer is read only.
+ * and length parameters do not hold
+ * @exception ReadOnlyBufferException If this buffer is read-only.
*/
public ByteBuffer put (byte[] src, int offset, int length)
{
@@ -180,18 +200,19 @@ public abstract class ByteBuffer extends Buffer implements Comparable
for (int i = offset; i < offset + length; i++)
put (src [i]);
-
+
return this;
}
/**
- * Writes the content of the the array src into the buffer.
+ * Writes the content of the the <code>byte array</code> src
+ * into the buffer.
*
* @param src The array to copy into the buffer.
- *
+ *
* @exception BufferOverflowException If there is insufficient space in this
- * buffer for the remaining bytes in the source buffer.
- * @exception ReadOnlyBufferException If this buffer is read only.
+ * buffer for the remaining <code>bytes<code> in the source array.
+ * @exception ReadOnlyBufferException If this buffer is read-only.
*/
public final ByteBuffer put (byte[] src)
{
@@ -199,19 +220,19 @@ public abstract class ByteBuffer extends Buffer implements Comparable
}
/**
- * Tells whether or not this buffer is backed by an accessible array.
+ * Tells whether ot not this buffer is backed by an accessible
+ * <code>byte</code> array.
*/
public final boolean hasArray ()
{
return (backing_buffer != null
- && !isReadOnly ());
+ && !isReadOnly ());
}
/**
- * Returns the byte array that backs this buffer.
+ * Returns the <code>byte</code> array that backs this buffer.
*
- * @exception ReadOnlyBufferException If this buffer is backed by an array
- * but is read-only.
+ * @exception ReadOnlyBufferException If this buffer is read-only.
* @exception UnsupportedOperationException If this buffer is not backed
* by an accessible array.
*/
@@ -222,16 +243,14 @@ public abstract class ByteBuffer extends Buffer implements Comparable
if (isReadOnly ())
throw new ReadOnlyBufferException ();
-
+
return backing_buffer;
}
/**
- * Returns the offset within this buffer's backing array of the first element
- * of the buffer
+ * Returns the offset within this buffer's backing array of the first element.
*
- * @exception ReadOnlyBufferException If this buffer is backed by an array
- * but is read-only.
+ * @exception ReadOnlyBufferException If this buffer is read-only.
* @exception UnsupportedOperationException If this buffer is not backed
* by an accessible array.
*/
@@ -242,21 +261,21 @@ public abstract class ByteBuffer extends Buffer implements Comparable
if (isReadOnly ())
throw new ReadOnlyBufferException ();
-
- return offset;
+
+ return array_offset;
}
-
+
/**
- * Returns the current hash code of this buffer.
+ * Calculates a hash code for this buffer.
*/
- public int hashCode()
+ public int hashCode ()
{
- // FIXME: Check what SUN calculates here
- return super.hashCode();
+ // FIXME: Check what SUN calculates here.
+ return super.hashCode ();
}
/**
- * Tells whether or not this buffer is equal to another object.
+ * Checks if this buffer is equal to obj.
*/
public boolean equals (Object obj)
{
@@ -265,51 +284,50 @@ public abstract class ByteBuffer extends Buffer implements Comparable
{
return compareTo (obj) == 0;
}
-
+
return false;
}
-
+
/**
- * Compares this buffer to another object.
+ * Compares two <code>ByteBuffer</code> objects.
*
- * @exception ClassCastException If the argument is not a byte buffer
+ * @exception ClassCastException If obj is not an object derived from
+ * <code>ByteBuffer</code>.
*/
public int compareTo (Object obj)
{
ByteBuffer a = (ByteBuffer) obj;
- if (a.remaining() != remaining())
- {
- return 1;
- }
-
- if (! hasArray() ||
- ! a.hasArray())
+ if (a.remaining () != remaining ())
+ return 1;
+
+ if (! hasArray () ||
+ ! a.hasArray ())
{
return 1;
}
-
- int r = remaining();
+
+ int r = remaining ();
int i1 = position ();
int i2 = a.position ();
-
+
for (int i = 0; i < r; i++)
{
int t = (int) (get (i1) - a.get (i2));
-
+
if (t != 0)
{
return (int) t;
}
}
-
+
return 0;
}
/**
- * Retrieves this buffer's byte order.
+ * Returns the byte order of this buffer.
*/
- public final ByteOrder order()
+ public final ByteOrder order ()
{
return endian;
}
@@ -324,97 +342,100 @@ public abstract class ByteBuffer extends Buffer implements Comparable
}
/**
- * Reads the byte at this buffer's current position,
+ * Reads the <code>byte</code> at this buffer's current position,
* and then increments the position.
*
- * @exception BufferUnderflowException If the buffer's current position
- * is not smaller than its limit.
+ * @exception BufferUnderflowException If there are no remaining
+ * <code>bytes</code> in this buffer.
*/
public abstract byte get ();
-
+
/**
- * Relative put method.
+ * Writes the <code>byte</code> at this buffer's current position,
+ * and then increments the position.
*
- * @exception BufferOverflowException If this buffer's current position is
- * not smaller than its limit.
+ * @exception BufferOverflowException If there no remaining
+ * <code>bytes</code> in this buffer.
* @exception ReadOnlyBufferException If this buffer is read-only.
*/
public abstract ByteBuffer put (byte b);
-
+
/**
* Absolute get method.
*
- * @exception IndexOutOfBoundsException If index &lt; 0 or index &gt;= this
- * buffers limit.
+ * @exception IndexOutOfBoundsException If index is negative or not smaller
+ * than the buffer's limit.
*/
public abstract byte get (int index);
/**
* Absolute put method.
*
- * @exception ReadOnlyBufferException If this buffer is read-only
- * @exception IndexOutOfBoundsException If index &lt; 0 or index &gt;= this
- * buffers limit.
+ * @exception IndexOutOfBoundsException If index is negative or not smaller
+ * than the buffer's limit.
+ * @exception ReadOnlyBufferException If this buffer is read-only.
*/
public abstract ByteBuffer put (int index, byte b);
-
+
/**
* Compacts this buffer.
- *
- * @exception ReadOnlyBufferException If this buffer is read-only
+ *
+ * @exception ReadOnlyBufferException If this buffer is read-only.
*/
- public abstract ByteBuffer compact();
+ public abstract ByteBuffer compact ();
/**
- * Tells whether or not this buffer is direct.
+ * Tells wether or not this buffer is direct.
*/
- public abstract boolean isDirect();
-
+ public abstract boolean isDirect ();
+
/**
- * Creates a new byte buffer whose content is a shared subsequence of this
- * buffer's content.
+ * Creates a new <code>ByteBuffer</code> whose content is a shared
+ * subsequence of this buffer's content.
*/
- public abstract ByteBuffer slice();
-
+ public abstract ByteBuffer slice ();
+
/**
- * Creates a new byte buffer that shares this buffer's content.
+ * Creates a new <code>ByteBuffer</code> that shares this buffer's
+ * content.
*/
- public abstract ByteBuffer duplicate();
-
+ public abstract ByteBuffer duplicate ();
+
/**
- * Creates a new, read-only byte buffer that shares this buffer's content.
+ * Creates a new read-only <code>ByteBuffer</code> that shares this
+ * buffer's content.
*/
- public abstract ByteBuffer asReadOnlyBuffer();
+ public abstract ByteBuffer asReadOnlyBuffer ();
/**
* Creates a view of this byte buffer as a short buffer.
*/
- public abstract ShortBuffer asShortBuffer();
+ public abstract ShortBuffer asShortBuffer ();
/**
* Creates a view of this byte buffer as a char buffer.
*/
- public abstract CharBuffer asCharBuffer();
+ public abstract CharBuffer asCharBuffer ();
/**
* Creates a view of this byte buffer as an integer buffer.
*/
- public abstract IntBuffer asIntBuffer();
+ public abstract IntBuffer asIntBuffer ();
/**
* Creates a view of this byte buffer as a long buffer.
*/
- public abstract LongBuffer asLongBuffer();
+ public abstract LongBuffer asLongBuffer ();
/**
* Creates a view of this byte buffer as a float buffer.
*/
- public abstract FloatBuffer asFloatBuffer();
+ public abstract FloatBuffer asFloatBuffer ();
/**
* Creates a view of this byte buffer as a double buffer.
*/
- public abstract DoubleBuffer asDoubleBuffer();
+ public abstract DoubleBuffer asDoubleBuffer ();
/**
* Relative get method for reading a character value.
@@ -422,7 +443,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferUnderflowException If there are fewer than two bytes
* remaining in this buffer.
*/
- public abstract char getChar();
+ public abstract char getChar ();
/**
* Relative put method for writing a character value.
@@ -430,7 +451,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferOverflowException If this buffer's current position is
* not smaller than its limit.
*/
- public abstract ByteBuffer putChar(char value);
+ public abstract ByteBuffer putChar (char value);
/**
* Absolute get method for reading a character value.
@@ -438,7 +459,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If there are fewer than two bytes
* remaining in this buffer
*/
- public abstract char getChar(int index);
+ public abstract char getChar (int index);
/**
* Absolute put method for writing a character value.
@@ -446,7 +467,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus one.
*/
- public abstract ByteBuffer putChar(int index, char value);
+ public abstract ByteBuffer putChar (int index, char value);
/**
* Relative get method for reading a short value.
@@ -454,7 +475,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferUnderflowException If index is negative or not smaller
* than the buffer's limit, minus one.
*/
- public abstract short getShort();
+ public abstract short getShort ();
/**
* Relative put method for writing a short value.
@@ -462,7 +483,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferOverflowException If this buffer's current position is
* not smaller than its limit.
*/
- public abstract ByteBuffer putShort(short value);
+ public abstract ByteBuffer putShort (short value);
/**
* Absolute get method for reading a short value.
@@ -470,7 +491,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If there are fewer than two bytes
* remaining in this buffer
*/
- public abstract short getShort(int index);
+ public abstract short getShort (int index);
/**
* Absolute put method for writing a short value.
@@ -478,7 +499,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus one.
*/
- public abstract ByteBuffer putShort(int index, short value);
+ public abstract ByteBuffer putShort (int index, short value);
/**
* Relative get method for reading an integer value.
@@ -486,7 +507,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferUnderflowException If there are fewer than four bytes
* remaining in this buffer.
*/
- public abstract int getInt();
+ public abstract int getInt ();
/**
* Relative put method for writing an integer value.
@@ -494,7 +515,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferOverflowException If this buffer's current position is
* not smaller than its limit.
*/
- public abstract ByteBuffer putInt(int value);
+ public abstract ByteBuffer putInt (int value);
/**
* Absolute get method for reading an integer value.
@@ -502,7 +523,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus three.
*/
- public abstract int getInt(int index);
+ public abstract int getInt (int index);
/**
* Absolute put method for writing an integer value.
@@ -510,7 +531,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus three.
*/
- public abstract ByteBuffer putInt(int index, int value);
+ public abstract ByteBuffer putInt (int index, int value);
/**
* Relative get method for reading a long value.
@@ -518,7 +539,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferUnderflowException If there are fewer than eight bytes
* remaining in this buffer.
*/
- public abstract long getLong();
+ public abstract long getLong ();
/**
* Relative put method for writing a long value.
@@ -526,7 +547,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferOverflowException If this buffer's current position is
* not smaller than its limit.
*/
- public abstract ByteBuffer putLong(long value);
+ public abstract ByteBuffer putLong (long value);
/**
* Absolute get method for reading a long value.
@@ -534,7 +555,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus seven.
*/
- public abstract long getLong(int index);
+ public abstract long getLong (int index);
/**
* Absolute put method for writing a float value.
@@ -542,7 +563,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus seven.
*/
- public abstract ByteBuffer putLong(int index, long value);
+ public abstract ByteBuffer putLong (int index, long value);
/**
* Relative get method for reading a float value.
@@ -550,7 +571,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferUnderflowException If there are fewer than four bytes
* remaining in this buffer.
*/
- public abstract float getFloat();
+ public abstract float getFloat ();
/**
* Relative put method for writing a float value.
@@ -558,7 +579,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferOverflowException If there are fewer than four bytes
* remaining in this buffer.
*/
- public abstract ByteBuffer putFloat(float value);
+ public abstract ByteBuffer putFloat (float value);
/**
* Absolute get method for reading a float value.
@@ -566,7 +587,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus three.
*/
- public abstract float getFloat(int index);
+ public abstract float getFloat (int index);
/**
* Relative put method for writing a float value.
@@ -574,7 +595,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus three.
*/
- public abstract ByteBuffer putFloat(int index, float value);
+ public abstract ByteBuffer putFloat (int index, float value);
/**
* Relative get method for reading a double value.
@@ -582,7 +603,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferUnderflowException If there are fewer than eight bytes
* remaining in this buffer.
*/
- public abstract double getDouble();
+ public abstract double getDouble ();
/**
* Relative put method for writing a double value.
@@ -590,7 +611,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception BufferOverflowException If this buffer's current position is
* not smaller than its limit.
*/
- public abstract ByteBuffer putDouble(double value);
+ public abstract ByteBuffer putDouble (double value);
/**
* Absolute get method for reading a double value.
@@ -598,7 +619,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus seven.
*/
- public abstract double getDouble(int index);
+ public abstract double getDouble (int index);
/**
* Absolute put method for writing a double value.
@@ -606,7 +627,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
* @exception IndexOutOfBoundsException If index is negative or not smaller
* than the buffer's limit, minus seven.
*/
- public abstract ByteBuffer putDouble(int index, double value);
+ public abstract ByteBuffer putDouble (int index, double value);
/**
* Returns a string summarizing the state of this buffer.