<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    On 09/30/2011 07:09 AM, Ulf Zibis wrote:
    <blockquote cite="mid:4E85CD9D.1050401@gmx.de" type="cite">
      <blockquote cite="mid:4E83E591.2090103@oracle.com" type="cite">
        <blockquote cite="mid:4E83A350.5010102@gmx.de" type="cite"> <br>
        </blockquote>
        <br>
        (1) new byte[]{(byte)0xE1, (byte)0x80, (byte)0x42} ---&gt;
        CoderResult.malformedForLength(1)<br>
        It appears the Unicode Standard now explicitly recommends to
        return the malformed length 2,<br>
        what UTF-8 is doing now, for this scenario<br>
      </blockquote>
      My idea behind is, that in case of malformed length 1 a
      consecutive call to the decode loop would again return another
      malformed length 1, to ensure 2 replacement chars in the output
      string. (Not sure, if that is expected in this corner case.)</blockquote>
    <br>
    Unicode Standard's "best practices" D93a/b recommends to return 2 in
    this case.<br>
    <br>
    <br>
    <blockquote cite="mid:4E85CD9D.1050401@gmx.de" type="cite">3.
      Consider additionally <a moz-do-not-send="true"
        href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6795537"><font
          face="">6795537</font> - <font face="">UTF_8$Decoder returns
          wrong results</font></a><br>
      <br>
      <br>
      <blockquote cite="mid:4E83E591.2090103@oracle.com" type="cite">
        I'm not sure I&nbsp; understand the suggested&nbsp; b1 &lt; -0x3e patch, I
        don't see we can simply replace<br>
        ((b1 &gt;&gt; 5) == -2) with (b1 &lt; -0x3e).<br>
      </blockquote>
      You must see the b1 &lt; -0x3e in combination with the following
      b1 &lt; -0x20. ;-)<br>
      <br>
      But now I have a better "if...else if" switch. :-)<br>
      - saves the shift operations<br>
      - only 1 comparison per case<br>
      - only 1 constant to load per case<br>
      - helps compiler to benefit from 1 byte constants and op-codes<br>
      - much better readable<br>
    </blockquote>
    <br>
    I believe we changed from (b1 &lt; xyz) to (b1 &gt;&gt; x) == -2
    back to 2009(?) because<br>
    the benchmark shows the "shift" version is slightly faster. Do you
    have any number<br>
    shows any difference now. My non-scientific benchmark still suggests
    the "shift"<br>
    type is faster on -server vm, no significant difference on -client
    vm.<br>
    <br>
    &nbsp; ------------------&nbsp; your new switch---------------<br>
    (1) -server<br>
    Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Millis&nbsp; Ratio<br>
    Decoding 1b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp; 1.000<br>
    Decoding 2b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2558 20.443<br>
    Decoding 3b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3439 27.481<br>
    Decoding 4b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2030 16.221<br>
    (2) -client<br>
    Decoding 1b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 335&nbsp; 1.000<br>
    Decoding 2b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1041&nbsp; 3.105<br>
    Decoding 3b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2245&nbsp; 6.694<br>
    Decoding 4b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1254&nbsp; 3.741<br>
    <br>
    &nbsp; ------------------ existing "shift"---------------<br>
    (1) -server<br>
    Decoding 1b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 134&nbsp; 1.000<br>
    Decoding 2b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1891 14.106<br>
    Decoding 3b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2934 21.886<br>
    Decoding 4b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2133 15.913<br>
    (2) -client<br>
    Decoding 1b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 341&nbsp; 1.000<br>
    Decoding 2b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 949&nbsp; 2.560<br>
    Decoding 3b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2321&nbsp; 6.255<br>
    Decoding 4b UTF-8 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1278&nbsp; 3.446<br>
    <br>
    <br>
    <br>
    -sherman<br>
    <br>
  </body>
</html>