From: Younies Mahmoud Date: Tue, 17 Mar 2020 20:47:53 +0000 (+0100) Subject: add another constructor to ComplexUnitConverter X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2128cfa5e4ace448db55e9e79c5407f1ca8aa48e;p=icu add another constructor to ComplexUnitConverter --- diff --git a/icu4c/source/i18n/complexunitsconverter.cpp b/icu4c/source/i18n/complexunitsconverter.cpp index 2d2a7fa7a10..5c4f4a564f5 100644 --- a/icu4c/source/i18n/complexunitsconverter.cpp +++ b/icu4c/source/i18n/complexunitsconverter.cpp @@ -4,6 +4,7 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING +#include #include "cmemory.h" #include "complexunitsconverter.h" @@ -13,6 +14,18 @@ U_NAMESPACE_BEGIN +ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnit inputUnit, const MeasureUnit outputUnits, + UErrorCode &status) { + auto singleUnits = outputUnits.splitToSingleUnits(status); + MaybeStackVector singleUnitsInOrder; + for (int i = 0, n = singleUnits.length(); i < n; ++i) { + // TODO(younies): ensure units being in order in phase 2. Now, the units in order by default. + singleUnitsInOrder.emplaceBack(singleUnits[i]); + } + + ComplexUnitsConverter(inputUnit, std::move(singleUnitsInOrder), status); +} + ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnit inputUnit, const MaybeStackVector outputUnits, UErrorCode &status) { @@ -39,7 +52,7 @@ ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnit inputUnit, units_.appendAll(outputUnits, status); } -UBool ComplexUnitsConverter::greaterThanOrEqual(double quantity, double limit) const{ +UBool ComplexUnitsConverter::greaterThanOrEqual(double quantity, double limit) const { U_ASSERT(unitConverters_.length() ?> 0); // first quantity is the biggest one. @@ -48,7 +61,7 @@ UBool ComplexUnitsConverter::greaterThanOrEqual(double quantity, double limit) c return newQuantity >= limit; } -MaybeStackVector ComplexUnitsConverter::convert(double quantity, UErrorCode &status) const{ +MaybeStackVector ComplexUnitsConverter::convert(double quantity, UErrorCode &status) const { MaybeStackVector result; for (int i = 0, n = unitConverters_.length(); i < n; ++i) { diff --git a/icu4c/source/i18n/complexunitsconverter.h b/icu4c/source/i18n/complexunitsconverter.h index d13de5bf3b1..bd9e0e6f7ca 100644 --- a/icu4c/source/i18n/complexunitsconverter.h +++ b/icu4c/source/i18n/complexunitsconverter.h @@ -33,6 +33,9 @@ class U_I18N_API ComplexUnitsConverter { ComplexUnitsConverter(const MeasureUnit inputUnit, const MaybeStackVector outputUnits, UErrorCode &status); + ComplexUnitsConverter(const MeasureUnit inputUnit, const MeasureUnit outputUnits, + UErrorCode &status); + // Returns true if the `quantity` in the `inputUnit` is greater than or equal than the `limit` in the // biggest `outputUnits` UBool greaterThanOrEqual(double quantity, double limit) const;