2004-05-04 Michael Koch <konqueror@gmx.de>
authorMichael Koch <konqueror@gmx.de>
Tue, 4 May 2004 21:31:30 +0000 (21:31 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Tue, 4 May 2004 21:31:30 +0000 (21:31 +0000)
* java/nio/ByteBuffer.java,
java/nio/CharBuffer.java,
java/nio/DoubleBuffer.java,
java/nio/FloatBuffer.java,
java/nio/IntBuffer.java,
java/nio/LongBuffer.java,
java/nio/ShortBuffer.java:
(compareTo): Fixed bogus implementation in all buffer classes.

From-SVN: r81489

libjava/ChangeLog
libjava/java/nio/ByteBuffer.java
libjava/java/nio/CharBuffer.java
libjava/java/nio/DoubleBuffer.java
libjava/java/nio/FloatBuffer.java
libjava/java/nio/IntBuffer.java
libjava/java/nio/LongBuffer.java
libjava/java/nio/ShortBuffer.java

index 76fe4f0e07da17c822df75d46f5ca804cc0fb6a9..baf4d6ac74355cf0c039d22da6bcfb3157341822 100644 (file)
@@ -1,3 +1,14 @@
+2004-05-04  Michael Koch  <konqueror@gmx.de>
+
+       * java/nio/ByteBuffer.java,
+       java/nio/CharBuffer.java,
+       java/nio/DoubleBuffer.java,
+       java/nio/FloatBuffer.java,
+       java/nio/IntBuffer.java,
+       java/nio/LongBuffer.java,
+       java/nio/ShortBuffer.java:
+       (compareTo): Fixed bogus implementation in all buffer classes.
+
 2004-05-04  Ingo Proetel  <proetel@aicas.com>
 
        * java/awt/image/ColorModel.java (getRGBdefault): Default ColorModel has
index 276b2dbcb81fdabf54c8ad816b2f1511f5916c4b..8b43da57910ed8dc49270638849b142ea43a8c48 100644 (file)
@@ -293,32 +293,27 @@ public abstract class ByteBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    ByteBuffer a = (ByteBuffer) obj;
+    ByteBuffer other = (ByteBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+        byte a = get(pos_this++);
+       byte b = other.get(pos_other++);
+        
+       if (a == b)
+         continue;
+          
+       if (a < b)
+         return -1;
+          
+       return 1;
       }
-
-    return 0;
+      
+    return remaining() - other.remaining();
   }
 
   /**
index 3d488bad345c8ff1562866fcfb6ab273d11de867..416ca8349886645d9e3792b1c6b528c2f452c7c0 100644 (file)
@@ -1,5 +1,5 @@
 /* CharBuffer.java -- 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -310,32 +310,27 @@ public abstract class CharBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    CharBuffer a = (CharBuffer) obj;
+    CharBuffer other = (CharBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+        char a = get(pos_this++);
+        char b = other.get(pos_other++);
+        
+        if (a == b)
+          continue;
+          
+        if (a < b)
+          return -1;
+          
+        return 1;
       }
-
-    return 0;
+      
+     return remaining() - other.remaining();
   }
 
   /**
index d669c2138c4e48187fe721a88257763703efa2ba..1ad8baede02f084f347969f80c2f811281e7b45d 100644 (file)
@@ -1,5 +1,5 @@
 /* DoubleBuffer.java -- 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -265,32 +265,27 @@ public abstract class DoubleBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    DoubleBuffer a = (DoubleBuffer) obj;
+    DoubleBuffer other = (DoubleBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+       double a = get(pos_this++);
+       double b = other.get(pos_other++);
+        
+       if (a == b)
+         continue;
+          
+       if (a < b)
+         return -1;
+          
+       return 1;
       }
-
-    return 0;
+      
+    return remaining() - other.remaining();
   }
 
   /**
index 0c7b04dd0f5e7f8c594c6667c3a93a624076022a..ab87b7f898f49526c4932e8022341b09469b9c06 100644 (file)
@@ -1,5 +1,5 @@
 /* FloatBuffer.java -- 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -265,32 +265,27 @@ public abstract class FloatBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    FloatBuffer a = (FloatBuffer) obj;
+    FloatBuffer other = (FloatBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+       float a = get(pos_this++);
+       float b = other.get(pos_other++);
+        
+       if (a == b)
+         continue;
+          
+       if (a < b)
+         return -1;
+          
+       return 1;
       }
-
-    return 0;
+      
+    return remaining() - other.remaining();
   }
 
   /**
index 469a344ea7109015f1226319b9948710326e4700..52d822aa81d1b9e02c9631bbf6a7f2f9bdb43d95 100644 (file)
@@ -1,5 +1,5 @@
 /* IntBuffer.java -- 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -265,32 +265,27 @@ public abstract class IntBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    IntBuffer a = (IntBuffer) obj;
+    IntBuffer other = (IntBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+        int a = get(pos_this++);
+        int b = other.get(pos_other++);
+        
+        if (a == b)
+          continue;
+          
+        if (a < b)
+          return -1;
+          
+        return 1;
       }
-
-    return 0;
+      
+     return remaining() - other.remaining();
   }
 
   /**
index 712e0b3b59a6e5a9da34e1b07c344f9bdc5eea4d..1b420eb5ed47b9da56e610c505c944d2fbf465d2 100644 (file)
@@ -1,5 +1,5 @@
 /* LongBuffer.java -- 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -265,32 +265,27 @@ public abstract class LongBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    LongBuffer a = (LongBuffer) obj;
+    LongBuffer other = (LongBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+        long a = get(pos_this++);
+        long b = other.get(pos_other++);
+        
+        if (a == b)
+          continue;
+          
+        if (a < b)
+          return -1;
+          
+        return 1;
       }
-
-    return 0;
+      
+     return remaining() - other.remaining();
   }
 
   /**
index 61097d04dd957cf9bca9cc5f1e43fbae7df7acc4..9f542769faca177b1b38711cb7bbf79d88b6bc1a 100644 (file)
@@ -1,5 +1,5 @@
 /* ShortBuffer.java -- 
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -265,32 +265,27 @@ public abstract class ShortBuffer extends Buffer
    */
   public int compareTo (Object obj)
   {
-    ShortBuffer a = (ShortBuffer) obj;
+    ShortBuffer other = (ShortBuffer) obj;
 
-    if (a.remaining () != remaining ())
-      return 1;
-
-    if (! hasArray () ||
-        ! a.hasArray ())
-      {
-        return 1;
-      }
-
-    int r = remaining ();
-    int i1 = position ();
-    int i2 = a.position ();
-
-    for (int i = 0; i < r; i++)
+    int num = Math.min(remaining(), other.remaining());
+    int pos_this = position();
+    int pos_other = other.position();
+    
+    for (int count = 0; count < num; count++)
       {
-        int t = (int) (get (i1) - a.get (i2));
-
-        if (t != 0)
-          {
-            return (int) t;
-          }
+        short a = get(pos_this++);
+        short b = other.get(pos_other++);
+        
+        if (a == b)
+          continue;
+          
+        if (a < b)
+          return -1;
+          
+        return 1;
       }
-
-    return 0;
+      
+     return remaining() - other.remaining();
   }
 
   /**