diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-25 21:04:01 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-25 21:04:01 +0000 |
| commit | 7da8d41adf41ef3a5b498c0cbdb1f88d36ae1d62 (patch) | |
| tree | 18f6a8709e9e8ec6387d919805397a4148495ecd /libjava/classpath/gnu/java/nio | |
| parent | 6d9bff9fd45d8279db22dfbfbd28044a08e7aeaa (diff) | |
| download | ppe42-gcc-7da8d41adf41ef3a5b498c0cbdb1f88d36ae1d62.tar.gz ppe42-gcc-7da8d41adf41ef3a5b498c0cbdb1f88d36ae1d62.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117209 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/classpath/gnu/java/nio')
| -rw-r--r-- | libjava/classpath/gnu/java/nio/charset/ByteCharset.java | 16 | ||||
| -rw-r--r-- | libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java | 13 | ||||
| -rw-r--r-- | libjava/classpath/gnu/java/nio/charset/US_ASCII.java | 15 |
3 files changed, 43 insertions, 1 deletions
diff --git a/libjava/classpath/gnu/java/nio/charset/ByteCharset.java b/libjava/classpath/gnu/java/nio/charset/ByteCharset.java index 2cc91b850f6..da0fdcbcdb3 100644 --- a/libjava/classpath/gnu/java/nio/charset/ByteCharset.java +++ b/libjava/classpath/gnu/java/nio/charset/ByteCharset.java @@ -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() diff --git a/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java b/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java index cc06ecd5ad0..2a3073a32ed 100644 --- a/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java +++ b/libjava/classpath/gnu/java/nio/charset/ISO_8859_1.java @@ -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() diff --git a/libjava/classpath/gnu/java/nio/charset/US_ASCII.java b/libjava/classpath/gnu/java/nio/charset/US_ASCII.java index d26f7ffc9ab..8888416bebf 100644 --- a/libjava/classpath/gnu/java/nio/charset/US_ASCII.java +++ b/libjava/classpath/gnu/java/nio/charset/US_ASCII.java @@ -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); |

