OSDN Git Service

2005-04-20 Sven de Marothy <sven@physto.se>
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Apr 2005 06:05:04 +0000 (06:05 +0000)
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Apr 2005 06:05:04 +0000 (06:05 +0000)
* java/nio/ByteBufferImpl.java:
(putChar): Inlined for speed.
(put, get): Bulk methods can use arraycopy.
* java/nio/CharBufferImpl.java:
(put, get): Bulk methods can use arraycopy.

2005-04-20  Jeroen Frijters  <jeroen@frijters.net>

* java/nio/ByteBufferImpl.java (get(), put(byte)): Inlined checks
and field updates.
* java/nio/CharBufferImpl.java
(CharBufferImpl(CharBufferImpl)): Copy array_offset field.
(get(), put(char)): Inlined checks and field updates. Fixed to
take array_offset into account.
(get(int), put(int, char)): Fixed to take array_offset into account.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98445 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/nio/ByteBufferImpl.java
libjava/java/nio/CharBufferImpl.java

index 203ea97..0270724 100644 (file)
@@ -1,5 +1,23 @@
 2005-04-20  Sven de Marothy  <sven@physto.se>
 
+       * java/nio/ByteBufferImpl.java:
+       (putChar): Inlined for speed.
+       (put, get): Bulk methods can use arraycopy.
+       * java/nio/CharBufferImpl.java:
+       (put, get): Bulk methods can use arraycopy.
+
+2005-04-20  Jeroen Frijters  <jeroen@frijters.net>
+
+       * java/nio/ByteBufferImpl.java (get(), put(byte)): Inlined checks
+       and field updates.
+       * java/nio/CharBufferImpl.java
+       (CharBufferImpl(CharBufferImpl)): Copy array_offset field.
+       (get(), put(char)): Inlined checks and field updates. Fixed to
+       take array_offset into account.
+       (get(int), put(int, char)): Fixed to take array_offset into account.
+
+2005-04-20  Sven de Marothy  <sven@physto.se>
+
        * java/text/SimpleDateFormat.java:
        (formatWithAttribute): Pad year before truncating digits.
 
index d9f2462..4796170 100644 (file)
@@ -144,13 +144,43 @@ final class ByteBufferImpl extends ByteBuffer
    */
   public byte get ()
   {
-    checkForUnderflow();
+    if (pos >= limit)
+        throw new BufferUnderflowException();
 
-    byte result = backing_buffer [position () + array_offset];
-    position (position () + 1);
-    return result;
+    return backing_buffer [(pos++) + array_offset];
   }
-  
+
+  /**
+   * Bulk get
+   */
+  public ByteBuffer get (byte[] dst, int offset, int length)
+  {
+    checkArraySize(dst.length, offset, length);
+    if ( (limit - pos) < length) // check for overflow
+      throw new BufferUnderflowException();
+
+    System.arraycopy(backing_buffer, pos + array_offset, 
+                    dst, offset, length);
+    pos += length;
+
+    return this;
+  }
+
+  /**
+   * Relative bulk put(), overloads the ByteBuffer impl.
+   */
+  public ByteBuffer put (byte[] src, int offset, int length)
+  {
+    if ( (limit - pos) < length) // check for overflow
+      throw new BufferOverflowException();
+    checkArraySize(src.length, offset, length);
+
+    System.arraycopy(src, offset, backing_buffer, pos + array_offset, length);
+    pos += length;
+
+    return this;
+  }
+
   /**
    * Relative put method. Writes <code>value</code> to the next position
    * in the buffer.
@@ -161,12 +191,12 @@ final class ByteBufferImpl extends ByteBuffer
    */
   public ByteBuffer put (byte value)
   {
-    checkIfReadOnly();
-    checkForOverflow();
+    if (readOnly)
+        throw new ReadOnlyBufferException();
+    if (pos >= limit)
+        throw new BufferOverflowException();
 
-    int pos = position();
-    backing_buffer [pos + array_offset] = value;
-    position (pos + 1);
+    backing_buffer [(pos++) + array_offset] = value;
     return this;
   }
   
@@ -208,7 +238,21 @@ final class ByteBufferImpl extends ByteBuffer
   
   public ByteBuffer putChar (char value)
   {
-    ByteBufferHelper.putChar(this, value, order());
+    if (readOnly)
+      throw new ReadOnlyBufferException ();
+    if ( (limit-pos) < 2)
+      throw new BufferOverflowException();
+
+    if (endian == ByteOrder.LITTLE_ENDIAN)
+      {
+        backing_buffer [(pos++) + array_offset] = (byte)(value&0xFF);
+        backing_buffer [(pos++) + array_offset] = (byte)(value>>8);
+      }
+    else
+      {
+        backing_buffer [(pos++) + array_offset] = (byte)(value>>8);
+        backing_buffer [(pos++) + array_offset] = (byte)(value&0xFF);
+      }
     return this;
   }
   
index f9babe8..a6c81d9 100644 (file)
@@ -62,6 +62,7 @@ final class CharBufferImpl extends CharBuffer
   {
     super (copy.capacity (), copy.limit (), copy.position (), 0);
     backing_buffer = copy.backing_buffer;
+    array_offset = copy.array_offset;
     readOnly = copy.isReadOnly ();
   }
   
@@ -127,11 +128,10 @@ final class CharBufferImpl extends CharBuffer
    */
   public char get ()
   {
-    checkForUnderflow();
+    if (pos >= limit)
+        throw new BufferUnderflowException();
 
-    char result = backing_buffer [position ()];
-    position (position () + 1);
-    return result;
+    return backing_buffer [(pos++) + array_offset];
   }
   
   /**
@@ -142,10 +142,12 @@ final class CharBufferImpl extends CharBuffer
    */
   public CharBuffer put (char value)
   {
-    checkIfReadOnly();
-                   
-    backing_buffer [position ()] = value;
-    position (position () + 1);
+    if (readOnly)
+        throw new ReadOnlyBufferException();
+    if (pos >= limit)
+        throw new BufferOverflowException();
+
+    backing_buffer [(pos++) + array_offset] = value;
     return this;
   }
   
@@ -162,10 +164,38 @@ final class CharBufferImpl extends CharBuffer
   {
     checkIndex(index);
     
-    return backing_buffer [index];
+    return backing_buffer [index + array_offset];
   }
   
   /**
+   * Bulk get, overloaded for speed.
+   */
+  public CharBuffer get (char[] dst, int offset, int length)
+  {
+    checkArraySize(dst.length, offset, length);
+    checkForUnderflow(length);
+
+    System.arraycopy(backing_buffer, pos + array_offset, 
+                    dst, offset, length);
+    pos += length;
+    return this;
+  }
+
+  /**
+   * Bulk put, overloaded for speed.
+   */
+  public CharBuffer put (char[] src, int offset, int length)
+  {
+    checkArraySize(src.length, offset, length);
+    checkForOverflow(length);
+                   
+    System.arraycopy(src, offset,
+                    backing_buffer, pos + array_offset, length);
+    pos += length;
+    return this;
+  }
+
+  /**
    * Absolute put method. Writes <code>value</code> to position
    * <code>index</code> in the buffer.
    *
@@ -178,7 +208,7 @@ final class CharBufferImpl extends CharBuffer
     checkIndex(index);
     checkIfReadOnly();
            
-    backing_buffer [index] = value;
+    backing_buffer [index + array_offset] = value;
     return this;
   }