// © 2020 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING #ifndef __UNITS_CONVERTER_H__ #define __UNITS_CONVERTER_H__ #include "cmemory.h" #include "measunit_impl.h" #include "unicode/errorcode.h" #include "unicode/stringpiece.h" #include "unicode/uobject.h" #include "units_converter.h" #include "units_data.h" U_NAMESPACE_BEGIN namespace units { /* Internal Structure */ // Constants corresponding to unitConstants in CLDR's units.xml. enum Constants { … }; // These values are a hard-coded subset of unitConstants in the units // resources file. A unit test checks that all constants in the resource // file are at least recognised by the code. Derived constants' values or // hard-coded derivations are not checked. // In ICU4J, these constants live in UnitConverter.Factor.getConversionRate(). static const double constantsValues[CONSTANTS_COUNT] = …; Signum; /* Represents a conversion factor */ struct U_I18N_API Factor { … }; struct U_I18N_API ConversionInfo { … }; /* * Adds a single factor element to the `Factor`. e.g "ft3m", "2.333" or "cup2m3". But not "cup2m3^3". */ void U_I18N_API addSingleFactorConstant(StringPiece baseStr, int32_t power, Signum sigNum, Factor &factor, UErrorCode &status); /** * Represents the conversion rate between `source` and `target`. */ struct U_I18N_API ConversionRate : public UMemory { … }; enum Convertibility { … }; MeasureUnitImpl U_I18N_API extractCompoundBaseUnit(const MeasureUnitImpl &source, const ConversionRates &conversionRates, UErrorCode &status); /** * Check if the convertibility between `source` and `target`. * For example: * `meter` and `foot` are `CONVERTIBLE`. * `meter-per-second` and `second-per-meter` are `RECIPROCAL`. * `meter` and `pound` are `UNCONVERTIBLE`. * * NOTE: * Only works with SINGLE and COMPOUND units. If one of the units is a * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity. */ Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source, const MeasureUnitImpl &target, const ConversionRates &conversionRates, UErrorCode &status); /** * Converts from a source `MeasureUnit` to a target `MeasureUnit`. * * NOTE: * Only works with SINGLE and COMPOUND units. If one of the units is a * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity. */ class U_I18N_API UnitsConverter : public UMemory { … }; } // namespace units U_NAMESPACE_END #endif //__UNITS_CONVERTER_H__ #endif /* #if !UCONFIG_NO_FORMATTING */