tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

measunit.h (136316B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 **********************************************************************
      5 * Copyright (c) 2004-2016, International Business Machines
      6 * Corporation and others.  All Rights Reserved.
      7 **********************************************************************
      8 * Author: Alan Liu
      9 * Created: April 26, 2004
     10 * Since: ICU 3.0
     11 **********************************************************************
     12 */
     13 #ifndef __MEASUREUNIT_H__
     14 #define __MEASUREUNIT_H__
     15 
     16 #include "unicode/utypes.h"
     17 
     18 #if U_SHOW_CPLUSPLUS_API
     19 
     20 #if !UCONFIG_NO_FORMATTING
     21 
     22 #include <utility>
     23 #include "unicode/unistr.h"
     24 #include "unicode/localpointer.h"
     25 
     26 /**
     27 * \file
     28 * \brief C++ API: A unit for measuring a quantity.
     29 */
     30 
     31 U_NAMESPACE_BEGIN
     32 
     33 class StringEnumeration;
     34 class MeasureUnitImpl;
     35 
     36 namespace number::impl {
     37 class LongNameHandler;
     38 } // namespace number::impl
     39 
     40 /**
     41 * Enumeration for unit complexity. There are three levels:
     42 *
     43 * - SINGLE: A single unit, optionally with a power and/or SI or binary prefix.
     44 *           Examples: hectare, square-kilometer, kilojoule, per-second, mebibyte.
     45 * - COMPOUND: A unit composed of the product of multiple single units. Examples:
     46 *             meter-per-second, kilowatt-hour, kilogram-meter-per-square-second.
     47 * - MIXED: A unit composed of the sum of multiple single units. Examples: foot+inch,
     48 *          hour+minute+second, degree+arcminute+arcsecond.
     49 *
     50 * The complexity determines which operations are available. For example, you cannot set the power
     51 * or prefix of a compound unit.
     52 *
     53 * @stable ICU 67
     54 */
     55 enum UMeasureUnitComplexity {
     56    /**
     57     * A single unit, like kilojoule.
     58     *
     59     * @stable ICU 67
     60     */
     61    UMEASURE_UNIT_SINGLE,
     62 
     63    /**
     64     * A compound unit, like meter-per-second.
     65     *
     66     * @stable ICU 67
     67     */
     68    UMEASURE_UNIT_COMPOUND,
     69 
     70    /**
     71     * A mixed unit, like hour+minute.
     72     *
     73     * @stable ICU 67
     74     */
     75    UMEASURE_UNIT_MIXED
     76 };
     77 
     78 
     79 /**
     80 * Enumeration for SI and binary prefixes, e.g. "kilo-", "nano-", "mebi-".
     81 *
     82 * Enum values should be treated as opaque: use umeas_getPrefixPower() and
     83 * umeas_getPrefixBase() to find their corresponding values.
     84 *
     85 * @stable ICU 69
     86 * @see umeas_getPrefixBase
     87 * @see umeas_getPrefixPower
     88 */
     89 typedef enum UMeasurePrefix {
     90    /**
     91     * The absence of an SI or binary prefix.
     92     *
     93     * The integer representation of this enum value is an arbitrary
     94     * implementation detail and should not be relied upon: use
     95     * umeas_getPrefixPower() to obtain meaningful values.
     96     *
     97     * @stable ICU 69
     98     */
     99    UMEASURE_PREFIX_ONE = 30 + 0,
    100 
    101    /**
    102     * SI prefix: yotta, 10^24.
    103     *
    104     * @stable ICU 69
    105     */
    106    UMEASURE_PREFIX_YOTTA = UMEASURE_PREFIX_ONE + 24,
    107 
    108    /**
    109     * SI prefix: ronna, 10^27.
    110     *
    111     * @stable ICU 75
    112     */
    113    UMEASURE_PREFIX_RONNA = UMEASURE_PREFIX_ONE + 27,
    114 
    115    /**
    116     * SI prefix: quetta, 10^30.
    117     *
    118     * @stable ICU 75
    119     */
    120    UMEASURE_PREFIX_QUETTA = UMEASURE_PREFIX_ONE + 30,
    121 
    122 #ifndef U_HIDE_INTERNAL_API
    123    /**
    124     * ICU use only.
    125     * Used to determine the set of base-10 SI prefixes.
    126     * @internal
    127     */
    128 #ifndef U_HIDE_DRAFT_API
    129    UMEASURE_PREFIX_INTERNAL_MAX_SI = UMEASURE_PREFIX_QUETTA,
    130 #else  /* U_HIDE_DRAFT_API */
    131    UMEASURE_PREFIX_INTERNAL_MAX_SI = UMEASURE_PREFIX_YOTTA,
    132 #endif  /* U_HIDE_DRAFT_API */
    133 
    134 #endif  /* U_HIDE_INTERNAL_API */
    135 
    136    /**
    137     * SI prefix: zetta, 10^21.
    138     *
    139     * @stable ICU 69
    140     */
    141    UMEASURE_PREFIX_ZETTA = UMEASURE_PREFIX_ONE + 21,
    142 
    143    /**
    144     * SI prefix: exa, 10^18.
    145     *
    146     * @stable ICU 69
    147     */
    148    UMEASURE_PREFIX_EXA = UMEASURE_PREFIX_ONE + 18,
    149 
    150    /**
    151     * SI prefix: peta, 10^15.
    152     *
    153     * @stable ICU 69
    154     */
    155    UMEASURE_PREFIX_PETA = UMEASURE_PREFIX_ONE + 15,
    156 
    157    /**
    158     * SI prefix: tera, 10^12.
    159     *
    160     * @stable ICU 69
    161     */
    162    UMEASURE_PREFIX_TERA = UMEASURE_PREFIX_ONE + 12,
    163 
    164    /**
    165     * SI prefix: giga, 10^9.
    166     *
    167     * @stable ICU 69
    168     */
    169    UMEASURE_PREFIX_GIGA = UMEASURE_PREFIX_ONE + 9,
    170 
    171    /**
    172     * SI prefix: mega, 10^6.
    173     *
    174     * @stable ICU 69
    175     */
    176    UMEASURE_PREFIX_MEGA = UMEASURE_PREFIX_ONE + 6,
    177 
    178    /**
    179     * SI prefix: kilo, 10^3.
    180     *
    181     * @stable ICU 69
    182     */
    183    UMEASURE_PREFIX_KILO = UMEASURE_PREFIX_ONE + 3,
    184 
    185    /**
    186     * SI prefix: hecto, 10^2.
    187     *
    188     * @stable ICU 69
    189     */
    190    UMEASURE_PREFIX_HECTO = UMEASURE_PREFIX_ONE + 2,
    191 
    192    /**
    193     * SI prefix: deka, 10^1.
    194     *
    195     * @stable ICU 69
    196     */
    197    UMEASURE_PREFIX_DEKA = UMEASURE_PREFIX_ONE + 1,
    198 
    199    /**
    200     * SI prefix: deci, 10^-1.
    201     *
    202     * @stable ICU 69
    203     */
    204    UMEASURE_PREFIX_DECI = UMEASURE_PREFIX_ONE + -1,
    205 
    206    /**
    207     * SI prefix: centi, 10^-2.
    208     *
    209     * @stable ICU 69
    210     */
    211    UMEASURE_PREFIX_CENTI = UMEASURE_PREFIX_ONE + -2,
    212 
    213    /**
    214     * SI prefix: milli, 10^-3.
    215     *
    216     * @stable ICU 69
    217     */
    218    UMEASURE_PREFIX_MILLI = UMEASURE_PREFIX_ONE + -3,
    219 
    220    /**
    221     * SI prefix: micro, 10^-6.
    222     *
    223     * @stable ICU 69
    224     */
    225    UMEASURE_PREFIX_MICRO = UMEASURE_PREFIX_ONE + -6,
    226 
    227    /**
    228     * SI prefix: nano, 10^-9.
    229     *
    230     * @stable ICU 69
    231     */
    232    UMEASURE_PREFIX_NANO = UMEASURE_PREFIX_ONE + -9,
    233 
    234    /**
    235     * SI prefix: pico, 10^-12.
    236     *
    237     * @stable ICU 69
    238     */
    239    UMEASURE_PREFIX_PICO = UMEASURE_PREFIX_ONE + -12,
    240 
    241    /**
    242     * SI prefix: femto, 10^-15.
    243     *
    244     * @stable ICU 69
    245     */
    246    UMEASURE_PREFIX_FEMTO = UMEASURE_PREFIX_ONE + -15,
    247 
    248    /**
    249     * SI prefix: atto, 10^-18.
    250     *
    251     * @stable ICU 69
    252     */
    253    UMEASURE_PREFIX_ATTO = UMEASURE_PREFIX_ONE + -18,
    254 
    255    /**
    256     * SI prefix: zepto, 10^-21.
    257     *
    258     * @stable ICU 69
    259     */
    260    UMEASURE_PREFIX_ZEPTO = UMEASURE_PREFIX_ONE + -21,
    261 
    262    /**
    263     * SI prefix: yocto, 10^-24.
    264     *
    265     * @stable ICU 69
    266     */
    267    UMEASURE_PREFIX_YOCTO = UMEASURE_PREFIX_ONE + -24,
    268 
    269    /**
    270     * SI prefix: ronto, 10^-27.
    271     *
    272     * @stable ICU 75
    273     */
    274    UMEASURE_PREFIX_RONTO = UMEASURE_PREFIX_ONE + -27,
    275 
    276    /**
    277     * SI prefix: quecto, 10^-30.
    278     *
    279     * @stable ICU 75
    280     */
    281    UMEASURE_PREFIX_QUECTO = UMEASURE_PREFIX_ONE + -30,
    282 
    283 #ifndef U_HIDE_INTERNAL_API
    284    /**
    285     * ICU use only.
    286     * Used to determine the set of base-10 SI prefixes.
    287     * @internal
    288     */
    289 #ifndef U_HIDE_DRAFT_API
    290    UMEASURE_PREFIX_INTERNAL_MIN_SI = UMEASURE_PREFIX_QUECTO,
    291 #else  /* U_HIDE_DRAFT_API */
    292    UMEASURE_PREFIX_INTERNAL_MIN_SI = UMEASURE_PREFIX_YOCTO,
    293 #endif  /* U_HIDE_DRAFT_API */
    294 
    295 #endif  // U_HIDE_INTERNAL_API
    296 
    297    // Cannot conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
    298    // used in definitions of non-internal enum values
    299    /**
    300     * ICU use only.
    301     * Sets the arbitrary offset of the base-1024 binary prefixes' enum values.
    302     * @internal
    303     */
    304    UMEASURE_PREFIX_INTERNAL_ONE_BIN = -60,
    305 
    306    /**
    307     * Binary prefix: kibi, 1024^1.
    308     *
    309     * @stable ICU 69
    310     */
    311    UMEASURE_PREFIX_KIBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 1,
    312 
    313 #ifndef U_HIDE_INTERNAL_API
    314    /**
    315     * ICU use only.
    316     * Used to determine the set of base-1024 binary prefixes.
    317     * @internal
    318     */
    319    UMEASURE_PREFIX_INTERNAL_MIN_BIN = UMEASURE_PREFIX_KIBI,
    320 #endif  // U_HIDE_INTERNAL_API
    321 
    322    /**
    323     * Binary prefix: mebi, 1024^2.
    324     *
    325     * @stable ICU 69
    326     */
    327    UMEASURE_PREFIX_MEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 2,
    328 
    329    /**
    330     * Binary prefix: gibi, 1024^3.
    331     *
    332     * @stable ICU 69
    333     */
    334    UMEASURE_PREFIX_GIBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 3,
    335 
    336    /**
    337     * Binary prefix: tebi, 1024^4.
    338     *
    339     * @stable ICU 69
    340     */
    341    UMEASURE_PREFIX_TEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 4,
    342 
    343    /**
    344     * Binary prefix: pebi, 1024^5.
    345     *
    346     * @stable ICU 69
    347     */
    348    UMEASURE_PREFIX_PEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 5,
    349 
    350    /**
    351     * Binary prefix: exbi, 1024^6.
    352     *
    353     * @stable ICU 69
    354     */
    355    UMEASURE_PREFIX_EXBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 6,
    356 
    357    /**
    358     * Binary prefix: zebi, 1024^7.
    359     *
    360     * @stable ICU 69
    361     */
    362    UMEASURE_PREFIX_ZEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 7,
    363 
    364    /**
    365     * Binary prefix: yobi, 1024^8.
    366     *
    367     * @stable ICU 69
    368     */
    369    UMEASURE_PREFIX_YOBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 8,
    370 
    371 #ifndef U_HIDE_INTERNAL_API
    372    /**
    373     * ICU use only.
    374     * Used to determine the set of base-1024 binary prefixes.
    375     * @internal
    376     */
    377    UMEASURE_PREFIX_INTERNAL_MAX_BIN = UMEASURE_PREFIX_YOBI,
    378 #endif  // U_HIDE_INTERNAL_API
    379 } UMeasurePrefix;
    380 
    381 /**
    382 * Returns the base of the factor associated with the given unit prefix: the
    383 * base is 10 for SI prefixes (kilo, micro) and 1024 for binary prefixes (kibi,
    384 * mebi).
    385 *
    386 * @stable ICU 69
    387 */
    388 U_CAPI int32_t U_EXPORT2 umeas_getPrefixBase(UMeasurePrefix unitPrefix);
    389 
    390 /**
    391 * Returns the exponent of the factor associated with the given unit prefix, for
    392 * example 3 for kilo, -6 for micro, 1 for kibi, 2 for mebi, 3 for gibi.
    393 *
    394 * @stable ICU 69
    395 */
    396 U_CAPI int32_t U_EXPORT2 umeas_getPrefixPower(UMeasurePrefix unitPrefix);
    397 
    398 /**
    399 * A unit such as length, mass, volume, currency, etc.  A unit is
    400 * coupled with a numeric amount to produce a Measure.
    401 *
    402 * @author Alan Liu
    403 * @stable ICU 3.0
    404 */
    405 class U_I18N_API MeasureUnit: public UObject {
    406 public:
    407 
    408    /**
    409     * Default constructor.
    410     * Populates the instance with the base dimensionless unit, which means that there will be
    411     * no unit on the formatted number.
    412     * @stable ICU 3.0
    413     */
    414    MeasureUnit();
    415 
    416    /**
    417     * Copy constructor.
    418     * @stable ICU 3.0
    419     */
    420    MeasureUnit(const MeasureUnit &other);
    421 
    422    /**
    423     * Move constructor.
    424     * @stable ICU 67
    425     */
    426    MeasureUnit(MeasureUnit &&other) noexcept;
    427 
    428    /**
    429     * Constructs a MeasureUnit from a CLDR Core Unit Identifier, as defined in UTS 35.
    430     * This method supports core unit identifiers and mixed unit identifiers.
    431     * It validates and canonicalizes the given identifier.
    432     *
    433     *
    434     * Example usage:
    435     * <pre>
    436     * MeasureUnit example = MeasureUnit::forIdentifier("meter-per-second", status);
    437     * </pre>
    438     *
    439     * @param identifier the CLDR Unit Identifier
    440     * @param status Set error if the identifier is invalid.
    441     * @return the corresponding MeasureUnit
    442     * @stable ICU 67
    443     */
    444    static MeasureUnit forIdentifier(StringPiece identifier, UErrorCode& status);
    445 
    446    /**
    447     * Copy assignment operator.
    448     * @stable ICU 3.0
    449     */
    450    MeasureUnit &operator=(const MeasureUnit &other);
    451 
    452    /**
    453     * Move assignment operator.
    454     * @stable ICU 67
    455     */
    456    MeasureUnit &operator=(MeasureUnit &&other) noexcept;
    457 
    458    /**
    459     * Returns a polymorphic clone of this object.  The result will
    460     * have the same class as returned by getDynamicClassID().
    461     * @stable ICU 3.0
    462     */
    463    virtual MeasureUnit* clone() const;
    464 
    465    /**
    466     * Destructor
    467     * @stable ICU 3.0
    468     */
    469    virtual ~MeasureUnit();
    470 
    471    /**
    472     * Equality operator.  Return true if this object is equal
    473     * to the given object.
    474     * @stable ICU 3.0
    475     */
    476    virtual bool operator==(const UObject& other) const;
    477 
    478    /**
    479     * Inequality operator.  Return true if this object is not equal
    480     * to the given object.
    481     * @stable ICU 53
    482     */
    483    bool operator!=(const UObject& other) const {
    484        return !(*this == other);
    485    }
    486 
    487    /**
    488     * Get the type.
    489     *
    490     * If the unit does not have a type, the empty string is returned.
    491     *
    492     * @stable ICU 53
    493     */
    494    const char *getType() const;
    495 
    496    /**
    497     * Get the sub type.
    498     *
    499     * If the unit does not have a subtype, the empty string is returned.
    500     *
    501     * @stable ICU 53
    502     */
    503    const char *getSubtype() const;
    504 
    505    /**
    506     * Get CLDR Unit Identifier for this MeasureUnit, as defined in UTS 35.
    507     *
    508     * @return The string form of this unit, owned by this MeasureUnit.
    509     * @stable ICU 67
    510     */
    511    const char* getIdentifier() const;
    512 
    513    /**
    514     * Compute the complexity of the unit. See UMeasureUnitComplexity for more information.
    515     *
    516     * @param status Set if an error occurs.
    517     * @return The unit complexity.
    518     * @stable ICU 67
    519     */
    520    UMeasureUnitComplexity getComplexity(UErrorCode& status) const;
    521 
    522    /**
    523     * Creates a MeasureUnit which is this SINGLE unit augmented with the specified prefix.
    524     * For example, UMEASURE_PREFIX_KILO for "kilo", or UMEASURE_PREFIX_KIBI for "kibi".
    525     *
    526     * There is sufficient locale data to format all standard prefixes.
    527     *
    528     * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
    529     * occur. For more information, see UMeasureUnitComplexity.
    530     *
    531     * @param prefix The prefix, from UMeasurePrefix.
    532     * @param status Set if this is not a SINGLE unit or if another error occurs.
    533     * @return A new SINGLE unit.
    534     * @stable ICU 69
    535     */
    536    MeasureUnit withPrefix(UMeasurePrefix prefix, UErrorCode& status) const;
    537 
    538    /**
    539     * Returns the current SI or binary prefix of this SINGLE unit. For example,
    540     * if the unit has the prefix "kilo", then UMEASURE_PREFIX_KILO is
    541     * returned.
    542     *
    543     * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
    544     * occur. For more information, see UMeasureUnitComplexity.
    545     *
    546     * @param status Set if this is not a SINGLE unit or if another error occurs.
    547     * @return The prefix of this SINGLE unit, from UMeasurePrefix.
    548     * @see umeas_getPrefixBase
    549     * @see umeas_getPrefixPower
    550     * @stable ICU 69
    551     */
    552    UMeasurePrefix getPrefix(UErrorCode& status) const;
    553 
    554 #ifndef U_HIDE_DRAFT_API
    555 
    556    /**
    557     * Creates a new MeasureUnit with a specified constant denominator.
    558     *
    559     * This method is applicable only to COMPOUND and SINGLE units. If invoked on a
    560     * MIXED unit, an error will be set in the status.
    561     *
    562     * NOTE: If the constant denominator is set to 0, it means that you are removing
    563     * the constant denominator.
    564     *
    565     * @param denominator The constant denominator to set.
    566     * @param status Set if this is not a COMPOUND or SINGLE unit or if another error occurs.
    567     * @return A new MeasureUnit with the specified constant denominator.
    568     * @draft ICU 77
    569     */
    570    MeasureUnit withConstantDenominator(uint64_t denominator, UErrorCode &status) const;
    571 
    572    /**
    573     * Retrieves the constant denominator for this COMPOUND unit.
    574     *
    575     * Examples:
    576     * - For the unit "liter-per-1000-kiloliter", the constant denominator is 1000.
    577     * - For the unit "liter-per-kilometer", the constant denominator is zero.
    578     *
    579     * This method is applicable only to COMPOUND and SINGLE units. If invoked on
    580     * a MIXED unit, an error will be set in the status.
    581     *
    582     * NOTE: If no constant denominator exists, the method returns 0.
    583     *
    584     * @param status Set if this is not a COMPOUND or SINGLE unit or if another error occurs.
    585     * @return The value of the constant denominator.
    586     * @draft ICU 77
    587     */
    588    uint64_t getConstantDenominator(UErrorCode &status) const;
    589 
    590 #endif /* U_HIDE_DRAFT_API */
    591 
    592    /**
    593     * Creates a MeasureUnit which is this SINGLE unit augmented with the specified dimensionality
    594     * (power). For example, if dimensionality is 2, the unit will be squared.
    595     *
    596     * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
    597     * occur. For more information, see UMeasureUnitComplexity.
    598     *
    599     * For the base dimensionless unit, withDimensionality does nothing.
    600     *
    601     * @param dimensionality The dimensionality (power).
    602     * @param status Set if this is not a SINGLE unit or if another error occurs.
    603     * @return A new SINGLE unit.
    604     * @stable ICU 67
    605     */
    606    MeasureUnit withDimensionality(int32_t dimensionality, UErrorCode& status) const;
    607 
    608    /**
    609     * Gets the dimensionality (power) of this MeasureUnit. For example, if the unit is square,
    610     * then 2 is returned.
    611     *
    612     * NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
    613     * occur. For more information, see UMeasureUnitComplexity.
    614     *
    615     * For the base dimensionless unit, getDimensionality returns 0.
    616     *
    617     * @param status Set if this is not a SINGLE unit or if another error occurs.
    618     * @return The dimensionality (power) of this simple unit.
    619     * @stable ICU 67
    620     */
    621    int32_t getDimensionality(UErrorCode& status) const;
    622 
    623    /**
    624     * Gets the reciprocal of this MeasureUnit, with the numerator and denominator flipped.
    625     *
    626     * For example, if the receiver is "meter-per-second", the unit "second-per-meter" is returned.
    627     *
    628     * NOTE: Only works on SINGLE and COMPOUND units. If this is a MIXED unit, an error will
    629     * occur. For more information, see UMeasureUnitComplexity.
    630     *
    631     * NOTE: An Error will be returned for units that have a constant denominator.
    632     *
    633     * @param status Set if this is a MIXED unit, has a constant denominator or if another error occurs.
    634     * @return The reciprocal of the target unit.
    635     * @stable ICU 67
    636     */
    637    MeasureUnit reciprocal(UErrorCode& status) const;
    638 
    639    /**
    640     * Gets the product of this unit with another unit. This is a way to build units from
    641     * constituent parts.
    642     *
    643     * The numerator and denominator are preserved through this operation.
    644     *
    645     * For example, if the receiver is "kilowatt" and the argument is "hour-per-day", then the
    646     * unit "kilowatt-hour-per-day" is returned.
    647     *
    648     * NOTE: Only works on SINGLE and COMPOUND units. If either unit (receiver and argument) is a
    649     * MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity.
    650     *
    651     * @param other The MeasureUnit to multiply with the target.
    652     * @param status Set if this or other is a MIXED unit or if another error occurs.
    653     * @return The product of the target unit with the provided unit.
    654     * @stable ICU 67
    655     */
    656    MeasureUnit product(const MeasureUnit& other, UErrorCode& status) const;
    657 
    658    /**
    659     * Gets the list of SINGLE units contained within a MIXED or COMPOUND unit.
    660     *
    661     * Examples:
    662     * - Given "meter-kilogram-per-second", three units will be returned: "meter",
    663     *   "kilogram", and "per-second".
    664     * - Given "hour+minute+second", three units will be returned: "hour", "minute",
    665     *   and "second".
    666     *
    667     * If this is a SINGLE unit, an array of length 1 will be returned.
    668     *
    669     * NOTE: For units with a constant denominator, the returned single units will
    670     * not include the constant denominator. To obtain the constant denominator,
    671     * retrieve it from the original unit.
    672     *
    673     * @param status Set if an error occurs.
    674     * @return A pair with the list of units as a LocalArray and the number of units in the list.
    675     * @stable ICU 68
    676     */
    677    inline std::pair<LocalArray<MeasureUnit>, int32_t> splitToSingleUnits(UErrorCode& status) const;
    678 
    679    /**
    680     * getAvailable gets all of the available units.
    681     * If there are too many units to fit into destCapacity then the
    682     * error code is set to U_BUFFER_OVERFLOW_ERROR.
    683     *
    684     * @param destArray destination buffer.
    685     * @param destCapacity number of MeasureUnit instances available at dest.
    686     * @param errorCode ICU error code.
    687     * @return number of available units.
    688     * @stable ICU 53
    689     */
    690    static int32_t getAvailable(
    691            MeasureUnit *destArray,
    692            int32_t destCapacity,
    693            UErrorCode &errorCode);
    694 
    695    /**
    696     * getAvailable gets all of the available units for a specific type.
    697     * If there are too many units to fit into destCapacity then the
    698     * error code is set to U_BUFFER_OVERFLOW_ERROR.
    699     *
    700     * @param type the type
    701     * @param destArray destination buffer.
    702     * @param destCapacity number of MeasureUnit instances available at dest.
    703     * @param errorCode ICU error code.
    704     * @return number of available units for type.
    705     * @stable ICU 53
    706     */
    707    static int32_t getAvailable(
    708            const char *type,
    709            MeasureUnit *destArray,
    710            int32_t destCapacity,
    711            UErrorCode &errorCode);
    712 
    713    /**
    714     * getAvailableTypes gets all of the available types. Caller owns the
    715     * returned StringEnumeration and must delete it when finished using it.
    716     *
    717     * @param errorCode ICU error code.
    718     * @return the types.
    719     * @stable ICU 53
    720     */
    721    static StringEnumeration* getAvailableTypes(UErrorCode &errorCode);
    722 
    723    /**
    724     * Return the class ID for this class. This is useful only for comparing to
    725     * a return value from getDynamicClassID(). For example:
    726     * <pre>
    727     * .   Base* polymorphic_pointer = createPolymorphicObject();
    728     * .   if (polymorphic_pointer->getDynamicClassID() ==
    729     * .       Derived::getStaticClassID()) ...
    730     * </pre>
    731     * @return          The class ID for all objects of this class.
    732     * @stable ICU 53
    733     */
    734    static UClassID U_EXPORT2 getStaticClassID();
    735 
    736    /**
    737     * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
    738     * method is to implement a simple version of RTTI, since not all C++
    739     * compilers support genuine RTTI. Polymorphic operator==() and clone()
    740     * methods call this method.
    741     *
    742     * @return          The class ID for this object. All objects of a
    743     *                  given class have the same class ID.  Objects of
    744     *                  other classes have different class IDs.
    745     * @stable ICU 53
    746     */
    747    virtual UClassID getDynamicClassID() const override;
    748 
    749 #ifndef U_HIDE_INTERNAL_API
    750    /**
    751     * ICU use only.
    752     * Returns associated array index for this measure unit.
    753     * @internal
    754     */
    755    int32_t getOffset() const;
    756 #endif /* U_HIDE_INTERNAL_API */
    757 
    758 // All code between the "Start generated createXXX methods" comment and
    759 // the "End generated createXXX methods" comment is auto generated code
    760 // and must not be edited manually. For instructions on how to correctly
    761 // update this code, refer to:
    762 // docs/processes/release/tasks/updating-measure-unit.md
    763 //
    764 // Start generated createXXX methods
    765 
    766    /**
    767     * Returns by pointer, unit of acceleration: g-force.
    768     * Caller owns returned value and must free it.
    769     * Also see {@link #getGForce()}.
    770     * @param status ICU error code.
    771     * @stable ICU 53
    772     */
    773    static MeasureUnit *createGForce(UErrorCode &status);
    774 
    775    /**
    776     * Returns by value, unit of acceleration: g-force.
    777     * Also see {@link #createGForce()}.
    778     * @stable ICU 64
    779     */
    780    static MeasureUnit getGForce();
    781 
    782    /**
    783     * Returns by pointer, unit of acceleration: meter-per-square-second.
    784     * Caller owns returned value and must free it.
    785     * Also see {@link #getMeterPerSecondSquared()}.
    786     * @param status ICU error code.
    787     * @stable ICU 54
    788     */
    789    static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status);
    790 
    791    /**
    792     * Returns by value, unit of acceleration: meter-per-square-second.
    793     * Also see {@link #createMeterPerSecondSquared()}.
    794     * @stable ICU 64
    795     */
    796    static MeasureUnit getMeterPerSecondSquared();
    797 
    798    /**
    799     * Returns by pointer, unit of angle: arc-minute.
    800     * Caller owns returned value and must free it.
    801     * Also see {@link #getArcMinute()}.
    802     * @param status ICU error code.
    803     * @stable ICU 53
    804     */
    805    static MeasureUnit *createArcMinute(UErrorCode &status);
    806 
    807    /**
    808     * Returns by value, unit of angle: arc-minute.
    809     * Also see {@link #createArcMinute()}.
    810     * @stable ICU 64
    811     */
    812    static MeasureUnit getArcMinute();
    813 
    814    /**
    815     * Returns by pointer, unit of angle: arc-second.
    816     * Caller owns returned value and must free it.
    817     * Also see {@link #getArcSecond()}.
    818     * @param status ICU error code.
    819     * @stable ICU 53
    820     */
    821    static MeasureUnit *createArcSecond(UErrorCode &status);
    822 
    823    /**
    824     * Returns by value, unit of angle: arc-second.
    825     * Also see {@link #createArcSecond()}.
    826     * @stable ICU 64
    827     */
    828    static MeasureUnit getArcSecond();
    829 
    830    /**
    831     * Returns by pointer, unit of angle: degree.
    832     * Caller owns returned value and must free it.
    833     * Also see {@link #getDegree()}.
    834     * @param status ICU error code.
    835     * @stable ICU 53
    836     */
    837    static MeasureUnit *createDegree(UErrorCode &status);
    838 
    839    /**
    840     * Returns by value, unit of angle: degree.
    841     * Also see {@link #createDegree()}.
    842     * @stable ICU 64
    843     */
    844    static MeasureUnit getDegree();
    845 
    846    /**
    847     * Returns by pointer, unit of angle: radian.
    848     * Caller owns returned value and must free it.
    849     * Also see {@link #getRadian()}.
    850     * @param status ICU error code.
    851     * @stable ICU 54
    852     */
    853    static MeasureUnit *createRadian(UErrorCode &status);
    854 
    855    /**
    856     * Returns by value, unit of angle: radian.
    857     * Also see {@link #createRadian()}.
    858     * @stable ICU 64
    859     */
    860    static MeasureUnit getRadian();
    861 
    862    /**
    863     * Returns by pointer, unit of angle: revolution.
    864     * Caller owns returned value and must free it.
    865     * Also see {@link #getRevolutionAngle()}.
    866     * @param status ICU error code.
    867     * @stable ICU 56
    868     */
    869    static MeasureUnit *createRevolutionAngle(UErrorCode &status);
    870 
    871    /**
    872     * Returns by value, unit of angle: revolution.
    873     * Also see {@link #createRevolutionAngle()}.
    874     * @stable ICU 64
    875     */
    876    static MeasureUnit getRevolutionAngle();
    877 
    878 #ifndef U_HIDE_DRAFT_API
    879    /**
    880     * Returns by pointer, unit of angle: steradian.
    881     * Caller owns returned value and must free it.
    882     * Also see {@link #getSteradian()}.
    883     * @param status ICU error code.
    884     * @draft ICU 78
    885     */
    886    static MeasureUnit *createSteradian(UErrorCode &status);
    887 
    888    /**
    889     * Returns by value, unit of angle: steradian.
    890     * Also see {@link #createSteradian()}.
    891     * @draft ICU 78
    892     */
    893    static MeasureUnit getSteradian();
    894 #endif /* U_HIDE_DRAFT_API */
    895 
    896    /**
    897     * Returns by pointer, unit of area: acre.
    898     * Caller owns returned value and must free it.
    899     * Also see {@link #getAcre()}.
    900     * @param status ICU error code.
    901     * @stable ICU 53
    902     */
    903    static MeasureUnit *createAcre(UErrorCode &status);
    904 
    905    /**
    906     * Returns by value, unit of area: acre.
    907     * Also see {@link #createAcre()}.
    908     * @stable ICU 64
    909     */
    910    static MeasureUnit getAcre();
    911 
    912 #ifndef U_HIDE_DRAFT_API
    913    /**
    914     * Returns by pointer, unit of area: bu-jp.
    915     * Caller owns returned value and must free it.
    916     * Also see {@link #getBuJp()}.
    917     * @param status ICU error code.
    918     * @draft ICU 78
    919     */
    920    static MeasureUnit *createBuJp(UErrorCode &status);
    921 
    922    /**
    923     * Returns by value, unit of area: bu-jp.
    924     * Also see {@link #createBuJp()}.
    925     * @draft ICU 78
    926     */
    927    static MeasureUnit getBuJp();
    928 #endif /* U_HIDE_DRAFT_API */
    929 
    930 #ifndef U_HIDE_DRAFT_API
    931    /**
    932     * Returns by pointer, unit of area: cho.
    933     * Caller owns returned value and must free it.
    934     * Also see {@link #getCho()}.
    935     * @param status ICU error code.
    936     * @draft ICU 78
    937     */
    938    static MeasureUnit *createCho(UErrorCode &status);
    939 
    940    /**
    941     * Returns by value, unit of area: cho.
    942     * Also see {@link #createCho()}.
    943     * @draft ICU 78
    944     */
    945    static MeasureUnit getCho();
    946 #endif /* U_HIDE_DRAFT_API */
    947 
    948    /**
    949     * Returns by pointer, unit of area: dunam.
    950     * Caller owns returned value and must free it.
    951     * Also see {@link #getDunam()}.
    952     * @param status ICU error code.
    953     * @stable ICU 64
    954     */
    955    static MeasureUnit *createDunam(UErrorCode &status);
    956 
    957    /**
    958     * Returns by value, unit of area: dunam.
    959     * Also see {@link #createDunam()}.
    960     * @stable ICU 64
    961     */
    962    static MeasureUnit getDunam();
    963 
    964    /**
    965     * Returns by pointer, unit of area: hectare.
    966     * Caller owns returned value and must free it.
    967     * Also see {@link #getHectare()}.
    968     * @param status ICU error code.
    969     * @stable ICU 53
    970     */
    971    static MeasureUnit *createHectare(UErrorCode &status);
    972 
    973    /**
    974     * Returns by value, unit of area: hectare.
    975     * Also see {@link #createHectare()}.
    976     * @stable ICU 64
    977     */
    978    static MeasureUnit getHectare();
    979 
    980 #ifndef U_HIDE_DRAFT_API
    981    /**
    982     * Returns by pointer, unit of area: se-jp.
    983     * Caller owns returned value and must free it.
    984     * Also see {@link #getSeJp()}.
    985     * @param status ICU error code.
    986     * @draft ICU 78
    987     */
    988    static MeasureUnit *createSeJp(UErrorCode &status);
    989 
    990    /**
    991     * Returns by value, unit of area: se-jp.
    992     * Also see {@link #createSeJp()}.
    993     * @draft ICU 78
    994     */
    995    static MeasureUnit getSeJp();
    996 #endif /* U_HIDE_DRAFT_API */
    997 
    998    /**
    999     * Returns by pointer, unit of area: square-centimeter.
   1000     * Caller owns returned value and must free it.
   1001     * Also see {@link #getSquareCentimeter()}.
   1002     * @param status ICU error code.
   1003     * @stable ICU 54
   1004     */
   1005    static MeasureUnit *createSquareCentimeter(UErrorCode &status);
   1006 
   1007    /**
   1008     * Returns by value, unit of area: square-centimeter.
   1009     * Also see {@link #createSquareCentimeter()}.
   1010     * @stable ICU 64
   1011     */
   1012    static MeasureUnit getSquareCentimeter();
   1013 
   1014    /**
   1015     * Returns by pointer, unit of area: square-foot.
   1016     * Caller owns returned value and must free it.
   1017     * Also see {@link #getSquareFoot()}.
   1018     * @param status ICU error code.
   1019     * @stable ICU 53
   1020     */
   1021    static MeasureUnit *createSquareFoot(UErrorCode &status);
   1022 
   1023    /**
   1024     * Returns by value, unit of area: square-foot.
   1025     * Also see {@link #createSquareFoot()}.
   1026     * @stable ICU 64
   1027     */
   1028    static MeasureUnit getSquareFoot();
   1029 
   1030    /**
   1031     * Returns by pointer, unit of area: square-inch.
   1032     * Caller owns returned value and must free it.
   1033     * Also see {@link #getSquareInch()}.
   1034     * @param status ICU error code.
   1035     * @stable ICU 54
   1036     */
   1037    static MeasureUnit *createSquareInch(UErrorCode &status);
   1038 
   1039    /**
   1040     * Returns by value, unit of area: square-inch.
   1041     * Also see {@link #createSquareInch()}.
   1042     * @stable ICU 64
   1043     */
   1044    static MeasureUnit getSquareInch();
   1045 
   1046    /**
   1047     * Returns by pointer, unit of area: square-kilometer.
   1048     * Caller owns returned value and must free it.
   1049     * Also see {@link #getSquareKilometer()}.
   1050     * @param status ICU error code.
   1051     * @stable ICU 53
   1052     */
   1053    static MeasureUnit *createSquareKilometer(UErrorCode &status);
   1054 
   1055    /**
   1056     * Returns by value, unit of area: square-kilometer.
   1057     * Also see {@link #createSquareKilometer()}.
   1058     * @stable ICU 64
   1059     */
   1060    static MeasureUnit getSquareKilometer();
   1061 
   1062    /**
   1063     * Returns by pointer, unit of area: square-meter.
   1064     * Caller owns returned value and must free it.
   1065     * Also see {@link #getSquareMeter()}.
   1066     * @param status ICU error code.
   1067     * @stable ICU 53
   1068     */
   1069    static MeasureUnit *createSquareMeter(UErrorCode &status);
   1070 
   1071    /**
   1072     * Returns by value, unit of area: square-meter.
   1073     * Also see {@link #createSquareMeter()}.
   1074     * @stable ICU 64
   1075     */
   1076    static MeasureUnit getSquareMeter();
   1077 
   1078    /**
   1079     * Returns by pointer, unit of area: square-mile.
   1080     * Caller owns returned value and must free it.
   1081     * Also see {@link #getSquareMile()}.
   1082     * @param status ICU error code.
   1083     * @stable ICU 53
   1084     */
   1085    static MeasureUnit *createSquareMile(UErrorCode &status);
   1086 
   1087    /**
   1088     * Returns by value, unit of area: square-mile.
   1089     * Also see {@link #createSquareMile()}.
   1090     * @stable ICU 64
   1091     */
   1092    static MeasureUnit getSquareMile();
   1093 
   1094    /**
   1095     * Returns by pointer, unit of area: square-yard.
   1096     * Caller owns returned value and must free it.
   1097     * Also see {@link #getSquareYard()}.
   1098     * @param status ICU error code.
   1099     * @stable ICU 54
   1100     */
   1101    static MeasureUnit *createSquareYard(UErrorCode &status);
   1102 
   1103    /**
   1104     * Returns by value, unit of area: square-yard.
   1105     * Also see {@link #createSquareYard()}.
   1106     * @stable ICU 64
   1107     */
   1108    static MeasureUnit getSquareYard();
   1109 
   1110    /**
   1111     * Returns by pointer, unit of concentr: item.
   1112     * Caller owns returned value and must free it.
   1113     * Also see {@link #getItem()}.
   1114     * @param status ICU error code.
   1115     * @stable ICU 70
   1116     */
   1117    static MeasureUnit *createItem(UErrorCode &status);
   1118 
   1119    /**
   1120     * Returns by value, unit of concentr: item.
   1121     * Also see {@link #createItem()}.
   1122     * @stable ICU 70
   1123     */
   1124    static MeasureUnit getItem();
   1125 
   1126    /**
   1127     * Returns by pointer, unit of concentr: karat.
   1128     * Caller owns returned value and must free it.
   1129     * Also see {@link #getKarat()}.
   1130     * @param status ICU error code.
   1131     * @stable ICU 54
   1132     */
   1133    static MeasureUnit *createKarat(UErrorCode &status);
   1134 
   1135    /**
   1136     * Returns by value, unit of concentr: karat.
   1137     * Also see {@link #createKarat()}.
   1138     * @stable ICU 64
   1139     */
   1140    static MeasureUnit getKarat();
   1141 
   1142 #ifndef U_HIDE_DRAFT_API
   1143    /**
   1144     * Returns by pointer, unit of concentr: katal.
   1145     * Caller owns returned value and must free it.
   1146     * Also see {@link #getKatal()}.
   1147     * @param status ICU error code.
   1148     * @draft ICU 78
   1149     */
   1150    static MeasureUnit *createKatal(UErrorCode &status);
   1151 
   1152    /**
   1153     * Returns by value, unit of concentr: katal.
   1154     * Also see {@link #createKatal()}.
   1155     * @draft ICU 78
   1156     */
   1157    static MeasureUnit getKatal();
   1158 #endif /* U_HIDE_DRAFT_API */
   1159 
   1160    /**
   1161     * Returns by pointer, unit of concentr: milligram-ofglucose-per-deciliter.
   1162     * Caller owns returned value and must free it.
   1163     * Also see {@link #getMilligramOfglucosePerDeciliter()}.
   1164     * @param status ICU error code.
   1165     * @stable ICU 69
   1166     */
   1167    static MeasureUnit *createMilligramOfglucosePerDeciliter(UErrorCode &status);
   1168 
   1169    /**
   1170     * Returns by value, unit of concentr: milligram-ofglucose-per-deciliter.
   1171     * Also see {@link #createMilligramOfglucosePerDeciliter()}.
   1172     * @stable ICU 69
   1173     */
   1174    static MeasureUnit getMilligramOfglucosePerDeciliter();
   1175 
   1176 #ifndef U_HIDE_DEPRECATED_API
   1177    /**
   1178     * Returns by pointer, unit of concentr: milligram-per-deciliter.
   1179     * (renamed to milligram-ofglucose-per-deciliter in CLDR 39 / ICU 69).
   1180     * Caller owns returned value and must free it.
   1181     * Also see {@link #createMilligramOfglucosePerDeciliter()}.
   1182     * Also see {@link #getMilligramPerDeciliter()}.
   1183     * @param status ICU error code.
   1184     * @deprecated ICU 78 use createMilligramOfglucosePerDeciliter(UErrorCode &status)
   1185     */
   1186    static MeasureUnit *createMilligramPerDeciliter(UErrorCode &status);
   1187 
   1188    /**
   1189     * Returns by value, unit of concentr: milligram-per-deciliter.
   1190     * (renamed to milligram-ofglucose-per-deciliter in CLDR 39 / ICU 69).
   1191     * Also see {@link #getMilligramOfglucosePerDeciliter()}.
   1192     * Also see {@link #createMilligramPerDeciliter()}.
   1193     * @deprecated ICU 78 use getMilligramOfglucosePerDeciliter()
   1194     */
   1195    static MeasureUnit getMilligramPerDeciliter();
   1196 #endif  /* U_HIDE_DEPRECATED_API */
   1197 
   1198    /**
   1199     * Returns by pointer, unit of concentr: millimole-per-liter.
   1200     * Caller owns returned value and must free it.
   1201     * Also see {@link #getMillimolePerLiter()}.
   1202     * @param status ICU error code.
   1203     * @stable ICU 57
   1204     */
   1205    static MeasureUnit *createMillimolePerLiter(UErrorCode &status);
   1206 
   1207    /**
   1208     * Returns by value, unit of concentr: millimole-per-liter.
   1209     * Also see {@link #createMillimolePerLiter()}.
   1210     * @stable ICU 64
   1211     */
   1212    static MeasureUnit getMillimolePerLiter();
   1213 
   1214    /**
   1215     * Returns by pointer, unit of concentr: mole.
   1216     * Caller owns returned value and must free it.
   1217     * Also see {@link #getMole()}.
   1218     * @param status ICU error code.
   1219     * @stable ICU 64
   1220     */
   1221    static MeasureUnit *createMole(UErrorCode &status);
   1222 
   1223    /**
   1224     * Returns by value, unit of concentr: mole.
   1225     * Also see {@link #createMole()}.
   1226     * @stable ICU 64
   1227     */
   1228    static MeasureUnit getMole();
   1229 
   1230 #ifndef U_HIDE_DRAFT_API
   1231    /**
   1232     * Returns by pointer, unit of concentr: ofglucose.
   1233     * Caller owns returned value and must free it.
   1234     * Also see {@link #getOfglucose()}.
   1235     * @param status ICU error code.
   1236     * @draft ICU 78
   1237     */
   1238    static MeasureUnit *createOfglucose(UErrorCode &status);
   1239 
   1240    /**
   1241     * Returns by value, unit of concentr: ofglucose.
   1242     * Also see {@link #createOfglucose()}.
   1243     * @draft ICU 78
   1244     */
   1245    static MeasureUnit getOfglucose();
   1246 #endif /* U_HIDE_DRAFT_API */
   1247 
   1248 #ifndef U_HIDE_DRAFT_API
   1249    /**
   1250     * Returns by pointer, unit of concentr: part.
   1251     * Caller owns returned value and must free it.
   1252     * Also see {@link #getPart()}.
   1253     * @param status ICU error code.
   1254     * @draft ICU 78
   1255     */
   1256    static MeasureUnit *createPart(UErrorCode &status);
   1257 
   1258    /**
   1259     * Returns by value, unit of concentr: part.
   1260     * Also see {@link #createPart()}.
   1261     * @draft ICU 78
   1262     */
   1263    static MeasureUnit getPart();
   1264 #endif /* U_HIDE_DRAFT_API */
   1265 
   1266 #ifndef U_HIDE_DRAFT_API
   1267    /**
   1268     * Returns by pointer, unit of concentr: part-per-1e6.
   1269     * Caller owns returned value and must free it.
   1270     * Also see {@link #getPartPer1E6()}.
   1271     * @param status ICU error code.
   1272     * @draft ICU 78
   1273     */
   1274    static MeasureUnit *createPartPer1E6(UErrorCode &status);
   1275 
   1276    /**
   1277     * Returns by value, unit of concentr: part-per-1e6.
   1278     * Also see {@link #createPartPer1E6()}.
   1279     * @draft ICU 78
   1280     */
   1281    static MeasureUnit getPartPer1E6();
   1282 #endif /* U_HIDE_DRAFT_API */
   1283 
   1284    /**
   1285     * Returns by pointer, unit of concentr: part-per-million.
   1286     * (renamed to part-per-1e6 in CLDR 48 / ICU 78).
   1287     * Caller owns returned value and must free it.
   1288     * Also see {@link #createPartPer1E6()}.
   1289     * Also see {@link #getPartPerMillion()}.
   1290     * @param status ICU error code.
   1291     * @stable ICU 57
   1292     */
   1293    static MeasureUnit *createPartPerMillion(UErrorCode &status);
   1294 
   1295    /**
   1296     * Returns by value, unit of concentr: part-per-million.
   1297     * (renamed to part-per-1e6 in CLDR 48 / ICU 78).
   1298     * Also see {@link #getPartPer1E6()}.
   1299     * Also see {@link #createPartPerMillion()}.
   1300     * @stable ICU 64
   1301     */
   1302    static MeasureUnit getPartPerMillion();
   1303 
   1304 #ifndef U_HIDE_DRAFT_API
   1305    /**
   1306     * Returns by pointer, unit of concentr: part-per-1e9.
   1307     * Caller owns returned value and must free it.
   1308     * Also see {@link #getPartPer1E9()}.
   1309     * @param status ICU error code.
   1310     * @draft ICU 78
   1311     */
   1312    static MeasureUnit *createPartPer1E9(UErrorCode &status);
   1313 
   1314    /**
   1315     * Returns by value, unit of concentr: part-per-1e9.
   1316     * Also see {@link #createPartPer1E9()}.
   1317     * @draft ICU 78
   1318     */
   1319    static MeasureUnit getPartPer1E9();
   1320 #endif /* U_HIDE_DRAFT_API */
   1321 
   1322    /**
   1323     * Returns by pointer, unit of concentr: percent.
   1324     * Caller owns returned value and must free it.
   1325     * Also see {@link #getPercent()}.
   1326     * @param status ICU error code.
   1327     * @stable ICU 63
   1328     */
   1329    static MeasureUnit *createPercent(UErrorCode &status);
   1330 
   1331    /**
   1332     * Returns by value, unit of concentr: percent.
   1333     * Also see {@link #createPercent()}.
   1334     * @stable ICU 64
   1335     */
   1336    static MeasureUnit getPercent();
   1337 
   1338    /**
   1339     * Returns by pointer, unit of concentr: permille.
   1340     * Caller owns returned value and must free it.
   1341     * Also see {@link #getPermille()}.
   1342     * @param status ICU error code.
   1343     * @stable ICU 63
   1344     */
   1345    static MeasureUnit *createPermille(UErrorCode &status);
   1346 
   1347    /**
   1348     * Returns by value, unit of concentr: permille.
   1349     * Also see {@link #createPermille()}.
   1350     * @stable ICU 64
   1351     */
   1352    static MeasureUnit getPermille();
   1353 
   1354    /**
   1355     * Returns by pointer, unit of concentr: permyriad.
   1356     * Caller owns returned value and must free it.
   1357     * Also see {@link #getPermyriad()}.
   1358     * @param status ICU error code.
   1359     * @stable ICU 64
   1360     */
   1361    static MeasureUnit *createPermyriad(UErrorCode &status);
   1362 
   1363    /**
   1364     * Returns by value, unit of concentr: permyriad.
   1365     * Also see {@link #createPermyriad()}.
   1366     * @stable ICU 64
   1367     */
   1368    static MeasureUnit getPermyriad();
   1369 
   1370    /**
   1371     * Returns by pointer, unit of consumption: liter-per-100-kilometer.
   1372     * Caller owns returned value and must free it.
   1373     * Also see {@link #getLiterPer100Kilometers()}.
   1374     * @param status ICU error code.
   1375     * @stable ICU 56
   1376     */
   1377    static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status);
   1378 
   1379    /**
   1380     * Returns by value, unit of consumption: liter-per-100-kilometer.
   1381     * Also see {@link #createLiterPer100Kilometers()}.
   1382     * @stable ICU 64
   1383     */
   1384    static MeasureUnit getLiterPer100Kilometers();
   1385 
   1386    /**
   1387     * Returns by pointer, unit of consumption: liter-per-kilometer.
   1388     * Caller owns returned value and must free it.
   1389     * Also see {@link #getLiterPerKilometer()}.
   1390     * @param status ICU error code.
   1391     * @stable ICU 54
   1392     */
   1393    static MeasureUnit *createLiterPerKilometer(UErrorCode &status);
   1394 
   1395    /**
   1396     * Returns by value, unit of consumption: liter-per-kilometer.
   1397     * Also see {@link #createLiterPerKilometer()}.
   1398     * @stable ICU 64
   1399     */
   1400    static MeasureUnit getLiterPerKilometer();
   1401 
   1402    /**
   1403     * Returns by pointer, unit of consumption: mile-per-gallon.
   1404     * Caller owns returned value and must free it.
   1405     * Also see {@link #getMilePerGallon()}.
   1406     * @param status ICU error code.
   1407     * @stable ICU 54
   1408     */
   1409    static MeasureUnit *createMilePerGallon(UErrorCode &status);
   1410 
   1411    /**
   1412     * Returns by value, unit of consumption: mile-per-gallon.
   1413     * Also see {@link #createMilePerGallon()}.
   1414     * @stable ICU 64
   1415     */
   1416    static MeasureUnit getMilePerGallon();
   1417 
   1418    /**
   1419     * Returns by pointer, unit of consumption: mile-per-gallon-imperial.
   1420     * Caller owns returned value and must free it.
   1421     * Also see {@link #getMilePerGallonImperial()}.
   1422     * @param status ICU error code.
   1423     * @stable ICU 57
   1424     */
   1425    static MeasureUnit *createMilePerGallonImperial(UErrorCode &status);
   1426 
   1427    /**
   1428     * Returns by value, unit of consumption: mile-per-gallon-imperial.
   1429     * Also see {@link #createMilePerGallonImperial()}.
   1430     * @stable ICU 64
   1431     */
   1432    static MeasureUnit getMilePerGallonImperial();
   1433 
   1434    /**
   1435     * Returns by pointer, unit of digital: bit.
   1436     * Caller owns returned value and must free it.
   1437     * Also see {@link #getBit()}.
   1438     * @param status ICU error code.
   1439     * @stable ICU 54
   1440     */
   1441    static MeasureUnit *createBit(UErrorCode &status);
   1442 
   1443    /**
   1444     * Returns by value, unit of digital: bit.
   1445     * Also see {@link #createBit()}.
   1446     * @stable ICU 64
   1447     */
   1448    static MeasureUnit getBit();
   1449 
   1450    /**
   1451     * Returns by pointer, unit of digital: byte.
   1452     * Caller owns returned value and must free it.
   1453     * Also see {@link #getByte()}.
   1454     * @param status ICU error code.
   1455     * @stable ICU 54
   1456     */
   1457    static MeasureUnit *createByte(UErrorCode &status);
   1458 
   1459    /**
   1460     * Returns by value, unit of digital: byte.
   1461     * Also see {@link #createByte()}.
   1462     * @stable ICU 64
   1463     */
   1464    static MeasureUnit getByte();
   1465 
   1466    /**
   1467     * Returns by pointer, unit of digital: gigabit.
   1468     * Caller owns returned value and must free it.
   1469     * Also see {@link #getGigabit()}.
   1470     * @param status ICU error code.
   1471     * @stable ICU 54
   1472     */
   1473    static MeasureUnit *createGigabit(UErrorCode &status);
   1474 
   1475    /**
   1476     * Returns by value, unit of digital: gigabit.
   1477     * Also see {@link #createGigabit()}.
   1478     * @stable ICU 64
   1479     */
   1480    static MeasureUnit getGigabit();
   1481 
   1482    /**
   1483     * Returns by pointer, unit of digital: gigabyte.
   1484     * Caller owns returned value and must free it.
   1485     * Also see {@link #getGigabyte()}.
   1486     * @param status ICU error code.
   1487     * @stable ICU 54
   1488     */
   1489    static MeasureUnit *createGigabyte(UErrorCode &status);
   1490 
   1491    /**
   1492     * Returns by value, unit of digital: gigabyte.
   1493     * Also see {@link #createGigabyte()}.
   1494     * @stable ICU 64
   1495     */
   1496    static MeasureUnit getGigabyte();
   1497 
   1498    /**
   1499     * Returns by pointer, unit of digital: kilobit.
   1500     * Caller owns returned value and must free it.
   1501     * Also see {@link #getKilobit()}.
   1502     * @param status ICU error code.
   1503     * @stable ICU 54
   1504     */
   1505    static MeasureUnit *createKilobit(UErrorCode &status);
   1506 
   1507    /**
   1508     * Returns by value, unit of digital: kilobit.
   1509     * Also see {@link #createKilobit()}.
   1510     * @stable ICU 64
   1511     */
   1512    static MeasureUnit getKilobit();
   1513 
   1514    /**
   1515     * Returns by pointer, unit of digital: kilobyte.
   1516     * Caller owns returned value and must free it.
   1517     * Also see {@link #getKilobyte()}.
   1518     * @param status ICU error code.
   1519     * @stable ICU 54
   1520     */
   1521    static MeasureUnit *createKilobyte(UErrorCode &status);
   1522 
   1523    /**
   1524     * Returns by value, unit of digital: kilobyte.
   1525     * Also see {@link #createKilobyte()}.
   1526     * @stable ICU 64
   1527     */
   1528    static MeasureUnit getKilobyte();
   1529 
   1530    /**
   1531     * Returns by pointer, unit of digital: megabit.
   1532     * Caller owns returned value and must free it.
   1533     * Also see {@link #getMegabit()}.
   1534     * @param status ICU error code.
   1535     * @stable ICU 54
   1536     */
   1537    static MeasureUnit *createMegabit(UErrorCode &status);
   1538 
   1539    /**
   1540     * Returns by value, unit of digital: megabit.
   1541     * Also see {@link #createMegabit()}.
   1542     * @stable ICU 64
   1543     */
   1544    static MeasureUnit getMegabit();
   1545 
   1546    /**
   1547     * Returns by pointer, unit of digital: megabyte.
   1548     * Caller owns returned value and must free it.
   1549     * Also see {@link #getMegabyte()}.
   1550     * @param status ICU error code.
   1551     * @stable ICU 54
   1552     */
   1553    static MeasureUnit *createMegabyte(UErrorCode &status);
   1554 
   1555    /**
   1556     * Returns by value, unit of digital: megabyte.
   1557     * Also see {@link #createMegabyte()}.
   1558     * @stable ICU 64
   1559     */
   1560    static MeasureUnit getMegabyte();
   1561 
   1562    /**
   1563     * Returns by pointer, unit of digital: petabyte.
   1564     * Caller owns returned value and must free it.
   1565     * Also see {@link #getPetabyte()}.
   1566     * @param status ICU error code.
   1567     * @stable ICU 63
   1568     */
   1569    static MeasureUnit *createPetabyte(UErrorCode &status);
   1570 
   1571    /**
   1572     * Returns by value, unit of digital: petabyte.
   1573     * Also see {@link #createPetabyte()}.
   1574     * @stable ICU 64
   1575     */
   1576    static MeasureUnit getPetabyte();
   1577 
   1578    /**
   1579     * Returns by pointer, unit of digital: terabit.
   1580     * Caller owns returned value and must free it.
   1581     * Also see {@link #getTerabit()}.
   1582     * @param status ICU error code.
   1583     * @stable ICU 54
   1584     */
   1585    static MeasureUnit *createTerabit(UErrorCode &status);
   1586 
   1587    /**
   1588     * Returns by value, unit of digital: terabit.
   1589     * Also see {@link #createTerabit()}.
   1590     * @stable ICU 64
   1591     */
   1592    static MeasureUnit getTerabit();
   1593 
   1594    /**
   1595     * Returns by pointer, unit of digital: terabyte.
   1596     * Caller owns returned value and must free it.
   1597     * Also see {@link #getTerabyte()}.
   1598     * @param status ICU error code.
   1599     * @stable ICU 54
   1600     */
   1601    static MeasureUnit *createTerabyte(UErrorCode &status);
   1602 
   1603    /**
   1604     * Returns by value, unit of digital: terabyte.
   1605     * Also see {@link #createTerabyte()}.
   1606     * @stable ICU 64
   1607     */
   1608    static MeasureUnit getTerabyte();
   1609 
   1610    /**
   1611     * Returns by pointer, unit of duration: century.
   1612     * Caller owns returned value and must free it.
   1613     * Also see {@link #getCentury()}.
   1614     * @param status ICU error code.
   1615     * @stable ICU 56
   1616     */
   1617    static MeasureUnit *createCentury(UErrorCode &status);
   1618 
   1619    /**
   1620     * Returns by value, unit of duration: century.
   1621     * Also see {@link #createCentury()}.
   1622     * @stable ICU 64
   1623     */
   1624    static MeasureUnit getCentury();
   1625 
   1626    /**
   1627     * Returns by pointer, unit of duration: day.
   1628     * Caller owns returned value and must free it.
   1629     * Also see {@link #getDay()}.
   1630     * @param status ICU error code.
   1631     * @stable ICU 53
   1632     */
   1633    static MeasureUnit *createDay(UErrorCode &status);
   1634 
   1635    /**
   1636     * Returns by value, unit of duration: day.
   1637     * Also see {@link #createDay()}.
   1638     * @stable ICU 64
   1639     */
   1640    static MeasureUnit getDay();
   1641 
   1642    /**
   1643     * Returns by pointer, unit of duration: day-person.
   1644     * Caller owns returned value and must free it.
   1645     * Also see {@link #getDayPerson()}.
   1646     * @param status ICU error code.
   1647     * @stable ICU 64
   1648     */
   1649    static MeasureUnit *createDayPerson(UErrorCode &status);
   1650 
   1651    /**
   1652     * Returns by value, unit of duration: day-person.
   1653     * Also see {@link #createDayPerson()}.
   1654     * @stable ICU 64
   1655     */
   1656    static MeasureUnit getDayPerson();
   1657 
   1658    /**
   1659     * Returns by pointer, unit of duration: decade.
   1660     * Caller owns returned value and must free it.
   1661     * Also see {@link #getDecade()}.
   1662     * @param status ICU error code.
   1663     * @stable ICU 65
   1664     */
   1665    static MeasureUnit *createDecade(UErrorCode &status);
   1666 
   1667    /**
   1668     * Returns by value, unit of duration: decade.
   1669     * Also see {@link #createDecade()}.
   1670     * @stable ICU 65
   1671     */
   1672    static MeasureUnit getDecade();
   1673 
   1674 #ifndef U_HIDE_DRAFT_API
   1675    /**
   1676     * Returns by pointer, unit of duration: fortnight.
   1677     * Caller owns returned value and must free it.
   1678     * Also see {@link #getFortnight()}.
   1679     * @param status ICU error code.
   1680     * @draft ICU 78
   1681     */
   1682    static MeasureUnit *createFortnight(UErrorCode &status);
   1683 
   1684    /**
   1685     * Returns by value, unit of duration: fortnight.
   1686     * Also see {@link #createFortnight()}.
   1687     * @draft ICU 78
   1688     */
   1689    static MeasureUnit getFortnight();
   1690 #endif /* U_HIDE_DRAFT_API */
   1691 
   1692    /**
   1693     * Returns by pointer, unit of duration: hour.
   1694     * Caller owns returned value and must free it.
   1695     * Also see {@link #getHour()}.
   1696     * @param status ICU error code.
   1697     * @stable ICU 53
   1698     */
   1699    static MeasureUnit *createHour(UErrorCode &status);
   1700 
   1701    /**
   1702     * Returns by value, unit of duration: hour.
   1703     * Also see {@link #createHour()}.
   1704     * @stable ICU 64
   1705     */
   1706    static MeasureUnit getHour();
   1707 
   1708    /**
   1709     * Returns by pointer, unit of duration: microsecond.
   1710     * Caller owns returned value and must free it.
   1711     * Also see {@link #getMicrosecond()}.
   1712     * @param status ICU error code.
   1713     * @stable ICU 54
   1714     */
   1715    static MeasureUnit *createMicrosecond(UErrorCode &status);
   1716 
   1717    /**
   1718     * Returns by value, unit of duration: microsecond.
   1719     * Also see {@link #createMicrosecond()}.
   1720     * @stable ICU 64
   1721     */
   1722    static MeasureUnit getMicrosecond();
   1723 
   1724    /**
   1725     * Returns by pointer, unit of duration: millisecond.
   1726     * Caller owns returned value and must free it.
   1727     * Also see {@link #getMillisecond()}.
   1728     * @param status ICU error code.
   1729     * @stable ICU 53
   1730     */
   1731    static MeasureUnit *createMillisecond(UErrorCode &status);
   1732 
   1733    /**
   1734     * Returns by value, unit of duration: millisecond.
   1735     * Also see {@link #createMillisecond()}.
   1736     * @stable ICU 64
   1737     */
   1738    static MeasureUnit getMillisecond();
   1739 
   1740    /**
   1741     * Returns by pointer, unit of duration: minute.
   1742     * Caller owns returned value and must free it.
   1743     * Also see {@link #getMinute()}.
   1744     * @param status ICU error code.
   1745     * @stable ICU 53
   1746     */
   1747    static MeasureUnit *createMinute(UErrorCode &status);
   1748 
   1749    /**
   1750     * Returns by value, unit of duration: minute.
   1751     * Also see {@link #createMinute()}.
   1752     * @stable ICU 64
   1753     */
   1754    static MeasureUnit getMinute();
   1755 
   1756    /**
   1757     * Returns by pointer, unit of duration: month.
   1758     * Caller owns returned value and must free it.
   1759     * Also see {@link #getMonth()}.
   1760     * @param status ICU error code.
   1761     * @stable ICU 53
   1762     */
   1763    static MeasureUnit *createMonth(UErrorCode &status);
   1764 
   1765    /**
   1766     * Returns by value, unit of duration: month.
   1767     * Also see {@link #createMonth()}.
   1768     * @stable ICU 64
   1769     */
   1770    static MeasureUnit getMonth();
   1771 
   1772    /**
   1773     * Returns by pointer, unit of duration: month-person.
   1774     * Caller owns returned value and must free it.
   1775     * Also see {@link #getMonthPerson()}.
   1776     * @param status ICU error code.
   1777     * @stable ICU 64
   1778     */
   1779    static MeasureUnit *createMonthPerson(UErrorCode &status);
   1780 
   1781    /**
   1782     * Returns by value, unit of duration: month-person.
   1783     * Also see {@link #createMonthPerson()}.
   1784     * @stable ICU 64
   1785     */
   1786    static MeasureUnit getMonthPerson();
   1787 
   1788    /**
   1789     * Returns by pointer, unit of duration: nanosecond.
   1790     * Caller owns returned value and must free it.
   1791     * Also see {@link #getNanosecond()}.
   1792     * @param status ICU error code.
   1793     * @stable ICU 54
   1794     */
   1795    static MeasureUnit *createNanosecond(UErrorCode &status);
   1796 
   1797    /**
   1798     * Returns by value, unit of duration: nanosecond.
   1799     * Also see {@link #createNanosecond()}.
   1800     * @stable ICU 64
   1801     */
   1802    static MeasureUnit getNanosecond();
   1803 
   1804    /**
   1805     * Returns by pointer, unit of duration: night.
   1806     * Caller owns returned value and must free it.
   1807     * Also see {@link #getNight()}.
   1808     * @param status ICU error code.
   1809     * @stable ICU 76
   1810     */
   1811    static MeasureUnit *createNight(UErrorCode &status);
   1812 
   1813    /**
   1814     * Returns by value, unit of duration: night.
   1815     * Also see {@link #createNight()}.
   1816     * @stable ICU 76
   1817     */
   1818    static MeasureUnit getNight();
   1819 
   1820    /**
   1821     * Returns by pointer, unit of duration: quarter.
   1822     * Caller owns returned value and must free it.
   1823     * Also see {@link #getQuarter()}.
   1824     * @param status ICU error code.
   1825     * @stable ICU 72
   1826     */
   1827    static MeasureUnit *createQuarter(UErrorCode &status);
   1828 
   1829    /**
   1830     * Returns by value, unit of duration: quarter.
   1831     * Also see {@link #createQuarter()}.
   1832     * @stable ICU 72
   1833     */
   1834    static MeasureUnit getQuarter();
   1835 
   1836    /**
   1837     * Returns by pointer, unit of duration: second.
   1838     * Caller owns returned value and must free it.
   1839     * Also see {@link #getSecond()}.
   1840     * @param status ICU error code.
   1841     * @stable ICU 53
   1842     */
   1843    static MeasureUnit *createSecond(UErrorCode &status);
   1844 
   1845    /**
   1846     * Returns by value, unit of duration: second.
   1847     * Also see {@link #createSecond()}.
   1848     * @stable ICU 64
   1849     */
   1850    static MeasureUnit getSecond();
   1851 
   1852    /**
   1853     * Returns by pointer, unit of duration: week.
   1854     * Caller owns returned value and must free it.
   1855     * Also see {@link #getWeek()}.
   1856     * @param status ICU error code.
   1857     * @stable ICU 53
   1858     */
   1859    static MeasureUnit *createWeek(UErrorCode &status);
   1860 
   1861    /**
   1862     * Returns by value, unit of duration: week.
   1863     * Also see {@link #createWeek()}.
   1864     * @stable ICU 64
   1865     */
   1866    static MeasureUnit getWeek();
   1867 
   1868    /**
   1869     * Returns by pointer, unit of duration: week-person.
   1870     * Caller owns returned value and must free it.
   1871     * Also see {@link #getWeekPerson()}.
   1872     * @param status ICU error code.
   1873     * @stable ICU 64
   1874     */
   1875    static MeasureUnit *createWeekPerson(UErrorCode &status);
   1876 
   1877    /**
   1878     * Returns by value, unit of duration: week-person.
   1879     * Also see {@link #createWeekPerson()}.
   1880     * @stable ICU 64
   1881     */
   1882    static MeasureUnit getWeekPerson();
   1883 
   1884    /**
   1885     * Returns by pointer, unit of duration: year.
   1886     * Caller owns returned value and must free it.
   1887     * Also see {@link #getYear()}.
   1888     * @param status ICU error code.
   1889     * @stable ICU 53
   1890     */
   1891    static MeasureUnit *createYear(UErrorCode &status);
   1892 
   1893    /**
   1894     * Returns by value, unit of duration: year.
   1895     * Also see {@link #createYear()}.
   1896     * @stable ICU 64
   1897     */
   1898    static MeasureUnit getYear();
   1899 
   1900    /**
   1901     * Returns by pointer, unit of duration: year-person.
   1902     * Caller owns returned value and must free it.
   1903     * Also see {@link #getYearPerson()}.
   1904     * @param status ICU error code.
   1905     * @stable ICU 64
   1906     */
   1907    static MeasureUnit *createYearPerson(UErrorCode &status);
   1908 
   1909    /**
   1910     * Returns by value, unit of duration: year-person.
   1911     * Also see {@link #createYearPerson()}.
   1912     * @stable ICU 64
   1913     */
   1914    static MeasureUnit getYearPerson();
   1915 
   1916    /**
   1917     * Returns by pointer, unit of electric: ampere.
   1918     * Caller owns returned value and must free it.
   1919     * Also see {@link #getAmpere()}.
   1920     * @param status ICU error code.
   1921     * @stable ICU 54
   1922     */
   1923    static MeasureUnit *createAmpere(UErrorCode &status);
   1924 
   1925    /**
   1926     * Returns by value, unit of electric: ampere.
   1927     * Also see {@link #createAmpere()}.
   1928     * @stable ICU 64
   1929     */
   1930    static MeasureUnit getAmpere();
   1931 
   1932 #ifndef U_HIDE_DRAFT_API
   1933    /**
   1934     * Returns by pointer, unit of electric: coulomb.
   1935     * Caller owns returned value and must free it.
   1936     * Also see {@link #getCoulomb()}.
   1937     * @param status ICU error code.
   1938     * @draft ICU 78
   1939     */
   1940    static MeasureUnit *createCoulomb(UErrorCode &status);
   1941 
   1942    /**
   1943     * Returns by value, unit of electric: coulomb.
   1944     * Also see {@link #createCoulomb()}.
   1945     * @draft ICU 78
   1946     */
   1947    static MeasureUnit getCoulomb();
   1948 #endif /* U_HIDE_DRAFT_API */
   1949 
   1950 #ifndef U_HIDE_DRAFT_API
   1951    /**
   1952     * Returns by pointer, unit of electric: farad.
   1953     * Caller owns returned value and must free it.
   1954     * Also see {@link #getFarad()}.
   1955     * @param status ICU error code.
   1956     * @draft ICU 78
   1957     */
   1958    static MeasureUnit *createFarad(UErrorCode &status);
   1959 
   1960    /**
   1961     * Returns by value, unit of electric: farad.
   1962     * Also see {@link #createFarad()}.
   1963     * @draft ICU 78
   1964     */
   1965    static MeasureUnit getFarad();
   1966 #endif /* U_HIDE_DRAFT_API */
   1967 
   1968 #ifndef U_HIDE_DRAFT_API
   1969    /**
   1970     * Returns by pointer, unit of electric: henry.
   1971     * Caller owns returned value and must free it.
   1972     * Also see {@link #getHenry()}.
   1973     * @param status ICU error code.
   1974     * @draft ICU 78
   1975     */
   1976    static MeasureUnit *createHenry(UErrorCode &status);
   1977 
   1978    /**
   1979     * Returns by value, unit of electric: henry.
   1980     * Also see {@link #createHenry()}.
   1981     * @draft ICU 78
   1982     */
   1983    static MeasureUnit getHenry();
   1984 #endif /* U_HIDE_DRAFT_API */
   1985 
   1986    /**
   1987     * Returns by pointer, unit of electric: milliampere.
   1988     * Caller owns returned value and must free it.
   1989     * Also see {@link #getMilliampere()}.
   1990     * @param status ICU error code.
   1991     * @stable ICU 54
   1992     */
   1993    static MeasureUnit *createMilliampere(UErrorCode &status);
   1994 
   1995    /**
   1996     * Returns by value, unit of electric: milliampere.
   1997     * Also see {@link #createMilliampere()}.
   1998     * @stable ICU 64
   1999     */
   2000    static MeasureUnit getMilliampere();
   2001 
   2002    /**
   2003     * Returns by pointer, unit of electric: ohm.
   2004     * Caller owns returned value and must free it.
   2005     * Also see {@link #getOhm()}.
   2006     * @param status ICU error code.
   2007     * @stable ICU 54
   2008     */
   2009    static MeasureUnit *createOhm(UErrorCode &status);
   2010 
   2011    /**
   2012     * Returns by value, unit of electric: ohm.
   2013     * Also see {@link #createOhm()}.
   2014     * @stable ICU 64
   2015     */
   2016    static MeasureUnit getOhm();
   2017 
   2018 #ifndef U_HIDE_DRAFT_API
   2019    /**
   2020     * Returns by pointer, unit of electric: siemens.
   2021     * Caller owns returned value and must free it.
   2022     * Also see {@link #getSiemens()}.
   2023     * @param status ICU error code.
   2024     * @draft ICU 78
   2025     */
   2026    static MeasureUnit *createSiemens(UErrorCode &status);
   2027 
   2028    /**
   2029     * Returns by value, unit of electric: siemens.
   2030     * Also see {@link #createSiemens()}.
   2031     * @draft ICU 78
   2032     */
   2033    static MeasureUnit getSiemens();
   2034 #endif /* U_HIDE_DRAFT_API */
   2035 
   2036    /**
   2037     * Returns by pointer, unit of electric: volt.
   2038     * Caller owns returned value and must free it.
   2039     * Also see {@link #getVolt()}.
   2040     * @param status ICU error code.
   2041     * @stable ICU 54
   2042     */
   2043    static MeasureUnit *createVolt(UErrorCode &status);
   2044 
   2045    /**
   2046     * Returns by value, unit of electric: volt.
   2047     * Also see {@link #createVolt()}.
   2048     * @stable ICU 64
   2049     */
   2050    static MeasureUnit getVolt();
   2051 
   2052 #ifndef U_HIDE_DRAFT_API
   2053    /**
   2054     * Returns by pointer, unit of energy: becquerel.
   2055     * Caller owns returned value and must free it.
   2056     * Also see {@link #getBecquerel()}.
   2057     * @param status ICU error code.
   2058     * @draft ICU 78
   2059     */
   2060    static MeasureUnit *createBecquerel(UErrorCode &status);
   2061 
   2062    /**
   2063     * Returns by value, unit of energy: becquerel.
   2064     * Also see {@link #createBecquerel()}.
   2065     * @draft ICU 78
   2066     */
   2067    static MeasureUnit getBecquerel();
   2068 #endif /* U_HIDE_DRAFT_API */
   2069 
   2070    /**
   2071     * Returns by pointer, unit of energy: british-thermal-unit.
   2072     * Caller owns returned value and must free it.
   2073     * Also see {@link #getBritishThermalUnit()}.
   2074     * @param status ICU error code.
   2075     * @stable ICU 64
   2076     */
   2077    static MeasureUnit *createBritishThermalUnit(UErrorCode &status);
   2078 
   2079    /**
   2080     * Returns by value, unit of energy: british-thermal-unit.
   2081     * Also see {@link #createBritishThermalUnit()}.
   2082     * @stable ICU 64
   2083     */
   2084    static MeasureUnit getBritishThermalUnit();
   2085 
   2086 #ifndef U_HIDE_DRAFT_API
   2087    /**
   2088     * Returns by pointer, unit of energy: british-thermal-unit-it.
   2089     * Caller owns returned value and must free it.
   2090     * Also see {@link #getBritishThermalUnitIt()}.
   2091     * @param status ICU error code.
   2092     * @draft ICU 78
   2093     */
   2094    static MeasureUnit *createBritishThermalUnitIt(UErrorCode &status);
   2095 
   2096    /**
   2097     * Returns by value, unit of energy: british-thermal-unit-it.
   2098     * Also see {@link #createBritishThermalUnitIt()}.
   2099     * @draft ICU 78
   2100     */
   2101    static MeasureUnit getBritishThermalUnitIt();
   2102 #endif /* U_HIDE_DRAFT_API */
   2103 
   2104    /**
   2105     * Returns by pointer, unit of energy: calorie.
   2106     * Caller owns returned value and must free it.
   2107     * Also see {@link #getCalorie()}.
   2108     * @param status ICU error code.
   2109     * @stable ICU 54
   2110     */
   2111    static MeasureUnit *createCalorie(UErrorCode &status);
   2112 
   2113    /**
   2114     * Returns by value, unit of energy: calorie.
   2115     * Also see {@link #createCalorie()}.
   2116     * @stable ICU 64
   2117     */
   2118    static MeasureUnit getCalorie();
   2119 
   2120 #ifndef U_HIDE_DRAFT_API
   2121    /**
   2122     * Returns by pointer, unit of energy: calorie-it.
   2123     * Caller owns returned value and must free it.
   2124     * Also see {@link #getCalorieIt()}.
   2125     * @param status ICU error code.
   2126     * @draft ICU 78
   2127     */
   2128    static MeasureUnit *createCalorieIt(UErrorCode &status);
   2129 
   2130    /**
   2131     * Returns by value, unit of energy: calorie-it.
   2132     * Also see {@link #createCalorieIt()}.
   2133     * @draft ICU 78
   2134     */
   2135    static MeasureUnit getCalorieIt();
   2136 #endif /* U_HIDE_DRAFT_API */
   2137 
   2138    /**
   2139     * Returns by pointer, unit of energy: electronvolt.
   2140     * Caller owns returned value and must free it.
   2141     * Also see {@link #getElectronvolt()}.
   2142     * @param status ICU error code.
   2143     * @stable ICU 64
   2144     */
   2145    static MeasureUnit *createElectronvolt(UErrorCode &status);
   2146 
   2147    /**
   2148     * Returns by value, unit of energy: electronvolt.
   2149     * Also see {@link #createElectronvolt()}.
   2150     * @stable ICU 64
   2151     */
   2152    static MeasureUnit getElectronvolt();
   2153 
   2154    /**
   2155     * Returns by pointer, unit of energy: foodcalorie.
   2156     * Caller owns returned value and must free it.
   2157     * Also see {@link #getFoodcalorie()}.
   2158     * @param status ICU error code.
   2159     * @stable ICU 54
   2160     */
   2161    static MeasureUnit *createFoodcalorie(UErrorCode &status);
   2162 
   2163    /**
   2164     * Returns by value, unit of energy: foodcalorie.
   2165     * Also see {@link #createFoodcalorie()}.
   2166     * @stable ICU 64
   2167     */
   2168    static MeasureUnit getFoodcalorie();
   2169 
   2170 #ifndef U_HIDE_DRAFT_API
   2171    /**
   2172     * Returns by pointer, unit of energy: gray.
   2173     * Caller owns returned value and must free it.
   2174     * Also see {@link #getGray()}.
   2175     * @param status ICU error code.
   2176     * @draft ICU 78
   2177     */
   2178    static MeasureUnit *createGray(UErrorCode &status);
   2179 
   2180    /**
   2181     * Returns by value, unit of energy: gray.
   2182     * Also see {@link #createGray()}.
   2183     * @draft ICU 78
   2184     */
   2185    static MeasureUnit getGray();
   2186 #endif /* U_HIDE_DRAFT_API */
   2187 
   2188    /**
   2189     * Returns by pointer, unit of energy: joule.
   2190     * Caller owns returned value and must free it.
   2191     * Also see {@link #getJoule()}.
   2192     * @param status ICU error code.
   2193     * @stable ICU 54
   2194     */
   2195    static MeasureUnit *createJoule(UErrorCode &status);
   2196 
   2197    /**
   2198     * Returns by value, unit of energy: joule.
   2199     * Also see {@link #createJoule()}.
   2200     * @stable ICU 64
   2201     */
   2202    static MeasureUnit getJoule();
   2203 
   2204    /**
   2205     * Returns by pointer, unit of energy: kilocalorie.
   2206     * Caller owns returned value and must free it.
   2207     * Also see {@link #getKilocalorie()}.
   2208     * @param status ICU error code.
   2209     * @stable ICU 54
   2210     */
   2211    static MeasureUnit *createKilocalorie(UErrorCode &status);
   2212 
   2213    /**
   2214     * Returns by value, unit of energy: kilocalorie.
   2215     * Also see {@link #createKilocalorie()}.
   2216     * @stable ICU 64
   2217     */
   2218    static MeasureUnit getKilocalorie();
   2219 
   2220    /**
   2221     * Returns by pointer, unit of energy: kilojoule.
   2222     * Caller owns returned value and must free it.
   2223     * Also see {@link #getKilojoule()}.
   2224     * @param status ICU error code.
   2225     * @stable ICU 54
   2226     */
   2227    static MeasureUnit *createKilojoule(UErrorCode &status);
   2228 
   2229    /**
   2230     * Returns by value, unit of energy: kilojoule.
   2231     * Also see {@link #createKilojoule()}.
   2232     * @stable ICU 64
   2233     */
   2234    static MeasureUnit getKilojoule();
   2235 
   2236    /**
   2237     * Returns by pointer, unit of energy: kilowatt-hour.
   2238     * Caller owns returned value and must free it.
   2239     * Also see {@link #getKilowattHour()}.
   2240     * @param status ICU error code.
   2241     * @stable ICU 54
   2242     */
   2243    static MeasureUnit *createKilowattHour(UErrorCode &status);
   2244 
   2245    /**
   2246     * Returns by value, unit of energy: kilowatt-hour.
   2247     * Also see {@link #createKilowattHour()}.
   2248     * @stable ICU 64
   2249     */
   2250    static MeasureUnit getKilowattHour();
   2251 
   2252 #ifndef U_HIDE_DRAFT_API
   2253    /**
   2254     * Returns by pointer, unit of energy: sievert.
   2255     * Caller owns returned value and must free it.
   2256     * Also see {@link #getSievert()}.
   2257     * @param status ICU error code.
   2258     * @draft ICU 78
   2259     */
   2260    static MeasureUnit *createSievert(UErrorCode &status);
   2261 
   2262    /**
   2263     * Returns by value, unit of energy: sievert.
   2264     * Also see {@link #createSievert()}.
   2265     * @draft ICU 78
   2266     */
   2267    static MeasureUnit getSievert();
   2268 #endif /* U_HIDE_DRAFT_API */
   2269 
   2270    /**
   2271     * Returns by pointer, unit of energy: therm-us.
   2272     * Caller owns returned value and must free it.
   2273     * Also see {@link #getThermUs()}.
   2274     * @param status ICU error code.
   2275     * @stable ICU 65
   2276     */
   2277    static MeasureUnit *createThermUs(UErrorCode &status);
   2278 
   2279    /**
   2280     * Returns by value, unit of energy: therm-us.
   2281     * Also see {@link #createThermUs()}.
   2282     * @stable ICU 65
   2283     */
   2284    static MeasureUnit getThermUs();
   2285 
   2286 #ifndef U_HIDE_DRAFT_API
   2287    /**
   2288     * Returns by pointer, unit of force: kilogram-force.
   2289     * Caller owns returned value and must free it.
   2290     * Also see {@link #getKilogramForce()}.
   2291     * @param status ICU error code.
   2292     * @draft ICU 78
   2293     */
   2294    static MeasureUnit *createKilogramForce(UErrorCode &status);
   2295 
   2296    /**
   2297     * Returns by value, unit of force: kilogram-force.
   2298     * Also see {@link #createKilogramForce()}.
   2299     * @draft ICU 78
   2300     */
   2301    static MeasureUnit getKilogramForce();
   2302 #endif /* U_HIDE_DRAFT_API */
   2303 
   2304    /**
   2305     * Returns by pointer, unit of force: kilowatt-hour-per-100-kilometer.
   2306     * Caller owns returned value and must free it.
   2307     * Also see {@link #getKilowattHourPer100Kilometer()}.
   2308     * @param status ICU error code.
   2309     * @stable ICU 70
   2310     */
   2311    static MeasureUnit *createKilowattHourPer100Kilometer(UErrorCode &status);
   2312 
   2313    /**
   2314     * Returns by value, unit of force: kilowatt-hour-per-100-kilometer.
   2315     * Also see {@link #createKilowattHourPer100Kilometer()}.
   2316     * @stable ICU 70
   2317     */
   2318    static MeasureUnit getKilowattHourPer100Kilometer();
   2319 
   2320    /**
   2321     * Returns by pointer, unit of force: newton.
   2322     * Caller owns returned value and must free it.
   2323     * Also see {@link #getNewton()}.
   2324     * @param status ICU error code.
   2325     * @stable ICU 64
   2326     */
   2327    static MeasureUnit *createNewton(UErrorCode &status);
   2328 
   2329    /**
   2330     * Returns by value, unit of force: newton.
   2331     * Also see {@link #createNewton()}.
   2332     * @stable ICU 64
   2333     */
   2334    static MeasureUnit getNewton();
   2335 
   2336    /**
   2337     * Returns by pointer, unit of force: pound-force.
   2338     * Caller owns returned value and must free it.
   2339     * Also see {@link #getPoundForce()}.
   2340     * @param status ICU error code.
   2341     * @stable ICU 64
   2342     */
   2343    static MeasureUnit *createPoundForce(UErrorCode &status);
   2344 
   2345    /**
   2346     * Returns by value, unit of force: pound-force.
   2347     * Also see {@link #createPoundForce()}.
   2348     * @stable ICU 64
   2349     */
   2350    static MeasureUnit getPoundForce();
   2351 
   2352    /**
   2353     * Returns by pointer, unit of frequency: gigahertz.
   2354     * Caller owns returned value and must free it.
   2355     * Also see {@link #getGigahertz()}.
   2356     * @param status ICU error code.
   2357     * @stable ICU 54
   2358     */
   2359    static MeasureUnit *createGigahertz(UErrorCode &status);
   2360 
   2361    /**
   2362     * Returns by value, unit of frequency: gigahertz.
   2363     * Also see {@link #createGigahertz()}.
   2364     * @stable ICU 64
   2365     */
   2366    static MeasureUnit getGigahertz();
   2367 
   2368    /**
   2369     * Returns by pointer, unit of frequency: hertz.
   2370     * Caller owns returned value and must free it.
   2371     * Also see {@link #getHertz()}.
   2372     * @param status ICU error code.
   2373     * @stable ICU 54
   2374     */
   2375    static MeasureUnit *createHertz(UErrorCode &status);
   2376 
   2377    /**
   2378     * Returns by value, unit of frequency: hertz.
   2379     * Also see {@link #createHertz()}.
   2380     * @stable ICU 64
   2381     */
   2382    static MeasureUnit getHertz();
   2383 
   2384    /**
   2385     * Returns by pointer, unit of frequency: kilohertz.
   2386     * Caller owns returned value and must free it.
   2387     * Also see {@link #getKilohertz()}.
   2388     * @param status ICU error code.
   2389     * @stable ICU 54
   2390     */
   2391    static MeasureUnit *createKilohertz(UErrorCode &status);
   2392 
   2393    /**
   2394     * Returns by value, unit of frequency: kilohertz.
   2395     * Also see {@link #createKilohertz()}.
   2396     * @stable ICU 64
   2397     */
   2398    static MeasureUnit getKilohertz();
   2399 
   2400    /**
   2401     * Returns by pointer, unit of frequency: megahertz.
   2402     * Caller owns returned value and must free it.
   2403     * Also see {@link #getMegahertz()}.
   2404     * @param status ICU error code.
   2405     * @stable ICU 54
   2406     */
   2407    static MeasureUnit *createMegahertz(UErrorCode &status);
   2408 
   2409    /**
   2410     * Returns by value, unit of frequency: megahertz.
   2411     * Also see {@link #createMegahertz()}.
   2412     * @stable ICU 64
   2413     */
   2414    static MeasureUnit getMegahertz();
   2415 
   2416    /**
   2417     * Returns by pointer, unit of graphics: dot.
   2418     * Caller owns returned value and must free it.
   2419     * Also see {@link #getDot()}.
   2420     * @param status ICU error code.
   2421     * @stable ICU 68
   2422     */
   2423    static MeasureUnit *createDot(UErrorCode &status);
   2424 
   2425    /**
   2426     * Returns by value, unit of graphics: dot.
   2427     * Also see {@link #createDot()}.
   2428     * @stable ICU 68
   2429     */
   2430    static MeasureUnit getDot();
   2431 
   2432    /**
   2433     * Returns by pointer, unit of graphics: dot-per-centimeter.
   2434     * Caller owns returned value and must free it.
   2435     * Also see {@link #getDotPerCentimeter()}.
   2436     * @param status ICU error code.
   2437     * @stable ICU 65
   2438     */
   2439    static MeasureUnit *createDotPerCentimeter(UErrorCode &status);
   2440 
   2441    /**
   2442     * Returns by value, unit of graphics: dot-per-centimeter.
   2443     * Also see {@link #createDotPerCentimeter()}.
   2444     * @stable ICU 65
   2445     */
   2446    static MeasureUnit getDotPerCentimeter();
   2447 
   2448    /**
   2449     * Returns by pointer, unit of graphics: dot-per-inch.
   2450     * Caller owns returned value and must free it.
   2451     * Also see {@link #getDotPerInch()}.
   2452     * @param status ICU error code.
   2453     * @stable ICU 65
   2454     */
   2455    static MeasureUnit *createDotPerInch(UErrorCode &status);
   2456 
   2457    /**
   2458     * Returns by value, unit of graphics: dot-per-inch.
   2459     * Also see {@link #createDotPerInch()}.
   2460     * @stable ICU 65
   2461     */
   2462    static MeasureUnit getDotPerInch();
   2463 
   2464    /**
   2465     * Returns by pointer, unit of graphics: em.
   2466     * Caller owns returned value and must free it.
   2467     * Also see {@link #getEm()}.
   2468     * @param status ICU error code.
   2469     * @stable ICU 65
   2470     */
   2471    static MeasureUnit *createEm(UErrorCode &status);
   2472 
   2473    /**
   2474     * Returns by value, unit of graphics: em.
   2475     * Also see {@link #createEm()}.
   2476     * @stable ICU 65
   2477     */
   2478    static MeasureUnit getEm();
   2479 
   2480    /**
   2481     * Returns by pointer, unit of graphics: megapixel.
   2482     * Caller owns returned value and must free it.
   2483     * Also see {@link #getMegapixel()}.
   2484     * @param status ICU error code.
   2485     * @stable ICU 65
   2486     */
   2487    static MeasureUnit *createMegapixel(UErrorCode &status);
   2488 
   2489    /**
   2490     * Returns by value, unit of graphics: megapixel.
   2491     * Also see {@link #createMegapixel()}.
   2492     * @stable ICU 65
   2493     */
   2494    static MeasureUnit getMegapixel();
   2495 
   2496    /**
   2497     * Returns by pointer, unit of graphics: pixel.
   2498     * Caller owns returned value and must free it.
   2499     * Also see {@link #getPixel()}.
   2500     * @param status ICU error code.
   2501     * @stable ICU 65
   2502     */
   2503    static MeasureUnit *createPixel(UErrorCode &status);
   2504 
   2505    /**
   2506     * Returns by value, unit of graphics: pixel.
   2507     * Also see {@link #createPixel()}.
   2508     * @stable ICU 65
   2509     */
   2510    static MeasureUnit getPixel();
   2511 
   2512    /**
   2513     * Returns by pointer, unit of graphics: pixel-per-centimeter.
   2514     * Caller owns returned value and must free it.
   2515     * Also see {@link #getPixelPerCentimeter()}.
   2516     * @param status ICU error code.
   2517     * @stable ICU 65
   2518     */
   2519    static MeasureUnit *createPixelPerCentimeter(UErrorCode &status);
   2520 
   2521    /**
   2522     * Returns by value, unit of graphics: pixel-per-centimeter.
   2523     * Also see {@link #createPixelPerCentimeter()}.
   2524     * @stable ICU 65
   2525     */
   2526    static MeasureUnit getPixelPerCentimeter();
   2527 
   2528    /**
   2529     * Returns by pointer, unit of graphics: pixel-per-inch.
   2530     * Caller owns returned value and must free it.
   2531     * Also see {@link #getPixelPerInch()}.
   2532     * @param status ICU error code.
   2533     * @stable ICU 65
   2534     */
   2535    static MeasureUnit *createPixelPerInch(UErrorCode &status);
   2536 
   2537    /**
   2538     * Returns by value, unit of graphics: pixel-per-inch.
   2539     * Also see {@link #createPixelPerInch()}.
   2540     * @stable ICU 65
   2541     */
   2542    static MeasureUnit getPixelPerInch();
   2543 
   2544    /**
   2545     * Returns by pointer, unit of length: astronomical-unit.
   2546     * Caller owns returned value and must free it.
   2547     * Also see {@link #getAstronomicalUnit()}.
   2548     * @param status ICU error code.
   2549     * @stable ICU 54
   2550     */
   2551    static MeasureUnit *createAstronomicalUnit(UErrorCode &status);
   2552 
   2553    /**
   2554     * Returns by value, unit of length: astronomical-unit.
   2555     * Also see {@link #createAstronomicalUnit()}.
   2556     * @stable ICU 64
   2557     */
   2558    static MeasureUnit getAstronomicalUnit();
   2559 
   2560    /**
   2561     * Returns by pointer, unit of length: centimeter.
   2562     * Caller owns returned value and must free it.
   2563     * Also see {@link #getCentimeter()}.
   2564     * @param status ICU error code.
   2565     * @stable ICU 53
   2566     */
   2567    static MeasureUnit *createCentimeter(UErrorCode &status);
   2568 
   2569    /**
   2570     * Returns by value, unit of length: centimeter.
   2571     * Also see {@link #createCentimeter()}.
   2572     * @stable ICU 64
   2573     */
   2574    static MeasureUnit getCentimeter();
   2575 
   2576 #ifndef U_HIDE_DRAFT_API
   2577    /**
   2578     * Returns by pointer, unit of length: chain.
   2579     * Caller owns returned value and must free it.
   2580     * Also see {@link #getChain()}.
   2581     * @param status ICU error code.
   2582     * @draft ICU 78
   2583     */
   2584    static MeasureUnit *createChain(UErrorCode &status);
   2585 
   2586    /**
   2587     * Returns by value, unit of length: chain.
   2588     * Also see {@link #createChain()}.
   2589     * @draft ICU 78
   2590     */
   2591    static MeasureUnit getChain();
   2592 #endif /* U_HIDE_DRAFT_API */
   2593 
   2594    /**
   2595     * Returns by pointer, unit of length: decimeter.
   2596     * Caller owns returned value and must free it.
   2597     * Also see {@link #getDecimeter()}.
   2598     * @param status ICU error code.
   2599     * @stable ICU 54
   2600     */
   2601    static MeasureUnit *createDecimeter(UErrorCode &status);
   2602 
   2603    /**
   2604     * Returns by value, unit of length: decimeter.
   2605     * Also see {@link #createDecimeter()}.
   2606     * @stable ICU 64
   2607     */
   2608    static MeasureUnit getDecimeter();
   2609 
   2610    /**
   2611     * Returns by pointer, unit of length: earth-radius.
   2612     * Caller owns returned value and must free it.
   2613     * Also see {@link #getEarthRadius()}.
   2614     * @param status ICU error code.
   2615     * @stable ICU 68
   2616     */
   2617    static MeasureUnit *createEarthRadius(UErrorCode &status);
   2618 
   2619    /**
   2620     * Returns by value, unit of length: earth-radius.
   2621     * Also see {@link #createEarthRadius()}.
   2622     * @stable ICU 68
   2623     */
   2624    static MeasureUnit getEarthRadius();
   2625 
   2626    /**
   2627     * Returns by pointer, unit of length: fathom.
   2628     * Caller owns returned value and must free it.
   2629     * Also see {@link #getFathom()}.
   2630     * @param status ICU error code.
   2631     * @stable ICU 54
   2632     */
   2633    static MeasureUnit *createFathom(UErrorCode &status);
   2634 
   2635    /**
   2636     * Returns by value, unit of length: fathom.
   2637     * Also see {@link #createFathom()}.
   2638     * @stable ICU 64
   2639     */
   2640    static MeasureUnit getFathom();
   2641 
   2642    /**
   2643     * Returns by pointer, unit of length: foot.
   2644     * Caller owns returned value and must free it.
   2645     * Also see {@link #getFoot()}.
   2646     * @param status ICU error code.
   2647     * @stable ICU 53
   2648     */
   2649    static MeasureUnit *createFoot(UErrorCode &status);
   2650 
   2651    /**
   2652     * Returns by value, unit of length: foot.
   2653     * Also see {@link #createFoot()}.
   2654     * @stable ICU 64
   2655     */
   2656    static MeasureUnit getFoot();
   2657 
   2658    /**
   2659     * Returns by pointer, unit of length: furlong.
   2660     * Caller owns returned value and must free it.
   2661     * Also see {@link #getFurlong()}.
   2662     * @param status ICU error code.
   2663     * @stable ICU 54
   2664     */
   2665    static MeasureUnit *createFurlong(UErrorCode &status);
   2666 
   2667    /**
   2668     * Returns by value, unit of length: furlong.
   2669     * Also see {@link #createFurlong()}.
   2670     * @stable ICU 64
   2671     */
   2672    static MeasureUnit getFurlong();
   2673 
   2674    /**
   2675     * Returns by pointer, unit of length: inch.
   2676     * Caller owns returned value and must free it.
   2677     * Also see {@link #getInch()}.
   2678     * @param status ICU error code.
   2679     * @stable ICU 53
   2680     */
   2681    static MeasureUnit *createInch(UErrorCode &status);
   2682 
   2683    /**
   2684     * Returns by value, unit of length: inch.
   2685     * Also see {@link #createInch()}.
   2686     * @stable ICU 64
   2687     */
   2688    static MeasureUnit getInch();
   2689 
   2690 #ifndef U_HIDE_DRAFT_API
   2691    /**
   2692     * Returns by pointer, unit of length: jo-jp.
   2693     * Caller owns returned value and must free it.
   2694     * Also see {@link #getJoJp()}.
   2695     * @param status ICU error code.
   2696     * @draft ICU 78
   2697     */
   2698    static MeasureUnit *createJoJp(UErrorCode &status);
   2699 
   2700    /**
   2701     * Returns by value, unit of length: jo-jp.
   2702     * Also see {@link #createJoJp()}.
   2703     * @draft ICU 78
   2704     */
   2705    static MeasureUnit getJoJp();
   2706 #endif /* U_HIDE_DRAFT_API */
   2707 
   2708 #ifndef U_HIDE_DRAFT_API
   2709    /**
   2710     * Returns by pointer, unit of length: ken.
   2711     * Caller owns returned value and must free it.
   2712     * Also see {@link #getKen()}.
   2713     * @param status ICU error code.
   2714     * @draft ICU 78
   2715     */
   2716    static MeasureUnit *createKen(UErrorCode &status);
   2717 
   2718    /**
   2719     * Returns by value, unit of length: ken.
   2720     * Also see {@link #createKen()}.
   2721     * @draft ICU 78
   2722     */
   2723    static MeasureUnit getKen();
   2724 #endif /* U_HIDE_DRAFT_API */
   2725 
   2726    /**
   2727     * Returns by pointer, unit of length: kilometer.
   2728     * Caller owns returned value and must free it.
   2729     * Also see {@link #getKilometer()}.
   2730     * @param status ICU error code.
   2731     * @stable ICU 53
   2732     */
   2733    static MeasureUnit *createKilometer(UErrorCode &status);
   2734 
   2735    /**
   2736     * Returns by value, unit of length: kilometer.
   2737     * Also see {@link #createKilometer()}.
   2738     * @stable ICU 64
   2739     */
   2740    static MeasureUnit getKilometer();
   2741 
   2742    /**
   2743     * Returns by pointer, unit of length: light-year.
   2744     * Caller owns returned value and must free it.
   2745     * Also see {@link #getLightYear()}.
   2746     * @param status ICU error code.
   2747     * @stable ICU 53
   2748     */
   2749    static MeasureUnit *createLightYear(UErrorCode &status);
   2750 
   2751    /**
   2752     * Returns by value, unit of length: light-year.
   2753     * Also see {@link #createLightYear()}.
   2754     * @stable ICU 64
   2755     */
   2756    static MeasureUnit getLightYear();
   2757 
   2758    /**
   2759     * Returns by pointer, unit of length: meter.
   2760     * Caller owns returned value and must free it.
   2761     * Also see {@link #getMeter()}.
   2762     * @param status ICU error code.
   2763     * @stable ICU 53
   2764     */
   2765    static MeasureUnit *createMeter(UErrorCode &status);
   2766 
   2767    /**
   2768     * Returns by value, unit of length: meter.
   2769     * Also see {@link #createMeter()}.
   2770     * @stable ICU 64
   2771     */
   2772    static MeasureUnit getMeter();
   2773 
   2774    /**
   2775     * Returns by pointer, unit of length: micrometer.
   2776     * Caller owns returned value and must free it.
   2777     * Also see {@link #getMicrometer()}.
   2778     * @param status ICU error code.
   2779     * @stable ICU 54
   2780     */
   2781    static MeasureUnit *createMicrometer(UErrorCode &status);
   2782 
   2783    /**
   2784     * Returns by value, unit of length: micrometer.
   2785     * Also see {@link #createMicrometer()}.
   2786     * @stable ICU 64
   2787     */
   2788    static MeasureUnit getMicrometer();
   2789 
   2790    /**
   2791     * Returns by pointer, unit of length: mile.
   2792     * Caller owns returned value and must free it.
   2793     * Also see {@link #getMile()}.
   2794     * @param status ICU error code.
   2795     * @stable ICU 53
   2796     */
   2797    static MeasureUnit *createMile(UErrorCode &status);
   2798 
   2799    /**
   2800     * Returns by value, unit of length: mile.
   2801     * Also see {@link #createMile()}.
   2802     * @stable ICU 64
   2803     */
   2804    static MeasureUnit getMile();
   2805 
   2806    /**
   2807     * Returns by pointer, unit of length: mile-scandinavian.
   2808     * Caller owns returned value and must free it.
   2809     * Also see {@link #getMileScandinavian()}.
   2810     * @param status ICU error code.
   2811     * @stable ICU 56
   2812     */
   2813    static MeasureUnit *createMileScandinavian(UErrorCode &status);
   2814 
   2815    /**
   2816     * Returns by value, unit of length: mile-scandinavian.
   2817     * Also see {@link #createMileScandinavian()}.
   2818     * @stable ICU 64
   2819     */
   2820    static MeasureUnit getMileScandinavian();
   2821 
   2822    /**
   2823     * Returns by pointer, unit of length: millimeter.
   2824     * Caller owns returned value and must free it.
   2825     * Also see {@link #getMillimeter()}.
   2826     * @param status ICU error code.
   2827     * @stable ICU 53
   2828     */
   2829    static MeasureUnit *createMillimeter(UErrorCode &status);
   2830 
   2831    /**
   2832     * Returns by value, unit of length: millimeter.
   2833     * Also see {@link #createMillimeter()}.
   2834     * @stable ICU 64
   2835     */
   2836    static MeasureUnit getMillimeter();
   2837 
   2838    /**
   2839     * Returns by pointer, unit of length: nanometer.
   2840     * Caller owns returned value and must free it.
   2841     * Also see {@link #getNanometer()}.
   2842     * @param status ICU error code.
   2843     * @stable ICU 54
   2844     */
   2845    static MeasureUnit *createNanometer(UErrorCode &status);
   2846 
   2847    /**
   2848     * Returns by value, unit of length: nanometer.
   2849     * Also see {@link #createNanometer()}.
   2850     * @stable ICU 64
   2851     */
   2852    static MeasureUnit getNanometer();
   2853 
   2854    /**
   2855     * Returns by pointer, unit of length: nautical-mile.
   2856     * Caller owns returned value and must free it.
   2857     * Also see {@link #getNauticalMile()}.
   2858     * @param status ICU error code.
   2859     * @stable ICU 54
   2860     */
   2861    static MeasureUnit *createNauticalMile(UErrorCode &status);
   2862 
   2863    /**
   2864     * Returns by value, unit of length: nautical-mile.
   2865     * Also see {@link #createNauticalMile()}.
   2866     * @stable ICU 64
   2867     */
   2868    static MeasureUnit getNauticalMile();
   2869 
   2870    /**
   2871     * Returns by pointer, unit of length: parsec.
   2872     * Caller owns returned value and must free it.
   2873     * Also see {@link #getParsec()}.
   2874     * @param status ICU error code.
   2875     * @stable ICU 54
   2876     */
   2877    static MeasureUnit *createParsec(UErrorCode &status);
   2878 
   2879    /**
   2880     * Returns by value, unit of length: parsec.
   2881     * Also see {@link #createParsec()}.
   2882     * @stable ICU 64
   2883     */
   2884    static MeasureUnit getParsec();
   2885 
   2886    /**
   2887     * Returns by pointer, unit of length: picometer.
   2888     * Caller owns returned value and must free it.
   2889     * Also see {@link #getPicometer()}.
   2890     * @param status ICU error code.
   2891     * @stable ICU 53
   2892     */
   2893    static MeasureUnit *createPicometer(UErrorCode &status);
   2894 
   2895    /**
   2896     * Returns by value, unit of length: picometer.
   2897     * Also see {@link #createPicometer()}.
   2898     * @stable ICU 64
   2899     */
   2900    static MeasureUnit getPicometer();
   2901 
   2902    /**
   2903     * Returns by pointer, unit of length: point.
   2904     * Caller owns returned value and must free it.
   2905     * Also see {@link #getPoint()}.
   2906     * @param status ICU error code.
   2907     * @stable ICU 59
   2908     */
   2909    static MeasureUnit *createPoint(UErrorCode &status);
   2910 
   2911    /**
   2912     * Returns by value, unit of length: point.
   2913     * Also see {@link #createPoint()}.
   2914     * @stable ICU 64
   2915     */
   2916    static MeasureUnit getPoint();
   2917 
   2918 #ifndef U_HIDE_DRAFT_API
   2919    /**
   2920     * Returns by pointer, unit of length: ri-jp.
   2921     * Caller owns returned value and must free it.
   2922     * Also see {@link #getRiJp()}.
   2923     * @param status ICU error code.
   2924     * @draft ICU 78
   2925     */
   2926    static MeasureUnit *createRiJp(UErrorCode &status);
   2927 
   2928    /**
   2929     * Returns by value, unit of length: ri-jp.
   2930     * Also see {@link #createRiJp()}.
   2931     * @draft ICU 78
   2932     */
   2933    static MeasureUnit getRiJp();
   2934 #endif /* U_HIDE_DRAFT_API */
   2935 
   2936 #ifndef U_HIDE_DRAFT_API
   2937    /**
   2938     * Returns by pointer, unit of length: rin.
   2939     * Caller owns returned value and must free it.
   2940     * Also see {@link #getRin()}.
   2941     * @param status ICU error code.
   2942     * @draft ICU 78
   2943     */
   2944    static MeasureUnit *createRin(UErrorCode &status);
   2945 
   2946    /**
   2947     * Returns by value, unit of length: rin.
   2948     * Also see {@link #createRin()}.
   2949     * @draft ICU 78
   2950     */
   2951    static MeasureUnit getRin();
   2952 #endif /* U_HIDE_DRAFT_API */
   2953 
   2954 #ifndef U_HIDE_DRAFT_API
   2955    /**
   2956     * Returns by pointer, unit of length: rod.
   2957     * Caller owns returned value and must free it.
   2958     * Also see {@link #getRod()}.
   2959     * @param status ICU error code.
   2960     * @draft ICU 78
   2961     */
   2962    static MeasureUnit *createRod(UErrorCode &status);
   2963 
   2964    /**
   2965     * Returns by value, unit of length: rod.
   2966     * Also see {@link #createRod()}.
   2967     * @draft ICU 78
   2968     */
   2969    static MeasureUnit getRod();
   2970 #endif /* U_HIDE_DRAFT_API */
   2971 
   2972 #ifndef U_HIDE_DRAFT_API
   2973    /**
   2974     * Returns by pointer, unit of length: shaku-cloth.
   2975     * Caller owns returned value and must free it.
   2976     * Also see {@link #getShakuCloth()}.
   2977     * @param status ICU error code.
   2978     * @draft ICU 78
   2979     */
   2980    static MeasureUnit *createShakuCloth(UErrorCode &status);
   2981 
   2982    /**
   2983     * Returns by value, unit of length: shaku-cloth.
   2984     * Also see {@link #createShakuCloth()}.
   2985     * @draft ICU 78
   2986     */
   2987    static MeasureUnit getShakuCloth();
   2988 #endif /* U_HIDE_DRAFT_API */
   2989 
   2990 #ifndef U_HIDE_DRAFT_API
   2991    /**
   2992     * Returns by pointer, unit of length: shaku-length.
   2993     * Caller owns returned value and must free it.
   2994     * Also see {@link #getShakuLength()}.
   2995     * @param status ICU error code.
   2996     * @draft ICU 78
   2997     */
   2998    static MeasureUnit *createShakuLength(UErrorCode &status);
   2999 
   3000    /**
   3001     * Returns by value, unit of length: shaku-length.
   3002     * Also see {@link #createShakuLength()}.
   3003     * @draft ICU 78
   3004     */
   3005    static MeasureUnit getShakuLength();
   3006 #endif /* U_HIDE_DRAFT_API */
   3007 
   3008    /**
   3009     * Returns by pointer, unit of length: solar-radius.
   3010     * Caller owns returned value and must free it.
   3011     * Also see {@link #getSolarRadius()}.
   3012     * @param status ICU error code.
   3013     * @stable ICU 64
   3014     */
   3015    static MeasureUnit *createSolarRadius(UErrorCode &status);
   3016 
   3017    /**
   3018     * Returns by value, unit of length: solar-radius.
   3019     * Also see {@link #createSolarRadius()}.
   3020     * @stable ICU 64
   3021     */
   3022    static MeasureUnit getSolarRadius();
   3023 
   3024 #ifndef U_HIDE_DRAFT_API
   3025    /**
   3026     * Returns by pointer, unit of length: sun.
   3027     * Caller owns returned value and must free it.
   3028     * Also see {@link #getSun()}.
   3029     * @param status ICU error code.
   3030     * @draft ICU 78
   3031     */
   3032    static MeasureUnit *createSun(UErrorCode &status);
   3033 
   3034    /**
   3035     * Returns by value, unit of length: sun.
   3036     * Also see {@link #createSun()}.
   3037     * @draft ICU 78
   3038     */
   3039    static MeasureUnit getSun();
   3040 #endif /* U_HIDE_DRAFT_API */
   3041 
   3042    /**
   3043     * Returns by pointer, unit of length: yard.
   3044     * Caller owns returned value and must free it.
   3045     * Also see {@link #getYard()}.
   3046     * @param status ICU error code.
   3047     * @stable ICU 53
   3048     */
   3049    static MeasureUnit *createYard(UErrorCode &status);
   3050 
   3051    /**
   3052     * Returns by value, unit of length: yard.
   3053     * Also see {@link #createYard()}.
   3054     * @stable ICU 64
   3055     */
   3056    static MeasureUnit getYard();
   3057 
   3058    /**
   3059     * Returns by pointer, unit of light: candela.
   3060     * Caller owns returned value and must free it.
   3061     * Also see {@link #getCandela()}.
   3062     * @param status ICU error code.
   3063     * @stable ICU 68
   3064     */
   3065    static MeasureUnit *createCandela(UErrorCode &status);
   3066 
   3067    /**
   3068     * Returns by value, unit of light: candela.
   3069     * Also see {@link #createCandela()}.
   3070     * @stable ICU 68
   3071     */
   3072    static MeasureUnit getCandela();
   3073 
   3074    /**
   3075     * Returns by pointer, unit of light: lumen.
   3076     * Caller owns returned value and must free it.
   3077     * Also see {@link #getLumen()}.
   3078     * @param status ICU error code.
   3079     * @stable ICU 68
   3080     */
   3081    static MeasureUnit *createLumen(UErrorCode &status);
   3082 
   3083    /**
   3084     * Returns by value, unit of light: lumen.
   3085     * Also see {@link #createLumen()}.
   3086     * @stable ICU 68
   3087     */
   3088    static MeasureUnit getLumen();
   3089 
   3090    /**
   3091     * Returns by pointer, unit of light: lux.
   3092     * Caller owns returned value and must free it.
   3093     * Also see {@link #getLux()}.
   3094     * @param status ICU error code.
   3095     * @stable ICU 54
   3096     */
   3097    static MeasureUnit *createLux(UErrorCode &status);
   3098 
   3099    /**
   3100     * Returns by value, unit of light: lux.
   3101     * Also see {@link #createLux()}.
   3102     * @stable ICU 64
   3103     */
   3104    static MeasureUnit getLux();
   3105 
   3106    /**
   3107     * Returns by pointer, unit of light: solar-luminosity.
   3108     * Caller owns returned value and must free it.
   3109     * Also see {@link #getSolarLuminosity()}.
   3110     * @param status ICU error code.
   3111     * @stable ICU 64
   3112     */
   3113    static MeasureUnit *createSolarLuminosity(UErrorCode &status);
   3114 
   3115    /**
   3116     * Returns by value, unit of light: solar-luminosity.
   3117     * Also see {@link #createSolarLuminosity()}.
   3118     * @stable ICU 64
   3119     */
   3120    static MeasureUnit getSolarLuminosity();
   3121 
   3122 #ifndef U_HIDE_DRAFT_API
   3123    /**
   3124     * Returns by pointer, unit of magnetic: tesla.
   3125     * Caller owns returned value and must free it.
   3126     * Also see {@link #getTesla()}.
   3127     * @param status ICU error code.
   3128     * @draft ICU 78
   3129     */
   3130    static MeasureUnit *createTesla(UErrorCode &status);
   3131 
   3132    /**
   3133     * Returns by value, unit of magnetic: tesla.
   3134     * Also see {@link #createTesla()}.
   3135     * @draft ICU 78
   3136     */
   3137    static MeasureUnit getTesla();
   3138 #endif /* U_HIDE_DRAFT_API */
   3139 
   3140 #ifndef U_HIDE_DRAFT_API
   3141    /**
   3142     * Returns by pointer, unit of magnetic: weber.
   3143     * Caller owns returned value and must free it.
   3144     * Also see {@link #getWeber()}.
   3145     * @param status ICU error code.
   3146     * @draft ICU 78
   3147     */
   3148    static MeasureUnit *createWeber(UErrorCode &status);
   3149 
   3150    /**
   3151     * Returns by value, unit of magnetic: weber.
   3152     * Also see {@link #createWeber()}.
   3153     * @draft ICU 78
   3154     */
   3155    static MeasureUnit getWeber();
   3156 #endif /* U_HIDE_DRAFT_API */
   3157 
   3158    /**
   3159     * Returns by pointer, unit of mass: carat.
   3160     * Caller owns returned value and must free it.
   3161     * Also see {@link #getCarat()}.
   3162     * @param status ICU error code.
   3163     * @stable ICU 54
   3164     */
   3165    static MeasureUnit *createCarat(UErrorCode &status);
   3166 
   3167    /**
   3168     * Returns by value, unit of mass: carat.
   3169     * Also see {@link #createCarat()}.
   3170     * @stable ICU 64
   3171     */
   3172    static MeasureUnit getCarat();
   3173 
   3174    /**
   3175     * Returns by pointer, unit of mass: dalton.
   3176     * Caller owns returned value and must free it.
   3177     * Also see {@link #getDalton()}.
   3178     * @param status ICU error code.
   3179     * @stable ICU 64
   3180     */
   3181    static MeasureUnit *createDalton(UErrorCode &status);
   3182 
   3183    /**
   3184     * Returns by value, unit of mass: dalton.
   3185     * Also see {@link #createDalton()}.
   3186     * @stable ICU 64
   3187     */
   3188    static MeasureUnit getDalton();
   3189 
   3190    /**
   3191     * Returns by pointer, unit of mass: earth-mass.
   3192     * Caller owns returned value and must free it.
   3193     * Also see {@link #getEarthMass()}.
   3194     * @param status ICU error code.
   3195     * @stable ICU 64
   3196     */
   3197    static MeasureUnit *createEarthMass(UErrorCode &status);
   3198 
   3199    /**
   3200     * Returns by value, unit of mass: earth-mass.
   3201     * Also see {@link #createEarthMass()}.
   3202     * @stable ICU 64
   3203     */
   3204    static MeasureUnit getEarthMass();
   3205 
   3206 #ifndef U_HIDE_DRAFT_API
   3207    /**
   3208     * Returns by pointer, unit of mass: fun.
   3209     * Caller owns returned value and must free it.
   3210     * Also see {@link #getFun()}.
   3211     * @param status ICU error code.
   3212     * @draft ICU 78
   3213     */
   3214    static MeasureUnit *createFun(UErrorCode &status);
   3215 
   3216    /**
   3217     * Returns by value, unit of mass: fun.
   3218     * Also see {@link #createFun()}.
   3219     * @draft ICU 78
   3220     */
   3221    static MeasureUnit getFun();
   3222 #endif /* U_HIDE_DRAFT_API */
   3223 
   3224    /**
   3225     * Returns by pointer, unit of mass: grain.
   3226     * Caller owns returned value and must free it.
   3227     * Also see {@link #getGrain()}.
   3228     * @param status ICU error code.
   3229     * @stable ICU 68
   3230     */
   3231    static MeasureUnit *createGrain(UErrorCode &status);
   3232 
   3233    /**
   3234     * Returns by value, unit of mass: grain.
   3235     * Also see {@link #createGrain()}.
   3236     * @stable ICU 68
   3237     */
   3238    static MeasureUnit getGrain();
   3239 
   3240    /**
   3241     * Returns by pointer, unit of mass: gram.
   3242     * Caller owns returned value and must free it.
   3243     * Also see {@link #getGram()}.
   3244     * @param status ICU error code.
   3245     * @stable ICU 53
   3246     */
   3247    static MeasureUnit *createGram(UErrorCode &status);
   3248 
   3249    /**
   3250     * Returns by value, unit of mass: gram.
   3251     * Also see {@link #createGram()}.
   3252     * @stable ICU 64
   3253     */
   3254    static MeasureUnit getGram();
   3255 
   3256    /**
   3257     * Returns by pointer, unit of mass: kilogram.
   3258     * Caller owns returned value and must free it.
   3259     * Also see {@link #getKilogram()}.
   3260     * @param status ICU error code.
   3261     * @stable ICU 53
   3262     */
   3263    static MeasureUnit *createKilogram(UErrorCode &status);
   3264 
   3265    /**
   3266     * Returns by value, unit of mass: kilogram.
   3267     * Also see {@link #createKilogram()}.
   3268     * @stable ICU 64
   3269     */
   3270    static MeasureUnit getKilogram();
   3271 
   3272    /**
   3273     * Returns by pointer, unit of mass: microgram.
   3274     * Caller owns returned value and must free it.
   3275     * Also see {@link #getMicrogram()}.
   3276     * @param status ICU error code.
   3277     * @stable ICU 54
   3278     */
   3279    static MeasureUnit *createMicrogram(UErrorCode &status);
   3280 
   3281    /**
   3282     * Returns by value, unit of mass: microgram.
   3283     * Also see {@link #createMicrogram()}.
   3284     * @stable ICU 64
   3285     */
   3286    static MeasureUnit getMicrogram();
   3287 
   3288    /**
   3289     * Returns by pointer, unit of mass: milligram.
   3290     * Caller owns returned value and must free it.
   3291     * Also see {@link #getMilligram()}.
   3292     * @param status ICU error code.
   3293     * @stable ICU 54
   3294     */
   3295    static MeasureUnit *createMilligram(UErrorCode &status);
   3296 
   3297    /**
   3298     * Returns by value, unit of mass: milligram.
   3299     * Also see {@link #createMilligram()}.
   3300     * @stable ICU 64
   3301     */
   3302    static MeasureUnit getMilligram();
   3303 
   3304    /**
   3305     * Returns by pointer, unit of mass: ounce.
   3306     * Caller owns returned value and must free it.
   3307     * Also see {@link #getOunce()}.
   3308     * @param status ICU error code.
   3309     * @stable ICU 53
   3310     */
   3311    static MeasureUnit *createOunce(UErrorCode &status);
   3312 
   3313    /**
   3314     * Returns by value, unit of mass: ounce.
   3315     * Also see {@link #createOunce()}.
   3316     * @stable ICU 64
   3317     */
   3318    static MeasureUnit getOunce();
   3319 
   3320    /**
   3321     * Returns by pointer, unit of mass: ounce-troy.
   3322     * Caller owns returned value and must free it.
   3323     * Also see {@link #getOunceTroy()}.
   3324     * @param status ICU error code.
   3325     * @stable ICU 54
   3326     */
   3327    static MeasureUnit *createOunceTroy(UErrorCode &status);
   3328 
   3329    /**
   3330     * Returns by value, unit of mass: ounce-troy.
   3331     * Also see {@link #createOunceTroy()}.
   3332     * @stable ICU 64
   3333     */
   3334    static MeasureUnit getOunceTroy();
   3335 
   3336    /**
   3337     * Returns by pointer, unit of mass: pound.
   3338     * Caller owns returned value and must free it.
   3339     * Also see {@link #getPound()}.
   3340     * @param status ICU error code.
   3341     * @stable ICU 53
   3342     */
   3343    static MeasureUnit *createPound(UErrorCode &status);
   3344 
   3345    /**
   3346     * Returns by value, unit of mass: pound.
   3347     * Also see {@link #createPound()}.
   3348     * @stable ICU 64
   3349     */
   3350    static MeasureUnit getPound();
   3351 
   3352 #ifndef U_HIDE_DRAFT_API
   3353    /**
   3354     * Returns by pointer, unit of mass: slug.
   3355     * Caller owns returned value and must free it.
   3356     * Also see {@link #getSlug()}.
   3357     * @param status ICU error code.
   3358     * @draft ICU 78
   3359     */
   3360    static MeasureUnit *createSlug(UErrorCode &status);
   3361 
   3362    /**
   3363     * Returns by value, unit of mass: slug.
   3364     * Also see {@link #createSlug()}.
   3365     * @draft ICU 78
   3366     */
   3367    static MeasureUnit getSlug();
   3368 #endif /* U_HIDE_DRAFT_API */
   3369 
   3370    /**
   3371     * Returns by pointer, unit of mass: solar-mass.
   3372     * Caller owns returned value and must free it.
   3373     * Also see {@link #getSolarMass()}.
   3374     * @param status ICU error code.
   3375     * @stable ICU 64
   3376     */
   3377    static MeasureUnit *createSolarMass(UErrorCode &status);
   3378 
   3379    /**
   3380     * Returns by value, unit of mass: solar-mass.
   3381     * Also see {@link #createSolarMass()}.
   3382     * @stable ICU 64
   3383     */
   3384    static MeasureUnit getSolarMass();
   3385 
   3386    /**
   3387     * Returns by pointer, unit of mass: stone.
   3388     * Caller owns returned value and must free it.
   3389     * Also see {@link #getStone()}.
   3390     * @param status ICU error code.
   3391     * @stable ICU 54
   3392     */
   3393    static MeasureUnit *createStone(UErrorCode &status);
   3394 
   3395    /**
   3396     * Returns by value, unit of mass: stone.
   3397     * Also see {@link #createStone()}.
   3398     * @stable ICU 64
   3399     */
   3400    static MeasureUnit getStone();
   3401 
   3402    /**
   3403     * Returns by pointer, unit of mass: ton.
   3404     * Caller owns returned value and must free it.
   3405     * Also see {@link #getTon()}.
   3406     * @param status ICU error code.
   3407     * @stable ICU 54
   3408     */
   3409    static MeasureUnit *createTon(UErrorCode &status);
   3410 
   3411    /**
   3412     * Returns by value, unit of mass: ton.
   3413     * Also see {@link #createTon()}.
   3414     * @stable ICU 64
   3415     */
   3416    static MeasureUnit getTon();
   3417 
   3418    /**
   3419     * Returns by pointer, unit of mass: tonne.
   3420     * Caller owns returned value and must free it.
   3421     * Also see {@link #getTonne()}.
   3422     * @param status ICU error code.
   3423     * @stable ICU 72
   3424     */
   3425    static MeasureUnit *createTonne(UErrorCode &status);
   3426 
   3427    /**
   3428     * Returns by value, unit of mass: tonne.
   3429     * Also see {@link #createTonne()}.
   3430     * @stable ICU 72
   3431     */
   3432    static MeasureUnit getTonne();
   3433 
   3434 #ifndef U_HIDE_DEPRECATED_API
   3435    /**
   3436     * Returns by pointer, unit of mass: metric-ton
   3437     * (renamed to tonne in CLDR 42 / ICU 72).
   3438     * Caller owns returned value and must free it.
   3439     * Also see {@link #getMetricTon()} and {@link #createTonne()}.
   3440     * @param status ICU error code.
   3441     * @deprecated ICU 78 use createTonne(UErrorCode &status)
   3442     */
   3443    static MeasureUnit *createMetricTon(UErrorCode &status);
   3444 
   3445    /**
   3446     * Returns by value, unit of mass: metric-ton
   3447     * (renamed to tonne in CLDR 42 / ICU 72).
   3448     * Also see {@link #createMetricTon()} and {@link #getTonne()}.
   3449     * @deprecated ICU 78 use getTonne()
   3450     */
   3451    static MeasureUnit getMetricTon();
   3452 #endif  /* U_HIDE_DEPRECATED_API */
   3453 
   3454    /**
   3455     * Returns by pointer, unit of power: gigawatt.
   3456     * Caller owns returned value and must free it.
   3457     * Also see {@link #getGigawatt()}.
   3458     * @param status ICU error code.
   3459     * @stable ICU 54
   3460     */
   3461    static MeasureUnit *createGigawatt(UErrorCode &status);
   3462 
   3463    /**
   3464     * Returns by value, unit of power: gigawatt.
   3465     * Also see {@link #createGigawatt()}.
   3466     * @stable ICU 64
   3467     */
   3468    static MeasureUnit getGigawatt();
   3469 
   3470    /**
   3471     * Returns by pointer, unit of power: horsepower.
   3472     * Caller owns returned value and must free it.
   3473     * Also see {@link #getHorsepower()}.
   3474     * @param status ICU error code.
   3475     * @stable ICU 53
   3476     */
   3477    static MeasureUnit *createHorsepower(UErrorCode &status);
   3478 
   3479    /**
   3480     * Returns by value, unit of power: horsepower.
   3481     * Also see {@link #createHorsepower()}.
   3482     * @stable ICU 64
   3483     */
   3484    static MeasureUnit getHorsepower();
   3485 
   3486    /**
   3487     * Returns by pointer, unit of power: kilowatt.
   3488     * Caller owns returned value and must free it.
   3489     * Also see {@link #getKilowatt()}.
   3490     * @param status ICU error code.
   3491     * @stable ICU 53
   3492     */
   3493    static MeasureUnit *createKilowatt(UErrorCode &status);
   3494 
   3495    /**
   3496     * Returns by value, unit of power: kilowatt.
   3497     * Also see {@link #createKilowatt()}.
   3498     * @stable ICU 64
   3499     */
   3500    static MeasureUnit getKilowatt();
   3501 
   3502    /**
   3503     * Returns by pointer, unit of power: megawatt.
   3504     * Caller owns returned value and must free it.
   3505     * Also see {@link #getMegawatt()}.
   3506     * @param status ICU error code.
   3507     * @stable ICU 54
   3508     */
   3509    static MeasureUnit *createMegawatt(UErrorCode &status);
   3510 
   3511    /**
   3512     * Returns by value, unit of power: megawatt.
   3513     * Also see {@link #createMegawatt()}.
   3514     * @stable ICU 64
   3515     */
   3516    static MeasureUnit getMegawatt();
   3517 
   3518    /**
   3519     * Returns by pointer, unit of power: milliwatt.
   3520     * Caller owns returned value and must free it.
   3521     * Also see {@link #getMilliwatt()}.
   3522     * @param status ICU error code.
   3523     * @stable ICU 54
   3524     */
   3525    static MeasureUnit *createMilliwatt(UErrorCode &status);
   3526 
   3527    /**
   3528     * Returns by value, unit of power: milliwatt.
   3529     * Also see {@link #createMilliwatt()}.
   3530     * @stable ICU 64
   3531     */
   3532    static MeasureUnit getMilliwatt();
   3533 
   3534    /**
   3535     * Returns by pointer, unit of power: watt.
   3536     * Caller owns returned value and must free it.
   3537     * Also see {@link #getWatt()}.
   3538     * @param status ICU error code.
   3539     * @stable ICU 53
   3540     */
   3541    static MeasureUnit *createWatt(UErrorCode &status);
   3542 
   3543    /**
   3544     * Returns by value, unit of power: watt.
   3545     * Also see {@link #createWatt()}.
   3546     * @stable ICU 64
   3547     */
   3548    static MeasureUnit getWatt();
   3549 
   3550    /**
   3551     * Returns by pointer, unit of pressure: atmosphere.
   3552     * Caller owns returned value and must free it.
   3553     * Also see {@link #getAtmosphere()}.
   3554     * @param status ICU error code.
   3555     * @stable ICU 63
   3556     */
   3557    static MeasureUnit *createAtmosphere(UErrorCode &status);
   3558 
   3559    /**
   3560     * Returns by value, unit of pressure: atmosphere.
   3561     * Also see {@link #createAtmosphere()}.
   3562     * @stable ICU 64
   3563     */
   3564    static MeasureUnit getAtmosphere();
   3565 
   3566    /**
   3567     * Returns by pointer, unit of pressure: bar.
   3568     * Caller owns returned value and must free it.
   3569     * Also see {@link #getBar()}.
   3570     * @param status ICU error code.
   3571     * @stable ICU 65
   3572     */
   3573    static MeasureUnit *createBar(UErrorCode &status);
   3574 
   3575    /**
   3576     * Returns by value, unit of pressure: bar.
   3577     * Also see {@link #createBar()}.
   3578     * @stable ICU 65
   3579     */
   3580    static MeasureUnit getBar();
   3581 
   3582    /**
   3583     * Returns by pointer, unit of pressure: gasoline-energy-density.
   3584     * Caller owns returned value and must free it.
   3585     * Also see {@link #getGasolineEnergyDensity()}.
   3586     * @param status ICU error code.
   3587     * @stable ICU 74
   3588     */
   3589    static MeasureUnit *createGasolineEnergyDensity(UErrorCode &status);
   3590 
   3591    /**
   3592     * Returns by value, unit of pressure: gasoline-energy-density.
   3593     * Also see {@link #createGasolineEnergyDensity()}.
   3594     * @stable ICU 74
   3595     */
   3596    static MeasureUnit getGasolineEnergyDensity();
   3597 
   3598    /**
   3599     * Returns by pointer, unit of pressure: hectopascal.
   3600     * Caller owns returned value and must free it.
   3601     * Also see {@link #getHectopascal()}.
   3602     * @param status ICU error code.
   3603     * @stable ICU 53
   3604     */
   3605    static MeasureUnit *createHectopascal(UErrorCode &status);
   3606 
   3607    /**
   3608     * Returns by value, unit of pressure: hectopascal.
   3609     * Also see {@link #createHectopascal()}.
   3610     * @stable ICU 64
   3611     */
   3612    static MeasureUnit getHectopascal();
   3613 
   3614    /**
   3615     * Returns by pointer, unit of pressure: inch-ofhg.
   3616     * Caller owns returned value and must free it.
   3617     * Also see {@link #getInchHg()}.
   3618     * @param status ICU error code.
   3619     * @stable ICU 53
   3620     */
   3621    static MeasureUnit *createInchHg(UErrorCode &status);
   3622 
   3623    /**
   3624     * Returns by value, unit of pressure: inch-ofhg.
   3625     * Also see {@link #createInchHg()}.
   3626     * @stable ICU 64
   3627     */
   3628    static MeasureUnit getInchHg();
   3629 
   3630    /**
   3631     * Returns by pointer, unit of pressure: kilopascal.
   3632     * Caller owns returned value and must free it.
   3633     * Also see {@link #getKilopascal()}.
   3634     * @param status ICU error code.
   3635     * @stable ICU 64
   3636     */
   3637    static MeasureUnit *createKilopascal(UErrorCode &status);
   3638 
   3639    /**
   3640     * Returns by value, unit of pressure: kilopascal.
   3641     * Also see {@link #createKilopascal()}.
   3642     * @stable ICU 64
   3643     */
   3644    static MeasureUnit getKilopascal();
   3645 
   3646    /**
   3647     * Returns by pointer, unit of pressure: megapascal.
   3648     * Caller owns returned value and must free it.
   3649     * Also see {@link #getMegapascal()}.
   3650     * @param status ICU error code.
   3651     * @stable ICU 64
   3652     */
   3653    static MeasureUnit *createMegapascal(UErrorCode &status);
   3654 
   3655    /**
   3656     * Returns by value, unit of pressure: megapascal.
   3657     * Also see {@link #createMegapascal()}.
   3658     * @stable ICU 64
   3659     */
   3660    static MeasureUnit getMegapascal();
   3661 
   3662    /**
   3663     * Returns by pointer, unit of pressure: millibar.
   3664     * Caller owns returned value and must free it.
   3665     * Also see {@link #getMillibar()}.
   3666     * @param status ICU error code.
   3667     * @stable ICU 53
   3668     */
   3669    static MeasureUnit *createMillibar(UErrorCode &status);
   3670 
   3671    /**
   3672     * Returns by value, unit of pressure: millibar.
   3673     * Also see {@link #createMillibar()}.
   3674     * @stable ICU 64
   3675     */
   3676    static MeasureUnit getMillibar();
   3677 
   3678    /**
   3679     * Returns by pointer, unit of pressure: millimeter-ofhg.
   3680     * Caller owns returned value and must free it.
   3681     * Also see {@link #getMillimeterOfMercury()}.
   3682     * @param status ICU error code.
   3683     * @stable ICU 54
   3684     */
   3685    static MeasureUnit *createMillimeterOfMercury(UErrorCode &status);
   3686 
   3687    /**
   3688     * Returns by value, unit of pressure: millimeter-ofhg.
   3689     * Also see {@link #createMillimeterOfMercury()}.
   3690     * @stable ICU 64
   3691     */
   3692    static MeasureUnit getMillimeterOfMercury();
   3693 
   3694 #ifndef U_HIDE_DRAFT_API
   3695    /**
   3696     * Returns by pointer, unit of pressure: ofhg.
   3697     * Caller owns returned value and must free it.
   3698     * Also see {@link #getOfhg()}.
   3699     * @param status ICU error code.
   3700     * @draft ICU 78
   3701     */
   3702    static MeasureUnit *createOfhg(UErrorCode &status);
   3703 
   3704    /**
   3705     * Returns by value, unit of pressure: ofhg.
   3706     * Also see {@link #createOfhg()}.
   3707     * @draft ICU 78
   3708     */
   3709    static MeasureUnit getOfhg();
   3710 #endif /* U_HIDE_DRAFT_API */
   3711 
   3712    /**
   3713     * Returns by pointer, unit of pressure: pascal.
   3714     * Caller owns returned value and must free it.
   3715     * Also see {@link #getPascal()}.
   3716     * @param status ICU error code.
   3717     * @stable ICU 65
   3718     */
   3719    static MeasureUnit *createPascal(UErrorCode &status);
   3720 
   3721    /**
   3722     * Returns by value, unit of pressure: pascal.
   3723     * Also see {@link #createPascal()}.
   3724     * @stable ICU 65
   3725     */
   3726    static MeasureUnit getPascal();
   3727 
   3728    /**
   3729     * Returns by pointer, unit of pressure: pound-force-per-square-inch.
   3730     * Caller owns returned value and must free it.
   3731     * Also see {@link #getPoundPerSquareInch()}.
   3732     * @param status ICU error code.
   3733     * @stable ICU 54
   3734     */
   3735    static MeasureUnit *createPoundPerSquareInch(UErrorCode &status);
   3736 
   3737    /**
   3738     * Returns by value, unit of pressure: pound-force-per-square-inch.
   3739     * Also see {@link #createPoundPerSquareInch()}.
   3740     * @stable ICU 64
   3741     */
   3742    static MeasureUnit getPoundPerSquareInch();
   3743 
   3744    /**
   3745     * Returns by pointer, unit of speed: beaufort.
   3746     * Caller owns returned value and must free it.
   3747     * Also see {@link #getBeaufort()}.
   3748     * @param status ICU error code.
   3749     * @stable ICU 73
   3750     */
   3751    static MeasureUnit *createBeaufort(UErrorCode &status);
   3752 
   3753    /**
   3754     * Returns by value, unit of speed: beaufort.
   3755     * Also see {@link #createBeaufort()}.
   3756     * @stable ICU 73
   3757     */
   3758    static MeasureUnit getBeaufort();
   3759 
   3760    /**
   3761     * Returns by pointer, unit of speed: kilometer-per-hour.
   3762     * Caller owns returned value and must free it.
   3763     * Also see {@link #getKilometerPerHour()}.
   3764     * @param status ICU error code.
   3765     * @stable ICU 53
   3766     */
   3767    static MeasureUnit *createKilometerPerHour(UErrorCode &status);
   3768 
   3769    /**
   3770     * Returns by value, unit of speed: kilometer-per-hour.
   3771     * Also see {@link #createKilometerPerHour()}.
   3772     * @stable ICU 64
   3773     */
   3774    static MeasureUnit getKilometerPerHour();
   3775 
   3776    /**
   3777     * Returns by pointer, unit of speed: knot.
   3778     * Caller owns returned value and must free it.
   3779     * Also see {@link #getKnot()}.
   3780     * @param status ICU error code.
   3781     * @stable ICU 56
   3782     */
   3783    static MeasureUnit *createKnot(UErrorCode &status);
   3784 
   3785    /**
   3786     * Returns by value, unit of speed: knot.
   3787     * Also see {@link #createKnot()}.
   3788     * @stable ICU 64
   3789     */
   3790    static MeasureUnit getKnot();
   3791 
   3792    /**
   3793     * Returns by pointer, unit of speed: light-speed.
   3794     * Caller owns returned value and must free it.
   3795     * Also see {@link #getLightSpeed()}.
   3796     * @param status ICU error code.
   3797     * @stable ICU 76
   3798     */
   3799    static MeasureUnit *createLightSpeed(UErrorCode &status);
   3800 
   3801    /**
   3802     * Returns by value, unit of speed: light-speed.
   3803     * Also see {@link #createLightSpeed()}.
   3804     * @stable ICU 76
   3805     */
   3806    static MeasureUnit getLightSpeed();
   3807 
   3808    /**
   3809     * Returns by pointer, unit of speed: meter-per-second.
   3810     * Caller owns returned value and must free it.
   3811     * Also see {@link #getMeterPerSecond()}.
   3812     * @param status ICU error code.
   3813     * @stable ICU 53
   3814     */
   3815    static MeasureUnit *createMeterPerSecond(UErrorCode &status);
   3816 
   3817    /**
   3818     * Returns by value, unit of speed: meter-per-second.
   3819     * Also see {@link #createMeterPerSecond()}.
   3820     * @stable ICU 64
   3821     */
   3822    static MeasureUnit getMeterPerSecond();
   3823 
   3824    /**
   3825     * Returns by pointer, unit of speed: mile-per-hour.
   3826     * Caller owns returned value and must free it.
   3827     * Also see {@link #getMilePerHour()}.
   3828     * @param status ICU error code.
   3829     * @stable ICU 53
   3830     */
   3831    static MeasureUnit *createMilePerHour(UErrorCode &status);
   3832 
   3833    /**
   3834     * Returns by value, unit of speed: mile-per-hour.
   3835     * Also see {@link #createMilePerHour()}.
   3836     * @stable ICU 64
   3837     */
   3838    static MeasureUnit getMilePerHour();
   3839 
   3840    /**
   3841     * Returns by pointer, unit of temperature: celsius.
   3842     * Caller owns returned value and must free it.
   3843     * Also see {@link #getCelsius()}.
   3844     * @param status ICU error code.
   3845     * @stable ICU 53
   3846     */
   3847    static MeasureUnit *createCelsius(UErrorCode &status);
   3848 
   3849    /**
   3850     * Returns by value, unit of temperature: celsius.
   3851     * Also see {@link #createCelsius()}.
   3852     * @stable ICU 64
   3853     */
   3854    static MeasureUnit getCelsius();
   3855 
   3856    /**
   3857     * Returns by pointer, unit of temperature: fahrenheit.
   3858     * Caller owns returned value and must free it.
   3859     * Also see {@link #getFahrenheit()}.
   3860     * @param status ICU error code.
   3861     * @stable ICU 53
   3862     */
   3863    static MeasureUnit *createFahrenheit(UErrorCode &status);
   3864 
   3865    /**
   3866     * Returns by value, unit of temperature: fahrenheit.
   3867     * Also see {@link #createFahrenheit()}.
   3868     * @stable ICU 64
   3869     */
   3870    static MeasureUnit getFahrenheit();
   3871 
   3872    /**
   3873     * Returns by pointer, unit of temperature: generic.
   3874     * Caller owns returned value and must free it.
   3875     * Also see {@link #getGenericTemperature()}.
   3876     * @param status ICU error code.
   3877     * @stable ICU 56
   3878     */
   3879    static MeasureUnit *createGenericTemperature(UErrorCode &status);
   3880 
   3881    /**
   3882     * Returns by value, unit of temperature: generic.
   3883     * Also see {@link #createGenericTemperature()}.
   3884     * @stable ICU 64
   3885     */
   3886    static MeasureUnit getGenericTemperature();
   3887 
   3888    /**
   3889     * Returns by pointer, unit of temperature: kelvin.
   3890     * Caller owns returned value and must free it.
   3891     * Also see {@link #getKelvin()}.
   3892     * @param status ICU error code.
   3893     * @stable ICU 54
   3894     */
   3895    static MeasureUnit *createKelvin(UErrorCode &status);
   3896 
   3897    /**
   3898     * Returns by value, unit of temperature: kelvin.
   3899     * Also see {@link #createKelvin()}.
   3900     * @stable ICU 64
   3901     */
   3902    static MeasureUnit getKelvin();
   3903 
   3904 #ifndef U_HIDE_DRAFT_API
   3905    /**
   3906     * Returns by pointer, unit of temperature: rankine.
   3907     * Caller owns returned value and must free it.
   3908     * Also see {@link #getRankine()}.
   3909     * @param status ICU error code.
   3910     * @draft ICU 78
   3911     */
   3912    static MeasureUnit *createRankine(UErrorCode &status);
   3913 
   3914    /**
   3915     * Returns by value, unit of temperature: rankine.
   3916     * Also see {@link #createRankine()}.
   3917     * @draft ICU 78
   3918     */
   3919    static MeasureUnit getRankine();
   3920 #endif /* U_HIDE_DRAFT_API */
   3921 
   3922    /**
   3923     * Returns by pointer, unit of torque: newton-meter.
   3924     * Caller owns returned value and must free it.
   3925     * Also see {@link #getNewtonMeter()}.
   3926     * @param status ICU error code.
   3927     * @stable ICU 64
   3928     */
   3929    static MeasureUnit *createNewtonMeter(UErrorCode &status);
   3930 
   3931    /**
   3932     * Returns by value, unit of torque: newton-meter.
   3933     * Also see {@link #createNewtonMeter()}.
   3934     * @stable ICU 64
   3935     */
   3936    static MeasureUnit getNewtonMeter();
   3937 
   3938    /**
   3939     * Returns by pointer, unit of torque: pound-force-foot.
   3940     * Caller owns returned value and must free it.
   3941     * Also see {@link #getPoundFoot()}.
   3942     * @param status ICU error code.
   3943     * @stable ICU 64
   3944     */
   3945    static MeasureUnit *createPoundFoot(UErrorCode &status);
   3946 
   3947    /**
   3948     * Returns by value, unit of torque: pound-force-foot.
   3949     * Also see {@link #createPoundFoot()}.
   3950     * @stable ICU 64
   3951     */
   3952    static MeasureUnit getPoundFoot();
   3953 
   3954    /**
   3955     * Returns by pointer, unit of volume: acre-foot.
   3956     * Caller owns returned value and must free it.
   3957     * Also see {@link #getAcreFoot()}.
   3958     * @param status ICU error code.
   3959     * @stable ICU 54
   3960     */
   3961    static MeasureUnit *createAcreFoot(UErrorCode &status);
   3962 
   3963    /**
   3964     * Returns by value, unit of volume: acre-foot.
   3965     * Also see {@link #createAcreFoot()}.
   3966     * @stable ICU 64
   3967     */
   3968    static MeasureUnit getAcreFoot();
   3969 
   3970    /**
   3971     * Returns by pointer, unit of volume: barrel.
   3972     * Caller owns returned value and must free it.
   3973     * Also see {@link #getBarrel()}.
   3974     * @param status ICU error code.
   3975     * @stable ICU 64
   3976     */
   3977    static MeasureUnit *createBarrel(UErrorCode &status);
   3978 
   3979    /**
   3980     * Returns by value, unit of volume: barrel.
   3981     * Also see {@link #createBarrel()}.
   3982     * @stable ICU 64
   3983     */
   3984    static MeasureUnit getBarrel();
   3985 
   3986    /**
   3987     * Returns by pointer, unit of volume: bushel.
   3988     * Caller owns returned value and must free it.
   3989     * Also see {@link #getBushel()}.
   3990     * @param status ICU error code.
   3991     * @stable ICU 54
   3992     */
   3993    static MeasureUnit *createBushel(UErrorCode &status);
   3994 
   3995    /**
   3996     * Returns by value, unit of volume: bushel.
   3997     * Also see {@link #createBushel()}.
   3998     * @stable ICU 64
   3999     */
   4000    static MeasureUnit getBushel();
   4001 
   4002    /**
   4003     * Returns by pointer, unit of volume: centiliter.
   4004     * Caller owns returned value and must free it.
   4005     * Also see {@link #getCentiliter()}.
   4006     * @param status ICU error code.
   4007     * @stable ICU 54
   4008     */
   4009    static MeasureUnit *createCentiliter(UErrorCode &status);
   4010 
   4011    /**
   4012     * Returns by value, unit of volume: centiliter.
   4013     * Also see {@link #createCentiliter()}.
   4014     * @stable ICU 64
   4015     */
   4016    static MeasureUnit getCentiliter();
   4017 
   4018    /**
   4019     * Returns by pointer, unit of volume: cubic-centimeter.
   4020     * Caller owns returned value and must free it.
   4021     * Also see {@link #getCubicCentimeter()}.
   4022     * @param status ICU error code.
   4023     * @stable ICU 54
   4024     */
   4025    static MeasureUnit *createCubicCentimeter(UErrorCode &status);
   4026 
   4027    /**
   4028     * Returns by value, unit of volume: cubic-centimeter.
   4029     * Also see {@link #createCubicCentimeter()}.
   4030     * @stable ICU 64
   4031     */
   4032    static MeasureUnit getCubicCentimeter();
   4033 
   4034    /**
   4035     * Returns by pointer, unit of volume: cubic-foot.
   4036     * Caller owns returned value and must free it.
   4037     * Also see {@link #getCubicFoot()}.
   4038     * @param status ICU error code.
   4039     * @stable ICU 54
   4040     */
   4041    static MeasureUnit *createCubicFoot(UErrorCode &status);
   4042 
   4043    /**
   4044     * Returns by value, unit of volume: cubic-foot.
   4045     * Also see {@link #createCubicFoot()}.
   4046     * @stable ICU 64
   4047     */
   4048    static MeasureUnit getCubicFoot();
   4049 
   4050    /**
   4051     * Returns by pointer, unit of volume: cubic-inch.
   4052     * Caller owns returned value and must free it.
   4053     * Also see {@link #getCubicInch()}.
   4054     * @param status ICU error code.
   4055     * @stable ICU 54
   4056     */
   4057    static MeasureUnit *createCubicInch(UErrorCode &status);
   4058 
   4059    /**
   4060     * Returns by value, unit of volume: cubic-inch.
   4061     * Also see {@link #createCubicInch()}.
   4062     * @stable ICU 64
   4063     */
   4064    static MeasureUnit getCubicInch();
   4065 
   4066    /**
   4067     * Returns by pointer, unit of volume: cubic-kilometer.
   4068     * Caller owns returned value and must free it.
   4069     * Also see {@link #getCubicKilometer()}.
   4070     * @param status ICU error code.
   4071     * @stable ICU 53
   4072     */
   4073    static MeasureUnit *createCubicKilometer(UErrorCode &status);
   4074 
   4075    /**
   4076     * Returns by value, unit of volume: cubic-kilometer.
   4077     * Also see {@link #createCubicKilometer()}.
   4078     * @stable ICU 64
   4079     */
   4080    static MeasureUnit getCubicKilometer();
   4081 
   4082    /**
   4083     * Returns by pointer, unit of volume: cubic-meter.
   4084     * Caller owns returned value and must free it.
   4085     * Also see {@link #getCubicMeter()}.
   4086     * @param status ICU error code.
   4087     * @stable ICU 54
   4088     */
   4089    static MeasureUnit *createCubicMeter(UErrorCode &status);
   4090 
   4091    /**
   4092     * Returns by value, unit of volume: cubic-meter.
   4093     * Also see {@link #createCubicMeter()}.
   4094     * @stable ICU 64
   4095     */
   4096    static MeasureUnit getCubicMeter();
   4097 
   4098    /**
   4099     * Returns by pointer, unit of volume: cubic-mile.
   4100     * Caller owns returned value and must free it.
   4101     * Also see {@link #getCubicMile()}.
   4102     * @param status ICU error code.
   4103     * @stable ICU 53
   4104     */
   4105    static MeasureUnit *createCubicMile(UErrorCode &status);
   4106 
   4107    /**
   4108     * Returns by value, unit of volume: cubic-mile.
   4109     * Also see {@link #createCubicMile()}.
   4110     * @stable ICU 64
   4111     */
   4112    static MeasureUnit getCubicMile();
   4113 
   4114    /**
   4115     * Returns by pointer, unit of volume: cubic-yard.
   4116     * Caller owns returned value and must free it.
   4117     * Also see {@link #getCubicYard()}.
   4118     * @param status ICU error code.
   4119     * @stable ICU 54
   4120     */
   4121    static MeasureUnit *createCubicYard(UErrorCode &status);
   4122 
   4123    /**
   4124     * Returns by value, unit of volume: cubic-yard.
   4125     * Also see {@link #createCubicYard()}.
   4126     * @stable ICU 64
   4127     */
   4128    static MeasureUnit getCubicYard();
   4129 
   4130    /**
   4131     * Returns by pointer, unit of volume: cup.
   4132     * Caller owns returned value and must free it.
   4133     * Also see {@link #getCup()}.
   4134     * @param status ICU error code.
   4135     * @stable ICU 54
   4136     */
   4137    static MeasureUnit *createCup(UErrorCode &status);
   4138 
   4139    /**
   4140     * Returns by value, unit of volume: cup.
   4141     * Also see {@link #createCup()}.
   4142     * @stable ICU 64
   4143     */
   4144    static MeasureUnit getCup();
   4145 
   4146 #ifndef U_HIDE_DRAFT_API
   4147    /**
   4148     * Returns by pointer, unit of volume: cup-imperial.
   4149     * Caller owns returned value and must free it.
   4150     * Also see {@link #getCupImperial()}.
   4151     * @param status ICU error code.
   4152     * @draft ICU 78
   4153     */
   4154    static MeasureUnit *createCupImperial(UErrorCode &status);
   4155 
   4156    /**
   4157     * Returns by value, unit of volume: cup-imperial.
   4158     * Also see {@link #createCupImperial()}.
   4159     * @draft ICU 78
   4160     */
   4161    static MeasureUnit getCupImperial();
   4162 #endif /* U_HIDE_DRAFT_API */
   4163 
   4164 #ifndef U_HIDE_DRAFT_API
   4165    /**
   4166     * Returns by pointer, unit of volume: cup-jp.
   4167     * Caller owns returned value and must free it.
   4168     * Also see {@link #getCupJp()}.
   4169     * @param status ICU error code.
   4170     * @draft ICU 78
   4171     */
   4172    static MeasureUnit *createCupJp(UErrorCode &status);
   4173 
   4174    /**
   4175     * Returns by value, unit of volume: cup-jp.
   4176     * Also see {@link #createCupJp()}.
   4177     * @draft ICU 78
   4178     */
   4179    static MeasureUnit getCupJp();
   4180 #endif /* U_HIDE_DRAFT_API */
   4181 
   4182    /**
   4183     * Returns by pointer, unit of volume: cup-metric.
   4184     * Caller owns returned value and must free it.
   4185     * Also see {@link #getCupMetric()}.
   4186     * @param status ICU error code.
   4187     * @stable ICU 56
   4188     */
   4189    static MeasureUnit *createCupMetric(UErrorCode &status);
   4190 
   4191    /**
   4192     * Returns by value, unit of volume: cup-metric.
   4193     * Also see {@link #createCupMetric()}.
   4194     * @stable ICU 64
   4195     */
   4196    static MeasureUnit getCupMetric();
   4197 
   4198    /**
   4199     * Returns by pointer, unit of volume: deciliter.
   4200     * Caller owns returned value and must free it.
   4201     * Also see {@link #getDeciliter()}.
   4202     * @param status ICU error code.
   4203     * @stable ICU 54
   4204     */
   4205    static MeasureUnit *createDeciliter(UErrorCode &status);
   4206 
   4207    /**
   4208     * Returns by value, unit of volume: deciliter.
   4209     * Also see {@link #createDeciliter()}.
   4210     * @stable ICU 64
   4211     */
   4212    static MeasureUnit getDeciliter();
   4213 
   4214    /**
   4215     * Returns by pointer, unit of volume: dessert-spoon.
   4216     * Caller owns returned value and must free it.
   4217     * Also see {@link #getDessertSpoon()}.
   4218     * @param status ICU error code.
   4219     * @stable ICU 68
   4220     */
   4221    static MeasureUnit *createDessertSpoon(UErrorCode &status);
   4222 
   4223    /**
   4224     * Returns by value, unit of volume: dessert-spoon.
   4225     * Also see {@link #createDessertSpoon()}.
   4226     * @stable ICU 68
   4227     */
   4228    static MeasureUnit getDessertSpoon();
   4229 
   4230    /**
   4231     * Returns by pointer, unit of volume: dessert-spoon-imperial.
   4232     * Caller owns returned value and must free it.
   4233     * Also see {@link #getDessertSpoonImperial()}.
   4234     * @param status ICU error code.
   4235     * @stable ICU 68
   4236     */
   4237    static MeasureUnit *createDessertSpoonImperial(UErrorCode &status);
   4238 
   4239    /**
   4240     * Returns by value, unit of volume: dessert-spoon-imperial.
   4241     * Also see {@link #createDessertSpoonImperial()}.
   4242     * @stable ICU 68
   4243     */
   4244    static MeasureUnit getDessertSpoonImperial();
   4245 
   4246    /**
   4247     * Returns by pointer, unit of volume: dram.
   4248     * Caller owns returned value and must free it.
   4249     * Also see {@link #getDram()}.
   4250     * @param status ICU error code.
   4251     * @stable ICU 68
   4252     */
   4253    static MeasureUnit *createDram(UErrorCode &status);
   4254 
   4255    /**
   4256     * Returns by value, unit of volume: dram.
   4257     * Also see {@link #createDram()}.
   4258     * @stable ICU 68
   4259     */
   4260    static MeasureUnit getDram();
   4261 
   4262    /**
   4263     * Returns by pointer, unit of volume: drop.
   4264     * Caller owns returned value and must free it.
   4265     * Also see {@link #getDrop()}.
   4266     * @param status ICU error code.
   4267     * @stable ICU 68
   4268     */
   4269    static MeasureUnit *createDrop(UErrorCode &status);
   4270 
   4271    /**
   4272     * Returns by value, unit of volume: drop.
   4273     * Also see {@link #createDrop()}.
   4274     * @stable ICU 68
   4275     */
   4276    static MeasureUnit getDrop();
   4277 
   4278    /**
   4279     * Returns by pointer, unit of volume: fluid-ounce.
   4280     * Caller owns returned value and must free it.
   4281     * Also see {@link #getFluidOunce()}.
   4282     * @param status ICU error code.
   4283     * @stable ICU 54
   4284     */
   4285    static MeasureUnit *createFluidOunce(UErrorCode &status);
   4286 
   4287    /**
   4288     * Returns by value, unit of volume: fluid-ounce.
   4289     * Also see {@link #createFluidOunce()}.
   4290     * @stable ICU 64
   4291     */
   4292    static MeasureUnit getFluidOunce();
   4293 
   4294    /**
   4295     * Returns by pointer, unit of volume: fluid-ounce-imperial.
   4296     * Caller owns returned value and must free it.
   4297     * Also see {@link #getFluidOunceImperial()}.
   4298     * @param status ICU error code.
   4299     * @stable ICU 64
   4300     */
   4301    static MeasureUnit *createFluidOunceImperial(UErrorCode &status);
   4302 
   4303    /**
   4304     * Returns by value, unit of volume: fluid-ounce-imperial.
   4305     * Also see {@link #createFluidOunceImperial()}.
   4306     * @stable ICU 64
   4307     */
   4308    static MeasureUnit getFluidOunceImperial();
   4309 
   4310 #ifndef U_HIDE_DRAFT_API
   4311    /**
   4312     * Returns by pointer, unit of volume: fluid-ounce-metric.
   4313     * Caller owns returned value and must free it.
   4314     * Also see {@link #getFluidOunceMetric()}.
   4315     * @param status ICU error code.
   4316     * @draft ICU 78
   4317     */
   4318    static MeasureUnit *createFluidOunceMetric(UErrorCode &status);
   4319 
   4320    /**
   4321     * Returns by value, unit of volume: fluid-ounce-metric.
   4322     * Also see {@link #createFluidOunceMetric()}.
   4323     * @draft ICU 78
   4324     */
   4325    static MeasureUnit getFluidOunceMetric();
   4326 #endif /* U_HIDE_DRAFT_API */
   4327 
   4328    /**
   4329     * Returns by pointer, unit of volume: gallon.
   4330     * Caller owns returned value and must free it.
   4331     * Also see {@link #getGallon()}.
   4332     * @param status ICU error code.
   4333     * @stable ICU 54
   4334     */
   4335    static MeasureUnit *createGallon(UErrorCode &status);
   4336 
   4337    /**
   4338     * Returns by value, unit of volume: gallon.
   4339     * Also see {@link #createGallon()}.
   4340     * @stable ICU 64
   4341     */
   4342    static MeasureUnit getGallon();
   4343 
   4344    /**
   4345     * Returns by pointer, unit of volume: gallon-imperial.
   4346     * Caller owns returned value and must free it.
   4347     * Also see {@link #getGallonImperial()}.
   4348     * @param status ICU error code.
   4349     * @stable ICU 57
   4350     */
   4351    static MeasureUnit *createGallonImperial(UErrorCode &status);
   4352 
   4353    /**
   4354     * Returns by value, unit of volume: gallon-imperial.
   4355     * Also see {@link #createGallonImperial()}.
   4356     * @stable ICU 64
   4357     */
   4358    static MeasureUnit getGallonImperial();
   4359 
   4360    /**
   4361     * Returns by pointer, unit of volume: hectoliter.
   4362     * Caller owns returned value and must free it.
   4363     * Also see {@link #getHectoliter()}.
   4364     * @param status ICU error code.
   4365     * @stable ICU 54
   4366     */
   4367    static MeasureUnit *createHectoliter(UErrorCode &status);
   4368 
   4369    /**
   4370     * Returns by value, unit of volume: hectoliter.
   4371     * Also see {@link #createHectoliter()}.
   4372     * @stable ICU 64
   4373     */
   4374    static MeasureUnit getHectoliter();
   4375 
   4376    /**
   4377     * Returns by pointer, unit of volume: jigger.
   4378     * Caller owns returned value and must free it.
   4379     * Also see {@link #getJigger()}.
   4380     * @param status ICU error code.
   4381     * @stable ICU 68
   4382     */
   4383    static MeasureUnit *createJigger(UErrorCode &status);
   4384 
   4385    /**
   4386     * Returns by value, unit of volume: jigger.
   4387     * Also see {@link #createJigger()}.
   4388     * @stable ICU 68
   4389     */
   4390    static MeasureUnit getJigger();
   4391 
   4392 #ifndef U_HIDE_DRAFT_API
   4393    /**
   4394     * Returns by pointer, unit of volume: koku.
   4395     * Caller owns returned value and must free it.
   4396     * Also see {@link #getKoku()}.
   4397     * @param status ICU error code.
   4398     * @draft ICU 78
   4399     */
   4400    static MeasureUnit *createKoku(UErrorCode &status);
   4401 
   4402    /**
   4403     * Returns by value, unit of volume: koku.
   4404     * Also see {@link #createKoku()}.
   4405     * @draft ICU 78
   4406     */
   4407    static MeasureUnit getKoku();
   4408 #endif /* U_HIDE_DRAFT_API */
   4409 
   4410 #ifndef U_HIDE_DRAFT_API
   4411    /**
   4412     * Returns by pointer, unit of volume: kosaji.
   4413     * Caller owns returned value and must free it.
   4414     * Also see {@link #getKosaji()}.
   4415     * @param status ICU error code.
   4416     * @draft ICU 78
   4417     */
   4418    static MeasureUnit *createKosaji(UErrorCode &status);
   4419 
   4420    /**
   4421     * Returns by value, unit of volume: kosaji.
   4422     * Also see {@link #createKosaji()}.
   4423     * @draft ICU 78
   4424     */
   4425    static MeasureUnit getKosaji();
   4426 #endif /* U_HIDE_DRAFT_API */
   4427 
   4428    /**
   4429     * Returns by pointer, unit of volume: liter.
   4430     * Caller owns returned value and must free it.
   4431     * Also see {@link #getLiter()}.
   4432     * @param status ICU error code.
   4433     * @stable ICU 53
   4434     */
   4435    static MeasureUnit *createLiter(UErrorCode &status);
   4436 
   4437    /**
   4438     * Returns by value, unit of volume: liter.
   4439     * Also see {@link #createLiter()}.
   4440     * @stable ICU 64
   4441     */
   4442    static MeasureUnit getLiter();
   4443 
   4444    /**
   4445     * Returns by pointer, unit of volume: megaliter.
   4446     * Caller owns returned value and must free it.
   4447     * Also see {@link #getMegaliter()}.
   4448     * @param status ICU error code.
   4449     * @stable ICU 54
   4450     */
   4451    static MeasureUnit *createMegaliter(UErrorCode &status);
   4452 
   4453    /**
   4454     * Returns by value, unit of volume: megaliter.
   4455     * Also see {@link #createMegaliter()}.
   4456     * @stable ICU 64
   4457     */
   4458    static MeasureUnit getMegaliter();
   4459 
   4460    /**
   4461     * Returns by pointer, unit of volume: milliliter.
   4462     * Caller owns returned value and must free it.
   4463     * Also see {@link #getMilliliter()}.
   4464     * @param status ICU error code.
   4465     * @stable ICU 54
   4466     */
   4467    static MeasureUnit *createMilliliter(UErrorCode &status);
   4468 
   4469    /**
   4470     * Returns by value, unit of volume: milliliter.
   4471     * Also see {@link #createMilliliter()}.
   4472     * @stable ICU 64
   4473     */
   4474    static MeasureUnit getMilliliter();
   4475 
   4476 #ifndef U_HIDE_DRAFT_API
   4477    /**
   4478     * Returns by pointer, unit of volume: osaji.
   4479     * Caller owns returned value and must free it.
   4480     * Also see {@link #getOsaji()}.
   4481     * @param status ICU error code.
   4482     * @draft ICU 78
   4483     */
   4484    static MeasureUnit *createOsaji(UErrorCode &status);
   4485 
   4486    /**
   4487     * Returns by value, unit of volume: osaji.
   4488     * Also see {@link #createOsaji()}.
   4489     * @draft ICU 78
   4490     */
   4491    static MeasureUnit getOsaji();
   4492 #endif /* U_HIDE_DRAFT_API */
   4493 
   4494    /**
   4495     * Returns by pointer, unit of volume: pinch.
   4496     * Caller owns returned value and must free it.
   4497     * Also see {@link #getPinch()}.
   4498     * @param status ICU error code.
   4499     * @stable ICU 68
   4500     */
   4501    static MeasureUnit *createPinch(UErrorCode &status);
   4502 
   4503    /**
   4504     * Returns by value, unit of volume: pinch.
   4505     * Also see {@link #createPinch()}.
   4506     * @stable ICU 68
   4507     */
   4508    static MeasureUnit getPinch();
   4509 
   4510    /**
   4511     * Returns by pointer, unit of volume: pint.
   4512     * Caller owns returned value and must free it.
   4513     * Also see {@link #getPint()}.
   4514     * @param status ICU error code.
   4515     * @stable ICU 54
   4516     */
   4517    static MeasureUnit *createPint(UErrorCode &status);
   4518 
   4519    /**
   4520     * Returns by value, unit of volume: pint.
   4521     * Also see {@link #createPint()}.
   4522     * @stable ICU 64
   4523     */
   4524    static MeasureUnit getPint();
   4525 
   4526 #ifndef U_HIDE_DRAFT_API
   4527    /**
   4528     * Returns by pointer, unit of volume: pint-imperial.
   4529     * Caller owns returned value and must free it.
   4530     * Also see {@link #getPintImperial()}.
   4531     * @param status ICU error code.
   4532     * @draft ICU 78
   4533     */
   4534    static MeasureUnit *createPintImperial(UErrorCode &status);
   4535 
   4536    /**
   4537     * Returns by value, unit of volume: pint-imperial.
   4538     * Also see {@link #createPintImperial()}.
   4539     * @draft ICU 78
   4540     */
   4541    static MeasureUnit getPintImperial();
   4542 #endif /* U_HIDE_DRAFT_API */
   4543 
   4544    /**
   4545     * Returns by pointer, unit of volume: pint-metric.
   4546     * Caller owns returned value and must free it.
   4547     * Also see {@link #getPintMetric()}.
   4548     * @param status ICU error code.
   4549     * @stable ICU 56
   4550     */
   4551    static MeasureUnit *createPintMetric(UErrorCode &status);
   4552 
   4553    /**
   4554     * Returns by value, unit of volume: pint-metric.
   4555     * Also see {@link #createPintMetric()}.
   4556     * @stable ICU 64
   4557     */
   4558    static MeasureUnit getPintMetric();
   4559 
   4560    /**
   4561     * Returns by pointer, unit of volume: quart.
   4562     * Caller owns returned value and must free it.
   4563     * Also see {@link #getQuart()}.
   4564     * @param status ICU error code.
   4565     * @stable ICU 54
   4566     */
   4567    static MeasureUnit *createQuart(UErrorCode &status);
   4568 
   4569    /**
   4570     * Returns by value, unit of volume: quart.
   4571     * Also see {@link #createQuart()}.
   4572     * @stable ICU 64
   4573     */
   4574    static MeasureUnit getQuart();
   4575 
   4576    /**
   4577     * Returns by pointer, unit of volume: quart-imperial.
   4578     * Caller owns returned value and must free it.
   4579     * Also see {@link #getQuartImperial()}.
   4580     * @param status ICU error code.
   4581     * @stable ICU 68
   4582     */
   4583    static MeasureUnit *createQuartImperial(UErrorCode &status);
   4584 
   4585    /**
   4586     * Returns by value, unit of volume: quart-imperial.
   4587     * Also see {@link #createQuartImperial()}.
   4588     * @stable ICU 68
   4589     */
   4590    static MeasureUnit getQuartImperial();
   4591 
   4592 #ifndef U_HIDE_DRAFT_API
   4593    /**
   4594     * Returns by pointer, unit of volume: sai.
   4595     * Caller owns returned value and must free it.
   4596     * Also see {@link #getSai()}.
   4597     * @param status ICU error code.
   4598     * @draft ICU 78
   4599     */
   4600    static MeasureUnit *createSai(UErrorCode &status);
   4601 
   4602    /**
   4603     * Returns by value, unit of volume: sai.
   4604     * Also see {@link #createSai()}.
   4605     * @draft ICU 78
   4606     */
   4607    static MeasureUnit getSai();
   4608 #endif /* U_HIDE_DRAFT_API */
   4609 
   4610 #ifndef U_HIDE_DRAFT_API
   4611    /**
   4612     * Returns by pointer, unit of volume: shaku.
   4613     * Caller owns returned value and must free it.
   4614     * Also see {@link #getShaku()}.
   4615     * @param status ICU error code.
   4616     * @draft ICU 78
   4617     */
   4618    static MeasureUnit *createShaku(UErrorCode &status);
   4619 
   4620    /**
   4621     * Returns by value, unit of volume: shaku.
   4622     * Also see {@link #createShaku()}.
   4623     * @draft ICU 78
   4624     */
   4625    static MeasureUnit getShaku();
   4626 #endif /* U_HIDE_DRAFT_API */
   4627 
   4628    /**
   4629     * Returns by pointer, unit of volume: tablespoon.
   4630     * Caller owns returned value and must free it.
   4631     * Also see {@link #getTablespoon()}.
   4632     * @param status ICU error code.
   4633     * @stable ICU 54
   4634     */
   4635    static MeasureUnit *createTablespoon(UErrorCode &status);
   4636 
   4637    /**
   4638     * Returns by value, unit of volume: tablespoon.
   4639     * Also see {@link #createTablespoon()}.
   4640     * @stable ICU 64
   4641     */
   4642    static MeasureUnit getTablespoon();
   4643 
   4644    /**
   4645     * Returns by pointer, unit of volume: teaspoon.
   4646     * Caller owns returned value and must free it.
   4647     * Also see {@link #getTeaspoon()}.
   4648     * @param status ICU error code.
   4649     * @stable ICU 54
   4650     */
   4651    static MeasureUnit *createTeaspoon(UErrorCode &status);
   4652 
   4653    /**
   4654     * Returns by value, unit of volume: teaspoon.
   4655     * Also see {@link #createTeaspoon()}.
   4656     * @stable ICU 64
   4657     */
   4658    static MeasureUnit getTeaspoon();
   4659 
   4660 #ifndef U_HIDE_DRAFT_API
   4661    /**
   4662     * Returns by pointer, unit of volume: to-jp.
   4663     * Caller owns returned value and must free it.
   4664     * Also see {@link #getToJp()}.
   4665     * @param status ICU error code.
   4666     * @draft ICU 78
   4667     */
   4668    static MeasureUnit *createToJp(UErrorCode &status);
   4669 
   4670    /**
   4671     * Returns by value, unit of volume: to-jp.
   4672     * Also see {@link #createToJp()}.
   4673     * @draft ICU 78
   4674     */
   4675    static MeasureUnit getToJp();
   4676 #endif /* U_HIDE_DRAFT_API */
   4677 
   4678 // End generated createXXX methods
   4679 
   4680 protected:
   4681 
   4682 #ifndef U_HIDE_INTERNAL_API
   4683    /**
   4684     * For ICU use only.
   4685     * @internal
   4686     */
   4687    void initTime(const char *timeId);
   4688 
   4689    /**
   4690     * For ICU use only.
   4691     * @internal
   4692     */
   4693    void initCurrency(StringPiece isoCurrency);
   4694 
   4695 #endif  /* U_HIDE_INTERNAL_API */
   4696 
   4697 private:
   4698 
   4699    // Used by new draft APIs in ICU 67. If non-null, fImpl is owned by the
   4700    // MeasureUnit.
   4701    MeasureUnitImpl* fImpl;
   4702 
   4703    // An index into a static string list in measunit.cpp. If set to -1, fImpl
   4704    // is in use instead of fTypeId and fSubTypeId.
   4705    int16_t fSubTypeId;
   4706    // An index into a static string list in measunit.cpp. If set to -1, fImpl
   4707    // is in use instead of fTypeId and fSubTypeId.
   4708    int8_t fTypeId;
   4709 
   4710    MeasureUnit(int32_t typeId, int32_t subTypeId);
   4711    MeasureUnit(MeasureUnitImpl&& impl);
   4712    void setTo(int32_t typeId, int32_t subTypeId);
   4713    static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status);
   4714 
   4715    /**
   4716     * Sets output's typeId and subTypeId according to subType, if subType is a
   4717     * valid/known identifier.
   4718     *
   4719     * @return Whether subType is known to ICU. If false, output was not
   4720     * modified.
   4721     */
   4722    static bool findBySubType(StringPiece subType, MeasureUnit* output);
   4723 
   4724    /** Internal version of public API */
   4725    LocalArray<MeasureUnit> splitToSingleUnitsImpl(int32_t& outCount, UErrorCode& status) const;
   4726 
   4727    friend class MeasureUnitImpl;
   4728 
   4729    // For access to findBySubType
   4730    friend class number::impl::LongNameHandler;
   4731 };
   4732 
   4733 // inline impl of @stable ICU 68 method
   4734 inline std::pair<LocalArray<MeasureUnit>, int32_t>
   4735 MeasureUnit::splitToSingleUnits(UErrorCode& status) const {
   4736    int32_t length;
   4737    auto array = splitToSingleUnitsImpl(length, status);
   4738    return std::make_pair(std::move(array), length);
   4739 }
   4740 
   4741 U_NAMESPACE_END
   4742 
   4743 #endif // !UNCONFIG_NO_FORMATTING
   4744 
   4745 #endif /* U_SHOW_CPLUSPLUS_API */
   4746 
   4747 #endif // __MEASUREUNIT_H__