diff options
author | Steven R. Loomis <srloomis@us.ibm.com> | 2018-07-09 13:46:16 -0700 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-07-11 00:15:23 +0200 |
commit | 538acead6670d711ddb71c0b852089b792c996e3 (patch) | |
tree | 917c6df14436e66d4883feb7bb9269480fce06ab /deps/icu-small/source/i18n/number_stringbuilder.cpp | |
parent | ed715ef8900afa5056ebd5ef995e89eebd4987c2 (diff) | |
download | android-node-v8-538acead6670d711ddb71c0b852089b792c996e3.tar.gz android-node-v8-538acead6670d711ddb71c0b852089b792c996e3.tar.bz2 android-node-v8-538acead6670d711ddb71c0b852089b792c996e3.zip |
deps: icu 62.1 bump (Unicode 11, CLDR 33.1)
- Full release notes: http://site.icu-project.org/download/62
Fixes: https://github.com/nodejs/node/issues/21452
PR-URL: https://github.com/nodejs/node/pull/21728
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Bradley Farias <bradley.meck@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Diffstat (limited to 'deps/icu-small/source/i18n/number_stringbuilder.cpp')
-rw-r--r-- | deps/icu-small/source/i18n/number_stringbuilder.cpp | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/deps/icu-small/source/i18n/number_stringbuilder.cpp b/deps/icu-small/source/i18n/number_stringbuilder.cpp index 37159d7e53..37770d11d5 100644 --- a/deps/icu-small/source/i18n/number_stringbuilder.cpp +++ b/deps/icu-small/source/i18n/number_stringbuilder.cpp @@ -3,11 +3,10 @@ #include "unicode/utypes.h" -#if !UCONFIG_NO_FORMATTING && !UPRV_INCOMPLETE_CPP11_SUPPORT +#if !UCONFIG_NO_FORMATTING #include "number_stringbuilder.h" #include "unicode/utf16.h" -#include "uvectr32.h" using namespace icu; using namespace icu::number; @@ -337,6 +336,11 @@ UnicodeString NumberStringBuilder::toUnicodeString() const { return UnicodeString(getCharPtr() + fZero, fLength); } +const UnicodeString NumberStringBuilder::toTempUnicodeString() const { + // Readonly-alias constructor: + return UnicodeString(FALSE, getCharPtr() + fZero, fLength); +} + UnicodeString NumberStringBuilder::toDebugString() const { UnicodeString sb; sb.append(u"<NumberStringBuilder [", -1); @@ -408,23 +412,24 @@ bool NumberStringBuilder::contentEquals(const NumberStringBuilder &other) const return true; } -void NumberStringBuilder::populateFieldPosition(FieldPosition &fp, int32_t offset, UErrorCode &status) const { +bool NumberStringBuilder::nextFieldPosition(FieldPosition& fp, UErrorCode& status) const { int32_t rawField = fp.getField(); if (rawField == FieldPosition::DONT_CARE) { - return; + return FALSE; } if (rawField < 0 || rawField >= UNUM_FIELD_COUNT) { status = U_ILLEGAL_ARGUMENT_ERROR; - return; + return FALSE; } auto field = static_cast<Field>(rawField); bool seenStart = false; int32_t fractionStart = -1; - for (int i = fZero; i <= fZero + fLength; i++) { + int32_t startIndex = fp.getEndIndex(); + for (int i = fZero + startIndex; i <= fZero + fLength; i++) { Field _field = UNUM_FIELD_COUNT; if (i < fZero + fLength) { _field = getFieldPtr()[i]; @@ -434,10 +439,10 @@ void NumberStringBuilder::populateFieldPosition(FieldPosition &fp, int32_t offse if (field == UNUM_INTEGER_FIELD && _field == UNUM_GROUPING_SEPARATOR_FIELD) { continue; } - fp.setEndIndex(i - fZero + offset); + fp.setEndIndex(i - fZero); break; } else if (!seenStart && field == _field) { - fp.setBeginIndex(i - fZero + offset); + fp.setBeginIndex(i - fZero); seenStart = true; } if (_field == UNUM_INTEGER_FIELD || _field == UNUM_DECIMAL_SEPARATOR_FIELD) { @@ -445,36 +450,28 @@ void NumberStringBuilder::populateFieldPosition(FieldPosition &fp, int32_t offse } } - // Backwards compatibility: FRACTION needs to start after INTEGER if empty - if (field == UNUM_FRACTION_FIELD && !seenStart) { - fp.setBeginIndex(fractionStart + offset); - fp.setEndIndex(fractionStart + offset); + // Backwards compatibility: FRACTION needs to start after INTEGER if empty. + // Do not return that a field was found, though, since there is not actually a fraction part. + if (field == UNUM_FRACTION_FIELD && !seenStart && fractionStart != -1) { + fp.setBeginIndex(fractionStart); + fp.setEndIndex(fractionStart); } -} -void NumberStringBuilder::populateFieldPositionIterator(FieldPositionIterator &fpi, UErrorCode &status) const { - // TODO: Set an initial capacity on uvec? - LocalPointer <UVector32> uvec(new UVector32(status)); - if (U_FAILURE(status)) { - return; - } + return seenStart; +} +void NumberStringBuilder::getAllFieldPositions(FieldPositionIteratorHandler& fpih, + UErrorCode& status) const { Field current = UNUM_FIELD_COUNT; int32_t currentStart = -1; for (int32_t i = 0; i < fLength; i++) { Field field = fieldAt(i); if (current == UNUM_INTEGER_FIELD && field == UNUM_GROUPING_SEPARATOR_FIELD) { // Special case: GROUPING_SEPARATOR counts as an INTEGER. - // Add the field, followed by the start index, followed by the end index to uvec. - uvec->addElement(UNUM_GROUPING_SEPARATOR_FIELD, status); - uvec->addElement(i, status); - uvec->addElement(i + 1, status); + fpih.addAttribute(UNUM_GROUPING_SEPARATOR_FIELD, i, i + 1); } else if (current != field) { if (current != UNUM_FIELD_COUNT) { - // Add the field, followed by the start index, followed by the end index to uvec. - uvec->addElement(current, status); - uvec->addElement(currentStart, status); - uvec->addElement(i, status); + fpih.addAttribute(current, currentStart, i); } current = field; currentStart = i; @@ -484,14 +481,8 @@ void NumberStringBuilder::populateFieldPositionIterator(FieldPositionIterator &f } } if (current != UNUM_FIELD_COUNT) { - // Add the field, followed by the start index, followed by the end index to uvec. - uvec->addElement(current, status); - uvec->addElement(currentStart, status); - uvec->addElement(fLength, status); + fpih.addAttribute(current, currentStart, fLength); } - - // Give uvec to the FieldPositionIterator, which adopts it. - fpi.setData(uvec.orphan(), status); } #endif /* #if !UCONFIG_NO_FORMATTING */ |