ICU-10291 Optimize IDNA toASCII loop
diff --git a/icu4c/source/common/uidna.cpp b/icu4c/source/common/uidna.cpp
index 7cc97a9..ac2f9c3 100644
--- a/icu4c/source/common/uidna.cpp
+++ b/icu4c/source/common/uidna.cpp
@@ -57,18 +57,16 @@
inline static UBool
startsWithPrefix(const UChar* src , int32_t srcLength){
- UBool startsWithPrefix = TRUE;
-
if(srcLength < ACE_PREFIX_LENGTH){
return FALSE;
}
for(int8_t i=0; i< ACE_PREFIX_LENGTH; i++){
if(toASCIILower(src[i]) != ACE_PREFIX[i]){
- startsWithPrefix = FALSE;
+ return FALSE;
}
}
- return startsWithPrefix;
+ return TRUE;
}
@@ -441,6 +439,7 @@
for(int32_t j=0; j<srcLength; j++){
if(src[j]> 0x7f){
srcIsASCII = FALSE;
+ break;
}/*else if(isLDHChar(src[j])==FALSE){
// here we do not assemble surrogates
// since we know that LDH code points
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/IDNA2003.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/IDNA2003.java
index e3503b8..12ba5a9 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/IDNA2003.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/IDNA2003.java
@@ -35,17 +35,15 @@
private static final StringPrep namePrep = StringPrep.getInstance(StringPrep.RFC3491_NAMEPREP);
private static boolean startsWithPrefix(StringBuffer src){
- boolean startsWithPrefix = true;
-
if(src.length() < ACE_PREFIX.length){
return false;
}
for(int i=0; i<ACE_PREFIX.length;i++){
if(toASCIILower(src.charAt(i)) != ACE_PREFIX[i]){
- startsWithPrefix = false;
+ return false;
}
}
- return startsWithPrefix;
+ return true;
}
private static char toASCIILower(char ch){
@@ -168,6 +166,7 @@
while((ch = src.next())!= UCharacterIterator.DONE){
if(ch> 0x7f){
srcIsASCII = false;
+ break;
}
}
int failPos = -1;