On 02/05/2014 07:43 PM, Xueming Shen wrote:
On 02/05/2014 11:09 AM, Paul Sandoz wrote:
On Feb 5, 2014, at 6:58 PM, Xueming Shen<xueming.s...@oracle.com> wrote:

Hi,

Let's try to wrap it up, otherwise I may drop the ball somewhere :-)

On 01/22/2014 07:20 AM, Paul Sandoz wrote:

if (lang == "tr" || lang == "az" || lang == "lt") {
   // local dependent
   return toLowerCaseEx(result, firstUpper, locale, true);
}
// otherwise false is passed to subsequent calls to toLowerCaseEx

?

toLowerCaseEx will also be invoked later (in your another suggestion next), which
needs a "localeDependent".

But is not the second call to toLowerCaseEx always invoked with a value of false?

2574         String lang = locale.getLanguage();
2575 final boolean localeDependent = (lang == "tr" || lang == "az" || lang == "lt");
2576         if (localeDependent) {
2577 return toLowerCaseEx(result, firstUpper, locale, localeDependent); //<-- localeDependent is true
2578         }
2579         for (int i = firstUpper; i<  len; i++) {
2580             int c = (int)value[i];
2581 if (c>= Character.MIN_HIGH_SURROGATE&& c<= Character.MAX_HIGH_SURROGATE ||
2582                 c == '\u03A3' ||      // GREEK CAPITAL LETTER SIGMA
2583 (c = Character.toLowerCase(c))>= Character.MIN_SUPPLEMENTARY_CODE_POINT) { 2584 return toLowerCaseEx(result, i, locale, localeDependent); //<-- localDependent is false
2585             }
2586             result[i] = (char)c;
2587         }
2588         return new String(result, true);



You are absolutely right :-) I will update as suggested.

-sherman

Hi Sherman,
the code can be faster if the first loop call toLowerCaseEx in case of a surrogate instead of modifying srcCount because in that case the JIT will see that the increment is constant.

Note that with the current code, the performance of toLowerCase if it was never called with a string that contains a surrogate are great but if toLowerCase is called once with a string that contains a surrogate, even if toLowercase is called after with strings that never contain a surrogate performance will be slower than it was. Calling toLowerCaseEx will make a toLowerCase with a surrogate slower but make toLowerCase faster in the common case.

cheers,
RĂ©mi




Reply via email to