Index: source/i18n/msgfmt.cpp |
diff --git a/source/i18n/msgfmt.cpp b/source/i18n/msgfmt.cpp |
index 853a64ca4ba932fbd643570f5895b9df0f96c369..1fe2c8d622e04be9dfba3bb2fb6511a17f3d0530 100644 |
--- a/source/i18n/msgfmt.cpp |
+++ b/source/i18n/msgfmt.cpp |
@@ -1,6 +1,6 @@ |
/******************************************************************** |
* COPYRIGHT: |
- * Copyright (c) 1997-2014, International Business Machines Corporation and |
+ * Copyright (c) 1997-2015, International Business Machines Corporation and |
* others. All Rights Reserved. |
******************************************************************** |
* |
@@ -46,6 +46,7 @@ |
#include "ustrfmt.h" |
#include "util.h" |
#include "uvector.h" |
+#include "visibledigits.h" |
// ***************************************************************************** |
// class MessageFormat |
@@ -413,7 +414,7 @@ MessageFormat::operator==(const Format& rhs) const |
if (count != rhs_count) { |
return FALSE; |
} |
- int32_t idx = 0, rhs_idx = 0, pos = -1, rhs_pos = -1; |
+ int32_t idx = 0, rhs_idx = 0, pos = UHASH_FIRST, rhs_pos = UHASH_FIRST; |
for (; idx < count && rhs_idx < rhs_count && U_SUCCESS(ec); ++idx, ++rhs_idx) { |
const UHashElement* cur = uhash_nextElement(customFormatArgStarts, &pos); |
const UHashElement* rhs_cur = uhash_nextElement(that.customFormatArgStarts, &rhs_pos); |
@@ -1332,7 +1333,7 @@ void MessageFormat::copyObjects(const MessageFormat& that, UErrorCode& ec) { |
const int32_t count = uhash_count(that.cachedFormatters); |
int32_t pos, idx; |
- for (idx = 0, pos = -1; idx < count && U_SUCCESS(ec); ++idx) { |
+ for (idx = 0, pos = UHASH_FIRST; idx < count && U_SUCCESS(ec); ++idx) { |
const UHashElement* cur = uhash_nextElement(that.cachedFormatters, &pos); |
Format* newFormat = ((Format*)(cur->value.pointer))->clone(); |
if (newFormat) { |
@@ -1350,7 +1351,7 @@ void MessageFormat::copyObjects(const MessageFormat& that, UErrorCode& ec) { |
} |
const int32_t count = uhash_count(that.customFormatArgStarts); |
int32_t pos, idx; |
- for (idx = 0, pos = -1; idx < count && U_SUCCESS(ec); ++idx) { |
+ for (idx = 0, pos = UHASH_FIRST; idx < count && U_SUCCESS(ec); ++idx) { |
const UHashElement* cur = uhash_nextElement(that.customFormatArgStarts, &pos); |
uhash_iputi(customFormatArgStarts, cur->key.integer, cur->value.integer, &ec); |
} |
@@ -1955,8 +1956,12 @@ UnicodeString MessageFormat::PluralSelectorProvider::select(void *ctx, double nu |
context.formatter->format(context.number, context.numberString, ec); |
const DecimalFormat *decFmt = dynamic_cast<const DecimalFormat *>(context.formatter); |
if(decFmt != NULL) { |
- FixedDecimal dec = decFmt->getFixedDecimal(context.number, ec); |
- return rules->select(dec); |
+ VisibleDigitsWithExponent digits; |
+ decFmt->initVisibleDigitsWithExponent(context.number, digits, ec); |
+ if (U_FAILURE(ec)) { |
+ return UnicodeString(FALSE, OTHER_STRING, 5); |
+ } |
+ return rules->select(digits); |
} else { |
return rules->select(number); |
} |