]> granicus.if.org Git - icu/commitdiff
ICU-12763 for C++ select(const Formattable&...), add UErrorCode param, return empty...
authorPeter Edberg <pedberg@unicode.org>
Thu, 9 Feb 2017 23:40:59 +0000 (23:40 +0000)
committerPeter Edberg <pedberg@unicode.org>
Thu, 9 Feb 2017 23:40:59 +0000 (23:40 +0000)
X-SVN-Rev: 39658

icu4c/source/i18n/plurrule.cpp
icu4c/source/i18n/unicode/plurrule.h
icu4c/source/i18n/upluralrules.cpp

index 0ce378cba9d824a8913037fea9aee011533d36bf..c4155cb4732c78180367f86d67c16e0f22a5898c 100644 (file)
@@ -248,21 +248,23 @@ PluralRules::select(double number) const {
 }
 
 UnicodeString
-PluralRules::select(const Formattable& obj, const NumberFormat& fmt) const {
-    UErrorCode status = U_ZERO_ERROR;
-    const DecimalFormat *decFmt = dynamic_cast<const DecimalFormat *>(&fmt);
-    if (decFmt != NULL) {
-        VisibleDigitsWithExponent digits;
-        decFmt->initVisibleDigitsWithExponent(obj, digits, status);
-        if (U_SUCCESS(status)) {
-            return select(digits);
-        }
-    }
-    double number = obj.getDouble(status);
+PluralRules::select(const Formattable& obj, const NumberFormat& fmt, UErrorCode& status) const {
     if (U_SUCCESS(status)) {
-        return select(number);
+        const DecimalFormat *decFmt = dynamic_cast<const DecimalFormat *>(&fmt);
+        if (decFmt != NULL) {
+            VisibleDigitsWithExponent digits;
+            decFmt->initVisibleDigitsWithExponent(obj, digits, status);
+            if (U_SUCCESS(status)) {
+                return select(digits);
+            }
+        } else {
+            double number = obj.getDouble(status);
+            if (U_SUCCESS(status)) {
+                return select(number);
+            }
+        }
     }
-    return getKeywordOther();
+    return UnicodeString();
 }
 
 UnicodeString
index a46abee85e68fa53ac4008005b50038f78a014ec..d8ab2c52ea0fe3fa6bdf1c000de02d1708ed581b 100644 (file)
@@ -356,10 +356,14 @@ public:
      * @param obj The numeric object for which the rule should be determined.
      * @param fmt The NumberFormat specifying how the number will be formatted
      *        (this can affect the plural form, e.g. "1 dollar" vs "1.0 dollars").
-     * @return The keyword of the selected rule.
+     * @param status  Input/output parameter. If at entry this indicates a
+     *                failure status, the method returns immediately; otherwise
+     *                this is set to indicate the outcome of the call.
+     * @return The keyword of the selected rule, or an empty string in the case
+     *         of an error.
      * @internal ICU 59 technology preview, may be removed in the future
      */
-    UnicodeString select(const Formattable& obj, const NumberFormat& fmt) const;
+    UnicodeString select(const Formattable& obj, const NumberFormat& fmt, UErrorCode& status) const;
 
     /**
       * @internal
index 384a87c6b05829f251561963d319c7df5564f8ba..4eab7b23082e7d3b2cdc960fa459e4a4cc125f34 100644 (file)
@@ -73,7 +73,7 @@ uplrules_selectWithFormat(const UPluralRules *uplrules,
         return 0;
     }
     Formattable obj(number);
-    UnicodeString result = plrules->select(obj, *nf);
+    UnicodeString result = plrules->select(obj, *nf, *status);
     return result.extract(keyword, capacity, *status);
 }