re PR libgcj/29178 (CharsetEncoder.canEncode() gives different results than Sun version)
authorTom Tromey <tromey@redhat.com>
Mon, 25 Sep 2006 21:04:01 +0000 (21:04 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Mon, 25 Sep 2006 21:04:01 +0000 (21:04 +0000)
PR libgcj/29178:
* gnu/java/nio/charset/US_ASCII.java (Encoder.canEncode): New method.
(Encoder.canEncode): Likewise.
(Encoder.encodeLoop): Return unmappable for all non-ASCII characters.
* gnu/java/nio/charset/ByteCharset.java (Encoder.canEncode): New
method.
(Encoder.canEncode): Likewise.
* gnu/java/nio/charset/ISO_8859_1.java (Encoder.canEncode): New
method.
(Encoder.canEncode): Likewise.

From-SVN: r117209

libjava/classpath/ChangeLog.gcj
libjava/classpath/gnu/java/nio/charset/ByteCharset.java
libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java
libjava/classpath/gnu/java/nio/charset/US_ASCII.java

index 3503a07..81112e5 100644 (file)
@@ -1,5 +1,18 @@
 2006-09-25  Tom Tromey  <tromey@redhat.com>
 
+       PR libgcj/29178:
+       * gnu/java/nio/charset/US_ASCII.java (Encoder.canEncode): New method.
+       (Encoder.canEncode): Likewise.
+       (Encoder.encodeLoop): Return unmappable for all non-ASCII characters.
+       * gnu/java/nio/charset/ByteCharset.java (Encoder.canEncode): New
+       method.
+       (Encoder.canEncode): Likewise.
+       * gnu/java/nio/charset/ISO_8859_1.java (Encoder.canEncode): New
+       method.
+       (Encoder.canEncode): Likewise.
+
+2006-09-25  Tom Tromey  <tromey@redhat.com>
+
        * native/fdlibm/mprec.c (mprec_calloc): Renamed.
        (Balloc): Updated.
 
index 2cc91b8..da0fdcb 100644 (file)
@@ -156,6 +156,22 @@ abstract class ByteCharset extends Charset
          }
     }
 
+    public boolean canEncode(char c)
+    {
+      byte b = (c < lookup.length) ? lookup[c] : 0;
+      return b != 0 || c == 0;
+    }
+
+    public boolean canEncode(CharSequence cs)
+    {
+      for (int i = 0; i < cs.length(); ++i)
+        {
+          if (! canEncode(cs.charAt(i)))
+            return false;
+        }
+      return true;
+    }
+
     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
     {
       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
index cc06ecd..2a3073a 100644 (file)
@@ -128,6 +128,19 @@ final class ISO_8859_1 extends Charset
       super (cs, 1.0f, 1.0f);
     }
 
+    public boolean canEncode(char c)
+    {
+      return c <= 0xff;
+    }
+
+    public boolean canEncode(CharSequence cs)
+    {
+      for (int i = 0; i < cs.length(); ++i)
+        if (! canEncode(cs.charAt(i)))
+          return false;
+      return true;
+    }
+
     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
     {
       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
index d26f7ff..8888416 100644 (file)
@@ -134,6 +134,19 @@ final class US_ASCII extends Charset
       super (cs, 1.0f, 1.0f);
     }
 
+    public boolean canEncode(char c)
+    {
+      return c <= 0x7f;
+    }
+
+    public boolean canEncode(CharSequence cs)
+    {
+      for (int i = 0; i < cs.length(); ++i)
+        if (! canEncode(cs.charAt(i)))
+          return false;
+      return true;
+    }
+
     protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
     {
       // TODO: Optimize this in the case in.hasArray() / out.hasArray()
@@ -141,7 +154,7 @@ final class US_ASCII extends Charset
       {
         char c = in.get ();
 
-        if (c > Byte.MAX_VALUE)
+        if (c > 0x7f)
           {
             in.position (in.position () - 1);
             return CoderResult.unmappableForLength (1);