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);
     }

     /**



Reply via email to