diff options
author | romankoshelev <romankoshelev@yandex-team.com> | 2023-08-14 19:51:50 +0300 |
---|---|---|
committer | romankoshelev <romankoshelev@yandex-team.com> | 2023-08-15 01:24:11 +0300 |
commit | cfcd865e05c0d0525ea27d1e153a043b32a85138 (patch) | |
tree | 68d3b3b25271e8a4998505897a269ff7ce119b76 /contrib/libs/icu/i18n/units_router.cpp | |
parent | ccb790c507bd5e8ffe2ef9886ce5ee0a7ce22a15 (diff) | |
download | ydb-cfcd865e05c0d0525ea27d1e153a043b32a85138.tar.gz |
Update ICU to 73.2
Diffstat (limited to 'contrib/libs/icu/i18n/units_router.cpp')
-rw-r--r-- | contrib/libs/icu/i18n/units_router.cpp | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/contrib/libs/icu/i18n/units_router.cpp b/contrib/libs/icu/i18n/units_router.cpp index 0e6082fae5..03c9b4d1d7 100644 --- a/contrib/libs/icu/i18n/units_router.cpp +++ b/contrib/libs/icu/i18n/units_router.cpp @@ -43,17 +43,17 @@ Precision UnitsRouter::parseSkeletonToPrecision(icu::UnicodeString precisionSkel return result; } -UnitsRouter::UnitsRouter(StringPiece inputUnitIdentifier, StringPiece region, StringPiece usage, +UnitsRouter::UnitsRouter(StringPiece inputUnitIdentifier, const Locale &locale, StringPiece usage, UErrorCode &status) { - this->init(MeasureUnit::forIdentifier(inputUnitIdentifier, status), region, usage, status); + this->init(MeasureUnit::forIdentifier(inputUnitIdentifier, status), locale, usage, status); } -UnitsRouter::UnitsRouter(const MeasureUnit &inputUnit, StringPiece region, StringPiece usage, +UnitsRouter::UnitsRouter(const MeasureUnit &inputUnit, const Locale &locale, StringPiece usage, UErrorCode &status) { - this->init(std::move(inputUnit), region, usage, status); + this->init(std::move(inputUnit), locale, usage, status); } -void UnitsRouter::init(const MeasureUnit &inputUnit, StringPiece region, StringPiece usage, +void UnitsRouter::init(const MeasureUnit &inputUnit, const Locale &locale, StringPiece usage, UErrorCode &status) { if (U_FAILURE(status)) { @@ -73,22 +73,19 @@ void UnitsRouter::init(const MeasureUnit &inputUnit, StringPiece region, StringP return; } - const UnitPreference *const *unitPreferences; - int32_t preferencesCount = 0; - prefs.getPreferencesFor(category.toStringPiece(), usage, region, unitPreferences, preferencesCount, - status); - - for (int i = 0; i < preferencesCount; ++i) { - U_ASSERT(unitPreferences[i] != nullptr); - const auto &preference = *unitPreferences[i]; + const MaybeStackVector<UnitPreference> unitPrefs = + prefs.getPreferencesFor(category.toStringPiece(), usage, locale, status); + for (int32_t i = 0, n = unitPrefs.length(); i < n; ++i) { + U_ASSERT(unitPrefs[i] != nullptr); + const auto preference = unitPrefs[i]; MeasureUnitImpl complexTargetUnitImpl = - MeasureUnitImpl::forIdentifier(preference.unit.data(), status); + MeasureUnitImpl::forIdentifier(preference->unit.data(), status); if (U_FAILURE(status)) { return; } - UnicodeString precision = preference.skeleton; + UnicodeString precision = preference->skeleton; // For now, we only have "precision-increment" in Units Preferences skeleton. // Therefore, we check if the skeleton starts with "precision-increment" and force the program to @@ -103,7 +100,7 @@ void UnitsRouter::init(const MeasureUnit &inputUnit, StringPiece region, StringP outputUnits_.emplaceBackAndCheckErrorCode(status, complexTargetUnitImpl.copy(status).build(status)); converterPreferences_.emplaceBackAndCheckErrorCode(status, inputUnitImpl, complexTargetUnitImpl, - preference.geq, std::move(precision), + preference->geq, std::move(precision), conversionRates, status); if (U_FAILURE(status)) { |