]> granicus.if.org Git - icu/commitdiff
Use SingleUnitImpl::getSimpleUnitID() instead of now-missing ::identifier.
authorHugo van der Merwe <17109322+hugovdm@users.noreply.github.com>
Thu, 18 Jun 2020 08:40:43 +0000 (10:40 +0200)
committerHugo van der Merwe <17109322+hugovdm@users.noreply.github.com>
Thu, 18 Jun 2020 08:40:43 +0000 (10:40 +0200)
icu4c/source/i18n/measunit_extra.cpp
icu4c/source/i18n/unitconverter.cpp

index df3c6440c6910c2a51f83ebc8abe5ab0013c770c..cb246696634eda3683fb4471e32ab9dde863ab91 100644 (file)
@@ -765,7 +765,9 @@ bool appendImpl(MeasureUnitImpl& impl, const SingleUnitImpl& unit, UErrorCode& s
 void appendAndMergeImpl(MeasureUnitImpl &impl, const SingleUnitImpl &unit, UErrorCode &status) {
     for (int32_t i = 0, n = impl.units.length(); i < n; i++) {
         auto *candidate = impl.units[i];
-        if (candidate->identifier == unit.identifier && candidate->siPrefix == unit.siPrefix) {
+        if ((candidate->getSimpleUnitID() == unit.getSimpleUnitID() ||
+             uprv_strcmp(candidate->getSimpleUnitID(), unit.getSimpleUnitID()) == 0) &&
+            candidate->siPrefix == unit.siPrefix) {
             candidate->dimensionality += unit.dimensionality;
             return;
         }
index dd4cc20210609e0479e9fee5944fe3c04fdf82cb..70adbd7e88f949e4d7cbdbe369174ed88e4908c7 100644 (file)
@@ -306,7 +306,7 @@ Factor loadCompoundFactor(const MeasureUnit &source, const ConversionRates &rate
     for (int32_t i = 0, n = compoundSourceUnit.units.length(); i < n; i++) {
         auto singleUnit = *compoundSourceUnit.units[i]; // a SingleUnitImpl
 
-        Factor singleFactor = loadSingleFactor(singleUnit.identifier, ratesInfo, status);
+        Factor singleFactor = loadSingleFactor(singleUnit.getSimpleUnitID(), ratesInfo, status);
         if (U_FAILURE(status)) return result;
 
         // Apply SiPrefix before the power, because the power may be will flip the factor.
@@ -403,7 +403,8 @@ MeasureUnit U_I18N_API extractCompoundBaseUnit(const MeasureUnit &source,
         // Extract `ConversionRateInfo` using the absolute unit. For example: in case of `square-meter`,
         // we will use `meter`
         const auto singleUnitImpl = SingleUnitImpl::forMeasureUnit(singleUnit, status);
-        const auto rateInfo = conversionRates.extractConversionInfo(singleUnitImpl.identifier, status);
+        const auto rateInfo =
+            conversionRates.extractConversionInfo(singleUnitImpl.getSimpleUnitID(), status);
         if (U_FAILURE(status)) {
             return result;
         }