]> granicus.if.org Git - icu/commitdiff
add another constructor to ComplexUnitConverter
authorYounies Mahmoud <younies.mahmoud@gmail.com>
Tue, 17 Mar 2020 20:47:53 +0000 (21:47 +0100)
committerYounies Mahmoud <younies.mahmoud@gmail.com>
Tue, 17 Mar 2020 20:49:07 +0000 (21:49 +0100)
icu4c/source/i18n/complexunitsconverter.cpp
icu4c/source/i18n/complexunitsconverter.h

index 2d2a7fa7a10843815c68e96b3d3828ed7e0c6f94..5c4f4a564f590fee1829533799c288dd6068aa55 100644 (file)
@@ -4,6 +4,7 @@
 #include "unicode/utypes.h"
 
 #if !UCONFIG_NO_FORMATTING
+#include <utility>
 
 #include "cmemory.h"
 #include "complexunitsconverter.h"
 
 U_NAMESPACE_BEGIN
 
+ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnit inputUnit, const MeasureUnit outputUnits,
+                                             UErrorCode &status) {
+    auto singleUnits = outputUnits.splitToSingleUnits(status);
+    MaybeStackVector<MeasureUnit> 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<MeasureUnit> 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<Measure> ComplexUnitsConverter::convert(double quantity, UErrorCode &status) const{
+MaybeStackVector<Measure> ComplexUnitsConverter::convert(double quantity, UErrorCode &status) const {
     MaybeStackVector<Measure> result;
 
     for (int i = 0, n = unitConverters_.length(); i < n; ++i) {
index d13de5bf3b1d75ea17d3f95e08ef199f87d5853e..bd9e0e6f7ca3fe71dac7b09654aca519dd5f46ee 100644 (file)
@@ -33,6 +33,9 @@ class U_I18N_API ComplexUnitsConverter {
     ComplexUnitsConverter(const MeasureUnit inputUnit, const MaybeStackVector<MeasureUnit> 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;