review request for 6798511/6860431: Include functionality of Surrogate in Character

Ulf Zibis Ulf.Zibis at gmx.de
Wed Mar 17 08:36:08 UTC 2010


Oops, correction:

But
         for (int i = offset; i < offset + count; i++) {
             int c = codePoints[i];
             byte plane = (byte)(c >>> 16);
             if (plane == 0)
                 n += 1;
             else if (plane <= (byte)0x11)
                 n += 2;
             else throw new IllegalArgumentException(Integer.toString(c));
         }
has too only 2 branches and additionally could benefit from tiny 8-bit 
comparisons.
The shift additionally could be omitted on CPU's which can benefit from 
6933327.

Instead:
         for (int i = offset; i < offset + count; i++) {
             int c = codePoints[i];
             if (c >= Character.MIN_VALUE &&
                 c <=  Character.MAX_VALUE)
                 n += 1;
             else if (c >= Character.MIN_SUPPLEMENTARY_CODE_POINT &&
                 c <=  Character.MAX_SUPPLEMENTARY_CODE_POINT)
                 n += 2;
             else throw new IllegalArgumentException(Integer.toString(c));
         }
needs 4 branches and 4 32-bit comparisons.

-Ulf





More information about the core-libs-dev mailing list