]> granicus.if.org Git - icu/commitdiff
ICU-10397 move singleton init out of static functions (perf)
authorSteven R. Loomis <srl@icu-project.org>
Fri, 13 Sep 2013 16:21:56 +0000 (16:21 +0000)
committerSteven R. Loomis <srl@icu-project.org>
Fri, 13 Sep 2013 16:21:56 +0000 (16:21 +0000)
X-SVN-Rev: 34304

icu4c/source/i18n/decimfmt.cpp
icu4c/source/i18n/unicode/decimfmt.h

index 8b7afd0caa699a676485c5a8e6e0672ece05e8f3..be865a2cae995d035f328ec445982b2fb82aa58e 100644 (file)
@@ -3003,18 +3003,13 @@ int32_t DecimalFormat::compareAffix(const UnicodeString& text,
     return compareSimpleAffix(*patternToCompare, text, pos, isLenient());
 }
 
-static UBool equalWithSignCompatibility(UChar32 lhs, UChar32 rhs) {
+UBool DecimalFormat::equalWithSignCompatibility(UChar32 lhs, UChar32 rhs) const {
     if (lhs == rhs) {
         return TRUE;
     }
-    UErrorCode status = U_ZERO_ERROR;
-    const DecimalFormatStaticSets* staticSets = DecimalFormatStaticSets::getStaticSets(status);
-    if (U_FAILURE(status)) {
-        // This is the best we can do
-        return FALSE;
-    }
-    const UnicodeSet *minusSigns = staticSets->fMinusSigns;
-    const UnicodeSet *plusSigns = staticSets->fPlusSigns;
+    U_ASSERT(fStaticSets != NULL); // should already be loaded
+    const UnicodeSet *minusSigns = fStaticSets->fMinusSigns;
+    const UnicodeSet *plusSigns = fStaticSets->fPlusSigns;
     return (minusSigns->contains(lhs) && minusSigns->contains(rhs)) ||
         (plusSigns->contains(lhs) && plusSigns->contains(rhs));
 }
@@ -3027,7 +3022,7 @@ UnicodeString& DecimalFormat::trimMarksFromAffix(const UnicodeString& affix, Uni
     UChar trimBuf[TRIM_BUFLEN];
     int32_t affixLen = affix.length();
     int32_t affixPos, trimLen = 0;
-    
+
     for (affixPos = 0; affixPos < affixLen; affixPos++) {
         UChar c = affix.charAt(affixPos);
         if (!IS_BIDI_MARK(c)) {
@@ -3055,7 +3050,7 @@ UnicodeString& DecimalFormat::trimMarksFromAffix(const UnicodeString& affix, Uni
 int32_t DecimalFormat::compareSimpleAffix(const UnicodeString& affix,
                                           const UnicodeString& input,
                                           int32_t pos,
-                                          UBool lenient) {
+                                          UBool lenient) const {
     int32_t start = pos;
     UnicodeString trimmedAffix;
     // For more efficiency we should keep lazily-created trimmed affixes around in
@@ -3068,13 +3063,14 @@ int32_t DecimalFormat::compareSimpleAffix(const UnicodeString& affix,
     UnicodeSet *affixSet;
     UErrorCode status = U_ZERO_ERROR;
 
-    const DecimalFormatStaticSets *staticSets = DecimalFormatStaticSets::getStaticSets(status);
+    U_ASSERT(fStaticSets != NULL); // should already be loaded
+
     if (U_FAILURE(status)) {
         return -1;
     }
     if (!lenient) {
-        affixSet = staticSets->fStrictDashEquivalents;
-        
+        affixSet = fStaticSets->fStrictDashEquivalents;
+
         // If the trimmedAffix is exactly one character long and that character
         // is in the dash set and the very next input character is also
         // in the dash set, return a match.
@@ -3156,13 +3152,13 @@ int32_t DecimalFormat::compareSimpleAffix(const UnicodeString& affix,
         }
     } else {
         UBool match = FALSE;
-        
-        affixSet = staticSets->fDashEquivalents;
+
+        affixSet = fStaticSets->fDashEquivalents;
 
         if (affixCharLength == affixLength && affixSet->contains(affixChar))  {
             pos = skipUWhiteSpaceAndMarks(input, pos);
             UChar32 ic = input.char32At(pos);
-            
+
             if (affixSet->contains(ic)) {
                 pos += U16_LENGTH(ic);
                 pos = skipBidiMarks(input, pos);
index e1f7a37633aca5ce1ef8592adc791ed40a03e77e..5f14de4460d5885adbe00352db3b1df6919b6fe0 100644 (file)
@@ -2037,10 +2037,12 @@ private:
 
     static UnicodeString& trimMarksFromAffix(const UnicodeString& affix, UnicodeString& trimmedAffix);
 
-    static int32_t compareSimpleAffix(const UnicodeString& affix,
+    UBool equalWithSignCompatibility(UChar32 lhs, UChar32 rhs) const;
+
+    int32_t compareSimpleAffix(const UnicodeString& affix,
                                       const UnicodeString& input,
                                       int32_t pos,
-                                      UBool lenient);
+                                      UBool lenient) const;
 
     static int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos);