]> granicus.if.org Git - icu/commitdiff
ICU-11276 Move rounding into preProcess function since the micro generator could...
authorShane Carr <shane@unicode.org>
Wed, 5 Sep 2018 23:25:10 +0000 (16:25 -0700)
committerShane Carr <shane@unicode.org>
Thu, 27 Sep 2018 21:27:40 +0000 (14:27 -0700)
icu4c/source/i18n/number_formatimpl.cpp
icu4c/source/i18n/number_formatimpl.h

index b60ba4fb97d0f472ea25991af99371257cef8640..cd1856a0829a137f79eca30ca805d02a99cb950c 100644 (file)
@@ -76,7 +76,7 @@ void NumberFormatterImpl::formatStatic(const MacroProps& macros, DecimalQuantity
     NumberFormatterImpl impl(macros, false, status);
     MicroProps& micros = impl.preProcessUnsafe(inValue, status);
     if (U_FAILURE(status)) { return; }
-    int32_t length = formatNumber(micros, inValue, outString, 0, status);
+    int32_t length = writeNumber(micros, inValue, outString, 0, status);
     writeAffixes(micros, outString, 0, length, status);
 }
 
@@ -97,7 +97,7 @@ void NumberFormatterImpl::format(DecimalQuantity& inValue, NumberStringBuilder&
     MicroProps micros;
     preProcess(inValue, micros, status);
     if (U_FAILURE(status)) { return; }
-    int32_t length = formatNumber(micros, inValue, outString, 0, status);
+    int32_t length = writeNumber(micros, inValue, outString, 0, status);
     writeAffixes(micros, outString, 0, length, status);
 }
 
@@ -109,6 +109,8 @@ void NumberFormatterImpl::preProcess(DecimalQuantity& inValue, MicroProps& micro
         return;
     }
     fMicroPropsGenerator->processQuantity(inValue, microsOut, status);
+    microsOut.rounder.apply(inValue, status);
+    microsOut.integerWidth.apply(inValue, status);
 }
 
 MicroProps& NumberFormatterImpl::preProcessUnsafe(DecimalQuantity& inValue, UErrorCode& status) {
@@ -120,6 +122,8 @@ MicroProps& NumberFormatterImpl::preProcessUnsafe(DecimalQuantity& inValue, UErr
         return fMicros; // must always return a value
     }
     fMicroPropsGenerator->processQuantity(inValue, fMicros, status);
+    fMicros.rounder.apply(inValue, status);
+    fMicros.integerWidth.apply(inValue, status);
     return fMicros;
 }
 
@@ -420,15 +424,6 @@ NumberFormatterImpl::resolvePluralRules(const PluralRules* rulesPtr, const Local
     return fRules.getAlias();
 }
 
-int32_t NumberFormatterImpl::formatNumber(const MicroProps& micros, DecimalQuantity& quantity,
-                                          NumberStringBuilder& string, int32_t index,
-                                          UErrorCode& status) {
-    micros.rounder.apply(quantity, status);
-    micros.integerWidth.apply(quantity, status);
-    int32_t length = writeNumber(micros, quantity, string, index, status);
-    return length;
-}
-
 int32_t NumberFormatterImpl::writeAffixes(const MicroProps& micros, NumberStringBuilder& string,
                                           int32_t start, int32_t end, UErrorCode& status) {
     // Always apply the inner modifier (which is "strong").
index 2fcc58d34ffda63484456f06ee5d59aa76331a9b..e8f0fc3f747ba10b76c34b1c78e031f59f167b75 100644 (file)
@@ -68,8 +68,8 @@ class NumberFormatterImpl : public UMemory {
      * Synthesizes the output string from a MicroProps and DecimalQuantity.
      * This method formats only the main number, not affixes.
      */
-    static int32_t formatNumber(const MicroProps& micros, DecimalQuantity& quantity,
-                                NumberStringBuilder& string, int32_t index, UErrorCode& status);
+    static int32_t writeNumber(const MicroProps& micros, DecimalQuantity& quantity,
+                               NumberStringBuilder& string, int32_t index, UErrorCode& status);
 
     /**
      * Adds the affixes.  Intended to be called immediately after formatNumber.
@@ -131,10 +131,6 @@ class NumberFormatterImpl : public UMemory {
     const MicroPropsGenerator *
     macrosToMicroGenerator(const MacroProps &macros, bool safe, UErrorCode &status);
 
-    static int32_t
-    writeNumber(const MicroProps &micros, DecimalQuantity &quantity, NumberStringBuilder &string,
-                int32_t index, UErrorCode &status);
-
     static int32_t
     writeIntegerDigits(const MicroProps &micros, DecimalQuantity &quantity, NumberStringBuilder &string,
                        int32_t index, UErrorCode &status);