I couldn't resist too ;-) . See:
https://bugs.openjdk.java.net/attachment.cgi?id=178&action=diff
Download:
https://bugs.openjdk.java.net/attachment.cgi?id=178
Please have in mind:
- the performance advantage as pair only occurs, if isBMPCodePoint too
uses logical shift '>>>'.
- String(int[] codePoints, int offset, int count) would have to access
sun.nio.cs.Surrogate, if isBMPCodePoint doesn't exist in Character.
Hopefully you can agree all my changes,
-Ulf
Am 11.03.2010 05:42, schrieb Martin Buchholz:
I couldn't resist making a similar change to isValidCodePoint.
@@ -2678,7 +2678,8 @@
* @since 1.5
*/
public static boolean isValidCodePoint(int codePoint) {
- return codePoint>= MIN_CODE_POINT&& codePoint<= MAX_CODE_POINT;
+ int plane = codePoint>>> 16;
+ return plane< ((MAX_CODE_POINT + 1)>>> 16);
}
/**
This is a more important optimization, since isValidCodePoint
almost always requires two compares, and this reduces it to one.
(Still, none of these are really important, and no one will notice)
http://cr.openjdk.java.net/~martin/webrevs/openjdk7/isSupplementaryCodePoint/
Martin
On Wed, Mar 10, 2010 at 17:59, Martin Buchholz<[email protected]> wrote:
On Wed, Mar 10, 2010 at 09:58, Ulf Zibis<[email protected]> wrote:
Hi Martin,
there wasn't enough time today, so please wait for tomorrow.
In brief:
- I wouldn't rename to isBMPCodePoint(), because there are many other names
in Surrogate class that don't sync to Character and and a usages search in
sun.nio.cs.* or where ever else could be omitted. Better add "// return
Character.isBMPCodePoint(uc);" as hint for the future.
- Thanks for mention me as contributor.
- Doesn't the bug description include the addition of isBMPCodePoint() to
class Character and the equivalent enhancement to isSupplementaryCodePoint()
?
Sorry, I should have included the fix to isSupplementaryCodePoint()
in the last fix.
Here's the next fix:
http://cr.openjdk.java.net/~martin/webrevs/openjdk7/isSupplementaryCodePoint/
6666666: A better implementation of Character.isSupplementaryCodePoint
Summary: Clever bit-twiddling saves a few bytes of machine code
Reviewed-by: sherman
Contributed-by: Ulf Zibis<[email protected]>
diff --git a/src/share/classes/java/lang/Character.java
b/src/share/classes/java/lang/Character.java
--- a/src/share/classes/java/lang/Character.java
+++ b/src/share/classes/java/lang/Character.java
@@ -2693,8 +2693,8 @@
* @since 1.5
*/
public static boolean isSupplementaryCodePoint(int codePoint) {
- return codePoint>= MIN_SUPPLEMENTARY_CODE_POINT
-&& codePoint<= MAX_CODE_POINT;
+ int plane = codePoint>>> 16;
+ return plane != 0&& plane< ((MAX_CODE_POINT + 1)>>> 16);
}
/**