#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) {
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.
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) {
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;