tor-browser

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

measunit.cpp (62840B)


      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 #include "utypeinfo.h" // for 'typeid' to work
     14 
     15 #include "unicode/measunit.h"
     16 
     17 #if !UCONFIG_NO_FORMATTING
     18 
     19 #include "unicode/uenum.h"
     20 #include "unicode/errorcode.h"
     21 #include "ustrenum.h"
     22 #include "cstring.h"
     23 #include "uassert.h"
     24 #include "measunit_impl.h"
     25 
     26 U_NAMESPACE_BEGIN
     27 
     28 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit)
     29 
     30 // All code between the "Start generated code" comment and
     31 // the "End generated code" comment is auto generated code
     32 // and must not be edited manually. For instructions on how to correctly
     33 // update this code, refer to:
     34 // https://icu.unicode.org/design/formatting/measureformat/updating-measure-unit
     35 //
     36 // Start generated code for measunit.cpp
     37 
     38 // Maps from Type ID to offset in gSubTypes.
     39 static const int32_t gOffsets[] = {
     40    0,
     41    2,
     42    8,
     43    21,
     44    34,
     45    38,
     46    340,
     47    351,
     48    370,
     49    378,
     50    392,
     51    396,
     52    400,
     53    408,
     54    439,
     55    443,
     56    445,
     57    462,
     58    463,
     59    469,
     60    481,
     61    487,
     62    492,
     63    494,
     64    538
     65 };
     66 
     67 static const int32_t kCurrencyOffset = 5;
     68 
     69 // Must be sorted alphabetically.
     70 static const char * const gTypes[] = {
     71    "acceleration",
     72    "angle",
     73    "area",
     74    "concentr",
     75    "consumption",
     76    "currency",
     77    "digital",
     78    "duration",
     79    "electric",
     80    "energy",
     81    "force",
     82    "frequency",
     83    "graphics",
     84    "length",
     85    "light",
     86    "magnetic",
     87    "mass",
     88    "none",
     89    "power",
     90    "pressure",
     91    "speed",
     92    "temperature",
     93    "torque",
     94    "volume"
     95 };
     96 
     97 // Must be grouped by type and sorted alphabetically within each type.
     98 static const char * const gSubTypes[] = {
     99    "g-force",
    100    "meter-per-square-second",
    101    "arc-minute",
    102    "arc-second",
    103    "degree",
    104    "radian",
    105    "revolution",
    106    "steradian",
    107    "acre",
    108    "bu-jp",
    109    "cho",
    110    "dunam",
    111    "hectare",
    112    "se-jp",
    113    "square-centimeter",
    114    "square-foot",
    115    "square-inch",
    116    "square-kilometer",
    117    "square-meter",
    118    "square-mile",
    119    "square-yard",
    120    "item",
    121    "karat",
    122    "katal",
    123    "milligram-ofglucose-per-deciliter",
    124    "millimole-per-liter",
    125    "mole",
    126    "ofglucose",
    127    "part",
    128    "part-per-1e6",
    129    "part-per-1e9",
    130    "percent",
    131    "permille",
    132    "permyriad",
    133    "liter-per-100-kilometer",
    134    "liter-per-kilometer",
    135    "mile-per-gallon",
    136    "mile-per-gallon-imperial",
    137    "ADP",
    138    "AED",
    139    "AFA",
    140    "AFN",
    141    "ALK",
    142    "ALL",
    143    "AMD",
    144    "ANG",
    145    "AOA",
    146    "AOK",
    147    "AON",
    148    "AOR",
    149    "ARA",
    150    "ARP",
    151    "ARS",
    152    "ARY",
    153    "ATS",
    154    "AUD",
    155    "AWG",
    156    "AYM",
    157    "AZM",
    158    "AZN",
    159    "BAD",
    160    "BAM",
    161    "BBD",
    162    "BDT",
    163    "BEC",
    164    "BEF",
    165    "BEL",
    166    "BGJ",
    167    "BGK",
    168    "BGL",
    169    "BGN",
    170    "BHD",
    171    "BIF",
    172    "BMD",
    173    "BND",
    174    "BOB",
    175    "BOP",
    176    "BOV",
    177    "BRB",
    178    "BRC",
    179    "BRE",
    180    "BRL",
    181    "BRN",
    182    "BRR",
    183    "BSD",
    184    "BTN",
    185    "BUK",
    186    "BWP",
    187    "BYB",
    188    "BYN",
    189    "BYR",
    190    "BZD",
    191    "CAD",
    192    "CDF",
    193    "CHC",
    194    "CHE",
    195    "CHF",
    196    "CHW",
    197    "CLF",
    198    "CLP",
    199    "CNY",
    200    "COP",
    201    "COU",
    202    "CRC",
    203    "CSD",
    204    "CSJ",
    205    "CSK",
    206    "CUC",
    207    "CUP",
    208    "CVE",
    209    "CYP",
    210    "CZK",
    211    "DDM",
    212    "DEM",
    213    "DJF",
    214    "DKK",
    215    "DOP",
    216    "DZD",
    217    "ECS",
    218    "ECV",
    219    "EEK",
    220    "EGP",
    221    "ERN",
    222    "ESA",
    223    "ESB",
    224    "ESP",
    225    "ETB",
    226    "EUR",
    227    "FIM",
    228    "FJD",
    229    "FKP",
    230    "FRF",
    231    "GBP",
    232    "GEK",
    233    "GEL",
    234    "GHC",
    235    "GHP",
    236    "GHS",
    237    "GIP",
    238    "GMD",
    239    "GNE",
    240    "GNF",
    241    "GNS",
    242    "GQE",
    243    "GRD",
    244    "GTQ",
    245    "GWE",
    246    "GWP",
    247    "GYD",
    248    "HKD",
    249    "HNL",
    250    "HRD",
    251    "HRK",
    252    "HTG",
    253    "HUF",
    254    "IDR",
    255    "IEP",
    256    "ILP",
    257    "ILR",
    258    "ILS",
    259    "INR",
    260    "IQD",
    261    "IRR",
    262    "ISJ",
    263    "ISK",
    264    "ITL",
    265    "JMD",
    266    "JOD",
    267    "JPY",
    268    "KES",
    269    "KGS",
    270    "KHR",
    271    "KMF",
    272    "KPW",
    273    "KRW",
    274    "KWD",
    275    "KYD",
    276    "KZT",
    277    "LAJ",
    278    "LAK",
    279    "LBP",
    280    "LKR",
    281    "LRD",
    282    "LSL",
    283    "LSM",
    284    "LTL",
    285    "LTT",
    286    "LUC",
    287    "LUF",
    288    "LUL",
    289    "LVL",
    290    "LVR",
    291    "LYD",
    292    "MAD",
    293    "MDL",
    294    "MGA",
    295    "MGF",
    296    "MKD",
    297    "MLF",
    298    "MMK",
    299    "MNT",
    300    "MOP",
    301    "MRO",
    302    "MRU",
    303    "MTL",
    304    "MTP",
    305    "MUR",
    306    "MVQ",
    307    "MVR",
    308    "MWK",
    309    "MXN",
    310    "MXP",
    311    "MXV",
    312    "MYR",
    313    "MZE",
    314    "MZM",
    315    "MZN",
    316    "NAD",
    317    "NGN",
    318    "NIC",
    319    "NIO",
    320    "NLG",
    321    "NOK",
    322    "NPR",
    323    "NZD",
    324    "OMR",
    325    "PAB",
    326    "PEH",
    327    "PEI",
    328    "PEN",
    329    "PES",
    330    "PGK",
    331    "PHP",
    332    "PKR",
    333    "PLN",
    334    "PLZ",
    335    "PTE",
    336    "PYG",
    337    "QAR",
    338    "RHD",
    339    "ROK",
    340    "ROL",
    341    "RON",
    342    "RSD",
    343    "RUB",
    344    "RUR",
    345    "RWF",
    346    "SAR",
    347    "SBD",
    348    "SCR",
    349    "SDD",
    350    "SDG",
    351    "SDP",
    352    "SEK",
    353    "SGD",
    354    "SHP",
    355    "SIT",
    356    "SKK",
    357    "SLE",
    358    "SLL",
    359    "SOS",
    360    "SRD",
    361    "SRG",
    362    "SSP",
    363    "STD",
    364    "STN",
    365    "SUR",
    366    "SVC",
    367    "SYP",
    368    "SZL",
    369    "THB",
    370    "TJR",
    371    "TJS",
    372    "TMM",
    373    "TMT",
    374    "TND",
    375    "TOP",
    376    "TPE",
    377    "TRL",
    378    "TRY",
    379    "TTD",
    380    "TWD",
    381    "TZS",
    382    "UAH",
    383    "UAK",
    384    "UGS",
    385    "UGW",
    386    "UGX",
    387    "USD",
    388    "USN",
    389    "USS",
    390    "UYI",
    391    "UYN",
    392    "UYP",
    393    "UYU",
    394    "UYW",
    395    "UZS",
    396    "VEB",
    397    "VED",
    398    "VEF",
    399    "VES",
    400    "VNC",
    401    "VND",
    402    "VUV",
    403    "WST",
    404    "XAF",
    405    "XAG",
    406    "XAU",
    407    "XBA",
    408    "XBB",
    409    "XBC",
    410    "XBD",
    411    "XCD",
    412    "XDR",
    413    "XEU",
    414    "XOF",
    415    "XPD",
    416    "XPF",
    417    "XPT",
    418    "XSU",
    419    "XTS",
    420    "XUA",
    421    "XXX",
    422    "YDD",
    423    "YER",
    424    "YUD",
    425    "YUM",
    426    "YUN",
    427    "ZAL",
    428    "ZAR",
    429    "ZMK",
    430    "ZMW",
    431    "ZRN",
    432    "ZRZ",
    433    "ZWC",
    434    "ZWD",
    435    "ZWG",
    436    "ZWL",
    437    "ZWN",
    438    "ZWR",
    439    "bit",
    440    "byte",
    441    "gigabit",
    442    "gigabyte",
    443    "kilobit",
    444    "kilobyte",
    445    "megabit",
    446    "megabyte",
    447    "petabyte",
    448    "terabit",
    449    "terabyte",
    450    "century",
    451    "day",
    452    "day-person",
    453    "decade",
    454    "fortnight",
    455    "hour",
    456    "microsecond",
    457    "millisecond",
    458    "minute",
    459    "month",
    460    "month-person",
    461    "nanosecond",
    462    "night",
    463    "quarter",
    464    "second",
    465    "week",
    466    "week-person",
    467    "year",
    468    "year-person",
    469    "ampere",
    470    "coulomb",
    471    "farad",
    472    "henry",
    473    "milliampere",
    474    "ohm",
    475    "siemens",
    476    "volt",
    477    "becquerel",
    478    "british-thermal-unit",
    479    "british-thermal-unit-it",
    480    "calorie",
    481    "calorie-it",
    482    "electronvolt",
    483    "foodcalorie",
    484    "gray",
    485    "joule",
    486    "kilocalorie",
    487    "kilojoule",
    488    "kilowatt-hour",
    489    "sievert",
    490    "therm-us",
    491    "kilogram-force",
    492    "kilowatt-hour-per-100-kilometer",
    493    "newton",
    494    "pound-force",
    495    "gigahertz",
    496    "hertz",
    497    "kilohertz",
    498    "megahertz",
    499    "dot",
    500    "dot-per-centimeter",
    501    "dot-per-inch",
    502    "em",
    503    "megapixel",
    504    "pixel",
    505    "pixel-per-centimeter",
    506    "pixel-per-inch",
    507    "astronomical-unit",
    508    "centimeter",
    509    "chain",
    510    "decimeter",
    511    "earth-radius",
    512    "fathom",
    513    "foot",
    514    "furlong",
    515    "inch",
    516    "jo-jp",
    517    "ken",
    518    "kilometer",
    519    "light-year",
    520    "meter",
    521    "micrometer",
    522    "mile",
    523    "mile-scandinavian",
    524    "millimeter",
    525    "nanometer",
    526    "nautical-mile",
    527    "parsec",
    528    "picometer",
    529    "point",
    530    "ri-jp",
    531    "rin",
    532    "rod",
    533    "shaku-cloth",
    534    "shaku-length",
    535    "solar-radius",
    536    "sun",
    537    "yard",
    538    "candela",
    539    "lumen",
    540    "lux",
    541    "solar-luminosity",
    542    "tesla",
    543    "weber",
    544    "carat",
    545    "dalton",
    546    "earth-mass",
    547    "fun",
    548    "grain",
    549    "gram",
    550    "kilogram",
    551    "microgram",
    552    "milligram",
    553    "ounce",
    554    "ounce-troy",
    555    "pound",
    556    "slug",
    557    "solar-mass",
    558    "stone",
    559    "ton",
    560    "tonne",
    561    "",
    562    "gigawatt",
    563    "horsepower",
    564    "kilowatt",
    565    "megawatt",
    566    "milliwatt",
    567    "watt",
    568    "atmosphere",
    569    "bar",
    570    "gasoline-energy-density",
    571    "hectopascal",
    572    "inch-ofhg",
    573    "kilopascal",
    574    "megapascal",
    575    "millibar",
    576    "millimeter-ofhg",
    577    "ofhg",
    578    "pascal",
    579    "pound-force-per-square-inch",
    580    "beaufort",
    581    "kilometer-per-hour",
    582    "knot",
    583    "light-speed",
    584    "meter-per-second",
    585    "mile-per-hour",
    586    "celsius",
    587    "fahrenheit",
    588    "generic",
    589    "kelvin",
    590    "rankine",
    591    "newton-meter",
    592    "pound-force-foot",
    593    "acre-foot",
    594    "barrel",
    595    "bushel",
    596    "centiliter",
    597    "cubic-centimeter",
    598    "cubic-foot",
    599    "cubic-inch",
    600    "cubic-kilometer",
    601    "cubic-meter",
    602    "cubic-mile",
    603    "cubic-yard",
    604    "cup",
    605    "cup-imperial",
    606    "cup-jp",
    607    "cup-metric",
    608    "deciliter",
    609    "dessert-spoon",
    610    "dessert-spoon-imperial",
    611    "dram",
    612    "drop",
    613    "fluid-ounce",
    614    "fluid-ounce-imperial",
    615    "fluid-ounce-metric",
    616    "gallon",
    617    "gallon-imperial",
    618    "hectoliter",
    619    "jigger",
    620    "koku",
    621    "kosaji",
    622    "liter",
    623    "megaliter",
    624    "milliliter",
    625    "osaji",
    626    "pinch",
    627    "pint",
    628    "pint-imperial",
    629    "pint-metric",
    630    "quart",
    631    "quart-imperial",
    632    "sai",
    633    "shaku",
    634    "tablespoon",
    635    "teaspoon",
    636    "to-jp"
    637 };
    638 
    639 // Shortcuts to the base unit in order to make the default constructor fast
    640 static const int32_t kBaseTypeIdx = 17;
    641 static const int32_t kBaseSubTypeIdx = 0;
    642 
    643 MeasureUnit *MeasureUnit::createGForce(UErrorCode &status) {
    644    return MeasureUnit::create(0, 0, status);
    645 }
    646 
    647 MeasureUnit MeasureUnit::getGForce() {
    648    return MeasureUnit(0, 0);
    649 }
    650 
    651 MeasureUnit *MeasureUnit::createMeterPerSecondSquared(UErrorCode &status) {
    652    return MeasureUnit::create(0, 1, status);
    653 }
    654 
    655 MeasureUnit MeasureUnit::getMeterPerSecondSquared() {
    656    return MeasureUnit(0, 1);
    657 }
    658 
    659 MeasureUnit *MeasureUnit::createArcMinute(UErrorCode &status) {
    660    return MeasureUnit::create(1, 0, status);
    661 }
    662 
    663 MeasureUnit MeasureUnit::getArcMinute() {
    664    return MeasureUnit(1, 0);
    665 }
    666 
    667 MeasureUnit *MeasureUnit::createArcSecond(UErrorCode &status) {
    668    return MeasureUnit::create(1, 1, status);
    669 }
    670 
    671 MeasureUnit MeasureUnit::getArcSecond() {
    672    return MeasureUnit(1, 1);
    673 }
    674 
    675 MeasureUnit *MeasureUnit::createDegree(UErrorCode &status) {
    676    return MeasureUnit::create(1, 2, status);
    677 }
    678 
    679 MeasureUnit MeasureUnit::getDegree() {
    680    return MeasureUnit(1, 2);
    681 }
    682 
    683 MeasureUnit *MeasureUnit::createRadian(UErrorCode &status) {
    684    return MeasureUnit::create(1, 3, status);
    685 }
    686 
    687 MeasureUnit MeasureUnit::getRadian() {
    688    return MeasureUnit(1, 3);
    689 }
    690 
    691 MeasureUnit *MeasureUnit::createRevolutionAngle(UErrorCode &status) {
    692    return MeasureUnit::create(1, 4, status);
    693 }
    694 
    695 MeasureUnit MeasureUnit::getRevolutionAngle() {
    696    return MeasureUnit(1, 4);
    697 }
    698 
    699 MeasureUnit *MeasureUnit::createSteradian(UErrorCode &status) {
    700    return MeasureUnit::create(1, 5, status);
    701 }
    702 
    703 MeasureUnit MeasureUnit::getSteradian() {
    704    return MeasureUnit(1, 5);
    705 }
    706 
    707 MeasureUnit *MeasureUnit::createAcre(UErrorCode &status) {
    708    return MeasureUnit::create(2, 0, status);
    709 }
    710 
    711 MeasureUnit MeasureUnit::getAcre() {
    712    return MeasureUnit(2, 0);
    713 }
    714 
    715 MeasureUnit *MeasureUnit::createBuJp(UErrorCode &status) {
    716    return MeasureUnit::create(2, 1, status);
    717 }
    718 
    719 MeasureUnit MeasureUnit::getBuJp() {
    720    return MeasureUnit(2, 1);
    721 }
    722 
    723 MeasureUnit *MeasureUnit::createCho(UErrorCode &status) {
    724    return MeasureUnit::create(2, 2, status);
    725 }
    726 
    727 MeasureUnit MeasureUnit::getCho() {
    728    return MeasureUnit(2, 2);
    729 }
    730 
    731 MeasureUnit *MeasureUnit::createDunam(UErrorCode &status) {
    732    return MeasureUnit::create(2, 3, status);
    733 }
    734 
    735 MeasureUnit MeasureUnit::getDunam() {
    736    return MeasureUnit(2, 3);
    737 }
    738 
    739 MeasureUnit *MeasureUnit::createHectare(UErrorCode &status) {
    740    return MeasureUnit::create(2, 4, status);
    741 }
    742 
    743 MeasureUnit MeasureUnit::getHectare() {
    744    return MeasureUnit(2, 4);
    745 }
    746 
    747 MeasureUnit *MeasureUnit::createSeJp(UErrorCode &status) {
    748    return MeasureUnit::create(2, 5, status);
    749 }
    750 
    751 MeasureUnit MeasureUnit::getSeJp() {
    752    return MeasureUnit(2, 5);
    753 }
    754 
    755 MeasureUnit *MeasureUnit::createSquareCentimeter(UErrorCode &status) {
    756    return MeasureUnit::create(2, 6, status);
    757 }
    758 
    759 MeasureUnit MeasureUnit::getSquareCentimeter() {
    760    return MeasureUnit(2, 6);
    761 }
    762 
    763 MeasureUnit *MeasureUnit::createSquareFoot(UErrorCode &status) {
    764    return MeasureUnit::create(2, 7, status);
    765 }
    766 
    767 MeasureUnit MeasureUnit::getSquareFoot() {
    768    return MeasureUnit(2, 7);
    769 }
    770 
    771 MeasureUnit *MeasureUnit::createSquareInch(UErrorCode &status) {
    772    return MeasureUnit::create(2, 8, status);
    773 }
    774 
    775 MeasureUnit MeasureUnit::getSquareInch() {
    776    return MeasureUnit(2, 8);
    777 }
    778 
    779 MeasureUnit *MeasureUnit::createSquareKilometer(UErrorCode &status) {
    780    return MeasureUnit::create(2, 9, status);
    781 }
    782 
    783 MeasureUnit MeasureUnit::getSquareKilometer() {
    784    return MeasureUnit(2, 9);
    785 }
    786 
    787 MeasureUnit *MeasureUnit::createSquareMeter(UErrorCode &status) {
    788    return MeasureUnit::create(2, 10, status);
    789 }
    790 
    791 MeasureUnit MeasureUnit::getSquareMeter() {
    792    return MeasureUnit(2, 10);
    793 }
    794 
    795 MeasureUnit *MeasureUnit::createSquareMile(UErrorCode &status) {
    796    return MeasureUnit::create(2, 11, status);
    797 }
    798 
    799 MeasureUnit MeasureUnit::getSquareMile() {
    800    return MeasureUnit(2, 11);
    801 }
    802 
    803 MeasureUnit *MeasureUnit::createSquareYard(UErrorCode &status) {
    804    return MeasureUnit::create(2, 12, status);
    805 }
    806 
    807 MeasureUnit MeasureUnit::getSquareYard() {
    808    return MeasureUnit(2, 12);
    809 }
    810 
    811 MeasureUnit *MeasureUnit::createItem(UErrorCode &status) {
    812    return MeasureUnit::create(3, 0, status);
    813 }
    814 
    815 MeasureUnit MeasureUnit::getItem() {
    816    return MeasureUnit(3, 0);
    817 }
    818 
    819 MeasureUnit *MeasureUnit::createKarat(UErrorCode &status) {
    820    return MeasureUnit::create(3, 1, status);
    821 }
    822 
    823 MeasureUnit MeasureUnit::getKarat() {
    824    return MeasureUnit(3, 1);
    825 }
    826 
    827 MeasureUnit *MeasureUnit::createKatal(UErrorCode &status) {
    828    return MeasureUnit::create(3, 2, status);
    829 }
    830 
    831 MeasureUnit MeasureUnit::getKatal() {
    832    return MeasureUnit(3, 2);
    833 }
    834 
    835 MeasureUnit *MeasureUnit::createMilligramOfglucosePerDeciliter(UErrorCode &status) {
    836    return MeasureUnit::create(3, 3, status);
    837 }
    838 
    839 MeasureUnit MeasureUnit::getMilligramOfglucosePerDeciliter() {
    840    return MeasureUnit(3, 3);
    841 }
    842 
    843 MeasureUnit *MeasureUnit::createMilligramPerDeciliter(UErrorCode &status) {
    844    return MeasureUnit::create(3, 3, status);
    845 }
    846 
    847 MeasureUnit MeasureUnit::getMilligramPerDeciliter() {
    848    return MeasureUnit(3, 3);
    849 }
    850 
    851 MeasureUnit *MeasureUnit::createMillimolePerLiter(UErrorCode &status) {
    852    return MeasureUnit::create(3, 4, status);
    853 }
    854 
    855 MeasureUnit MeasureUnit::getMillimolePerLiter() {
    856    return MeasureUnit(3, 4);
    857 }
    858 
    859 MeasureUnit *MeasureUnit::createMole(UErrorCode &status) {
    860    return MeasureUnit::create(3, 5, status);
    861 }
    862 
    863 MeasureUnit MeasureUnit::getMole() {
    864    return MeasureUnit(3, 5);
    865 }
    866 
    867 MeasureUnit *MeasureUnit::createOfglucose(UErrorCode &status) {
    868    return MeasureUnit::create(3, 6, status);
    869 }
    870 
    871 MeasureUnit MeasureUnit::getOfglucose() {
    872    return MeasureUnit(3, 6);
    873 }
    874 
    875 MeasureUnit *MeasureUnit::createPart(UErrorCode &status) {
    876    return MeasureUnit::create(3, 7, status);
    877 }
    878 
    879 MeasureUnit MeasureUnit::getPart() {
    880    return MeasureUnit(3, 7);
    881 }
    882 
    883 MeasureUnit *MeasureUnit::createPartPer1E6(UErrorCode &status) {
    884    return MeasureUnit::create(3, 8, status);
    885 }
    886 
    887 MeasureUnit MeasureUnit::getPartPer1E6() {
    888    return MeasureUnit(3, 8);
    889 }
    890 
    891 MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
    892    return MeasureUnit::create(3, 8, status);
    893 }
    894 
    895 MeasureUnit MeasureUnit::getPartPerMillion() {
    896    return MeasureUnit(3, 8);
    897 }
    898 
    899 MeasureUnit *MeasureUnit::createPartPer1E9(UErrorCode &status) {
    900    return MeasureUnit::create(3, 9, status);
    901 }
    902 
    903 MeasureUnit MeasureUnit::getPartPer1E9() {
    904    return MeasureUnit(3, 9);
    905 }
    906 
    907 MeasureUnit *MeasureUnit::createPercent(UErrorCode &status) {
    908    return MeasureUnit::create(3, 10, status);
    909 }
    910 
    911 MeasureUnit MeasureUnit::getPercent() {
    912    return MeasureUnit(3, 10);
    913 }
    914 
    915 MeasureUnit *MeasureUnit::createPermille(UErrorCode &status) {
    916    return MeasureUnit::create(3, 11, status);
    917 }
    918 
    919 MeasureUnit MeasureUnit::getPermille() {
    920    return MeasureUnit(3, 11);
    921 }
    922 
    923 MeasureUnit *MeasureUnit::createPermyriad(UErrorCode &status) {
    924    return MeasureUnit::create(3, 12, status);
    925 }
    926 
    927 MeasureUnit MeasureUnit::getPermyriad() {
    928    return MeasureUnit(3, 12);
    929 }
    930 
    931 MeasureUnit *MeasureUnit::createLiterPer100Kilometers(UErrorCode &status) {
    932    return MeasureUnit::create(4, 0, status);
    933 }
    934 
    935 MeasureUnit MeasureUnit::getLiterPer100Kilometers() {
    936    return MeasureUnit(4, 0);
    937 }
    938 
    939 MeasureUnit *MeasureUnit::createLiterPerKilometer(UErrorCode &status) {
    940    return MeasureUnit::create(4, 1, status);
    941 }
    942 
    943 MeasureUnit MeasureUnit::getLiterPerKilometer() {
    944    return MeasureUnit(4, 1);
    945 }
    946 
    947 MeasureUnit *MeasureUnit::createMilePerGallon(UErrorCode &status) {
    948    return MeasureUnit::create(4, 2, status);
    949 }
    950 
    951 MeasureUnit MeasureUnit::getMilePerGallon() {
    952    return MeasureUnit(4, 2);
    953 }
    954 
    955 MeasureUnit *MeasureUnit::createMilePerGallonImperial(UErrorCode &status) {
    956    return MeasureUnit::create(4, 3, status);
    957 }
    958 
    959 MeasureUnit MeasureUnit::getMilePerGallonImperial() {
    960    return MeasureUnit(4, 3);
    961 }
    962 
    963 MeasureUnit *MeasureUnit::createBit(UErrorCode &status) {
    964    return MeasureUnit::create(6, 0, status);
    965 }
    966 
    967 MeasureUnit MeasureUnit::getBit() {
    968    return MeasureUnit(6, 0);
    969 }
    970 
    971 MeasureUnit *MeasureUnit::createByte(UErrorCode &status) {
    972    return MeasureUnit::create(6, 1, status);
    973 }
    974 
    975 MeasureUnit MeasureUnit::getByte() {
    976    return MeasureUnit(6, 1);
    977 }
    978 
    979 MeasureUnit *MeasureUnit::createGigabit(UErrorCode &status) {
    980    return MeasureUnit::create(6, 2, status);
    981 }
    982 
    983 MeasureUnit MeasureUnit::getGigabit() {
    984    return MeasureUnit(6, 2);
    985 }
    986 
    987 MeasureUnit *MeasureUnit::createGigabyte(UErrorCode &status) {
    988    return MeasureUnit::create(6, 3, status);
    989 }
    990 
    991 MeasureUnit MeasureUnit::getGigabyte() {
    992    return MeasureUnit(6, 3);
    993 }
    994 
    995 MeasureUnit *MeasureUnit::createKilobit(UErrorCode &status) {
    996    return MeasureUnit::create(6, 4, status);
    997 }
    998 
    999 MeasureUnit MeasureUnit::getKilobit() {
   1000    return MeasureUnit(6, 4);
   1001 }
   1002 
   1003 MeasureUnit *MeasureUnit::createKilobyte(UErrorCode &status) {
   1004    return MeasureUnit::create(6, 5, status);
   1005 }
   1006 
   1007 MeasureUnit MeasureUnit::getKilobyte() {
   1008    return MeasureUnit(6, 5);
   1009 }
   1010 
   1011 MeasureUnit *MeasureUnit::createMegabit(UErrorCode &status) {
   1012    return MeasureUnit::create(6, 6, status);
   1013 }
   1014 
   1015 MeasureUnit MeasureUnit::getMegabit() {
   1016    return MeasureUnit(6, 6);
   1017 }
   1018 
   1019 MeasureUnit *MeasureUnit::createMegabyte(UErrorCode &status) {
   1020    return MeasureUnit::create(6, 7, status);
   1021 }
   1022 
   1023 MeasureUnit MeasureUnit::getMegabyte() {
   1024    return MeasureUnit(6, 7);
   1025 }
   1026 
   1027 MeasureUnit *MeasureUnit::createPetabyte(UErrorCode &status) {
   1028    return MeasureUnit::create(6, 8, status);
   1029 }
   1030 
   1031 MeasureUnit MeasureUnit::getPetabyte() {
   1032    return MeasureUnit(6, 8);
   1033 }
   1034 
   1035 MeasureUnit *MeasureUnit::createTerabit(UErrorCode &status) {
   1036    return MeasureUnit::create(6, 9, status);
   1037 }
   1038 
   1039 MeasureUnit MeasureUnit::getTerabit() {
   1040    return MeasureUnit(6, 9);
   1041 }
   1042 
   1043 MeasureUnit *MeasureUnit::createTerabyte(UErrorCode &status) {
   1044    return MeasureUnit::create(6, 10, status);
   1045 }
   1046 
   1047 MeasureUnit MeasureUnit::getTerabyte() {
   1048    return MeasureUnit(6, 10);
   1049 }
   1050 
   1051 MeasureUnit *MeasureUnit::createCentury(UErrorCode &status) {
   1052    return MeasureUnit::create(7, 0, status);
   1053 }
   1054 
   1055 MeasureUnit MeasureUnit::getCentury() {
   1056    return MeasureUnit(7, 0);
   1057 }
   1058 
   1059 MeasureUnit *MeasureUnit::createDay(UErrorCode &status) {
   1060    return MeasureUnit::create(7, 1, status);
   1061 }
   1062 
   1063 MeasureUnit MeasureUnit::getDay() {
   1064    return MeasureUnit(7, 1);
   1065 }
   1066 
   1067 MeasureUnit *MeasureUnit::createDayPerson(UErrorCode &status) {
   1068    return MeasureUnit::create(7, 2, status);
   1069 }
   1070 
   1071 MeasureUnit MeasureUnit::getDayPerson() {
   1072    return MeasureUnit(7, 2);
   1073 }
   1074 
   1075 MeasureUnit *MeasureUnit::createDecade(UErrorCode &status) {
   1076    return MeasureUnit::create(7, 3, status);
   1077 }
   1078 
   1079 MeasureUnit MeasureUnit::getDecade() {
   1080    return MeasureUnit(7, 3);
   1081 }
   1082 
   1083 MeasureUnit *MeasureUnit::createFortnight(UErrorCode &status) {
   1084    return MeasureUnit::create(7, 4, status);
   1085 }
   1086 
   1087 MeasureUnit MeasureUnit::getFortnight() {
   1088    return MeasureUnit(7, 4);
   1089 }
   1090 
   1091 MeasureUnit *MeasureUnit::createHour(UErrorCode &status) {
   1092    return MeasureUnit::create(7, 5, status);
   1093 }
   1094 
   1095 MeasureUnit MeasureUnit::getHour() {
   1096    return MeasureUnit(7, 5);
   1097 }
   1098 
   1099 MeasureUnit *MeasureUnit::createMicrosecond(UErrorCode &status) {
   1100    return MeasureUnit::create(7, 6, status);
   1101 }
   1102 
   1103 MeasureUnit MeasureUnit::getMicrosecond() {
   1104    return MeasureUnit(7, 6);
   1105 }
   1106 
   1107 MeasureUnit *MeasureUnit::createMillisecond(UErrorCode &status) {
   1108    return MeasureUnit::create(7, 7, status);
   1109 }
   1110 
   1111 MeasureUnit MeasureUnit::getMillisecond() {
   1112    return MeasureUnit(7, 7);
   1113 }
   1114 
   1115 MeasureUnit *MeasureUnit::createMinute(UErrorCode &status) {
   1116    return MeasureUnit::create(7, 8, status);
   1117 }
   1118 
   1119 MeasureUnit MeasureUnit::getMinute() {
   1120    return MeasureUnit(7, 8);
   1121 }
   1122 
   1123 MeasureUnit *MeasureUnit::createMonth(UErrorCode &status) {
   1124    return MeasureUnit::create(7, 9, status);
   1125 }
   1126 
   1127 MeasureUnit MeasureUnit::getMonth() {
   1128    return MeasureUnit(7, 9);
   1129 }
   1130 
   1131 MeasureUnit *MeasureUnit::createMonthPerson(UErrorCode &status) {
   1132    return MeasureUnit::create(7, 10, status);
   1133 }
   1134 
   1135 MeasureUnit MeasureUnit::getMonthPerson() {
   1136    return MeasureUnit(7, 10);
   1137 }
   1138 
   1139 MeasureUnit *MeasureUnit::createNanosecond(UErrorCode &status) {
   1140    return MeasureUnit::create(7, 11, status);
   1141 }
   1142 
   1143 MeasureUnit MeasureUnit::getNanosecond() {
   1144    return MeasureUnit(7, 11);
   1145 }
   1146 
   1147 MeasureUnit *MeasureUnit::createNight(UErrorCode &status) {
   1148    return MeasureUnit::create(7, 12, status);
   1149 }
   1150 
   1151 MeasureUnit MeasureUnit::getNight() {
   1152    return MeasureUnit(7, 12);
   1153 }
   1154 
   1155 MeasureUnit *MeasureUnit::createQuarter(UErrorCode &status) {
   1156    return MeasureUnit::create(7, 13, status);
   1157 }
   1158 
   1159 MeasureUnit MeasureUnit::getQuarter() {
   1160    return MeasureUnit(7, 13);
   1161 }
   1162 
   1163 MeasureUnit *MeasureUnit::createSecond(UErrorCode &status) {
   1164    return MeasureUnit::create(7, 14, status);
   1165 }
   1166 
   1167 MeasureUnit MeasureUnit::getSecond() {
   1168    return MeasureUnit(7, 14);
   1169 }
   1170 
   1171 MeasureUnit *MeasureUnit::createWeek(UErrorCode &status) {
   1172    return MeasureUnit::create(7, 15, status);
   1173 }
   1174 
   1175 MeasureUnit MeasureUnit::getWeek() {
   1176    return MeasureUnit(7, 15);
   1177 }
   1178 
   1179 MeasureUnit *MeasureUnit::createWeekPerson(UErrorCode &status) {
   1180    return MeasureUnit::create(7, 16, status);
   1181 }
   1182 
   1183 MeasureUnit MeasureUnit::getWeekPerson() {
   1184    return MeasureUnit(7, 16);
   1185 }
   1186 
   1187 MeasureUnit *MeasureUnit::createYear(UErrorCode &status) {
   1188    return MeasureUnit::create(7, 17, status);
   1189 }
   1190 
   1191 MeasureUnit MeasureUnit::getYear() {
   1192    return MeasureUnit(7, 17);
   1193 }
   1194 
   1195 MeasureUnit *MeasureUnit::createYearPerson(UErrorCode &status) {
   1196    return MeasureUnit::create(7, 18, status);
   1197 }
   1198 
   1199 MeasureUnit MeasureUnit::getYearPerson() {
   1200    return MeasureUnit(7, 18);
   1201 }
   1202 
   1203 MeasureUnit *MeasureUnit::createAmpere(UErrorCode &status) {
   1204    return MeasureUnit::create(8, 0, status);
   1205 }
   1206 
   1207 MeasureUnit MeasureUnit::getAmpere() {
   1208    return MeasureUnit(8, 0);
   1209 }
   1210 
   1211 MeasureUnit *MeasureUnit::createCoulomb(UErrorCode &status) {
   1212    return MeasureUnit::create(8, 1, status);
   1213 }
   1214 
   1215 MeasureUnit MeasureUnit::getCoulomb() {
   1216    return MeasureUnit(8, 1);
   1217 }
   1218 
   1219 MeasureUnit *MeasureUnit::createFarad(UErrorCode &status) {
   1220    return MeasureUnit::create(8, 2, status);
   1221 }
   1222 
   1223 MeasureUnit MeasureUnit::getFarad() {
   1224    return MeasureUnit(8, 2);
   1225 }
   1226 
   1227 MeasureUnit *MeasureUnit::createHenry(UErrorCode &status) {
   1228    return MeasureUnit::create(8, 3, status);
   1229 }
   1230 
   1231 MeasureUnit MeasureUnit::getHenry() {
   1232    return MeasureUnit(8, 3);
   1233 }
   1234 
   1235 MeasureUnit *MeasureUnit::createMilliampere(UErrorCode &status) {
   1236    return MeasureUnit::create(8, 4, status);
   1237 }
   1238 
   1239 MeasureUnit MeasureUnit::getMilliampere() {
   1240    return MeasureUnit(8, 4);
   1241 }
   1242 
   1243 MeasureUnit *MeasureUnit::createOhm(UErrorCode &status) {
   1244    return MeasureUnit::create(8, 5, status);
   1245 }
   1246 
   1247 MeasureUnit MeasureUnit::getOhm() {
   1248    return MeasureUnit(8, 5);
   1249 }
   1250 
   1251 MeasureUnit *MeasureUnit::createSiemens(UErrorCode &status) {
   1252    return MeasureUnit::create(8, 6, status);
   1253 }
   1254 
   1255 MeasureUnit MeasureUnit::getSiemens() {
   1256    return MeasureUnit(8, 6);
   1257 }
   1258 
   1259 MeasureUnit *MeasureUnit::createVolt(UErrorCode &status) {
   1260    return MeasureUnit::create(8, 7, status);
   1261 }
   1262 
   1263 MeasureUnit MeasureUnit::getVolt() {
   1264    return MeasureUnit(8, 7);
   1265 }
   1266 
   1267 MeasureUnit *MeasureUnit::createBecquerel(UErrorCode &status) {
   1268    return MeasureUnit::create(9, 0, status);
   1269 }
   1270 
   1271 MeasureUnit MeasureUnit::getBecquerel() {
   1272    return MeasureUnit(9, 0);
   1273 }
   1274 
   1275 MeasureUnit *MeasureUnit::createBritishThermalUnit(UErrorCode &status) {
   1276    return MeasureUnit::create(9, 1, status);
   1277 }
   1278 
   1279 MeasureUnit MeasureUnit::getBritishThermalUnit() {
   1280    return MeasureUnit(9, 1);
   1281 }
   1282 
   1283 MeasureUnit *MeasureUnit::createBritishThermalUnitIt(UErrorCode &status) {
   1284    return MeasureUnit::create(9, 2, status);
   1285 }
   1286 
   1287 MeasureUnit MeasureUnit::getBritishThermalUnitIt() {
   1288    return MeasureUnit(9, 2);
   1289 }
   1290 
   1291 MeasureUnit *MeasureUnit::createCalorie(UErrorCode &status) {
   1292    return MeasureUnit::create(9, 3, status);
   1293 }
   1294 
   1295 MeasureUnit MeasureUnit::getCalorie() {
   1296    return MeasureUnit(9, 3);
   1297 }
   1298 
   1299 MeasureUnit *MeasureUnit::createCalorieIt(UErrorCode &status) {
   1300    return MeasureUnit::create(9, 4, status);
   1301 }
   1302 
   1303 MeasureUnit MeasureUnit::getCalorieIt() {
   1304    return MeasureUnit(9, 4);
   1305 }
   1306 
   1307 MeasureUnit *MeasureUnit::createElectronvolt(UErrorCode &status) {
   1308    return MeasureUnit::create(9, 5, status);
   1309 }
   1310 
   1311 MeasureUnit MeasureUnit::getElectronvolt() {
   1312    return MeasureUnit(9, 5);
   1313 }
   1314 
   1315 MeasureUnit *MeasureUnit::createFoodcalorie(UErrorCode &status) {
   1316    return MeasureUnit::create(9, 6, status);
   1317 }
   1318 
   1319 MeasureUnit MeasureUnit::getFoodcalorie() {
   1320    return MeasureUnit(9, 6);
   1321 }
   1322 
   1323 MeasureUnit *MeasureUnit::createGray(UErrorCode &status) {
   1324    return MeasureUnit::create(9, 7, status);
   1325 }
   1326 
   1327 MeasureUnit MeasureUnit::getGray() {
   1328    return MeasureUnit(9, 7);
   1329 }
   1330 
   1331 MeasureUnit *MeasureUnit::createJoule(UErrorCode &status) {
   1332    return MeasureUnit::create(9, 8, status);
   1333 }
   1334 
   1335 MeasureUnit MeasureUnit::getJoule() {
   1336    return MeasureUnit(9, 8);
   1337 }
   1338 
   1339 MeasureUnit *MeasureUnit::createKilocalorie(UErrorCode &status) {
   1340    return MeasureUnit::create(9, 9, status);
   1341 }
   1342 
   1343 MeasureUnit MeasureUnit::getKilocalorie() {
   1344    return MeasureUnit(9, 9);
   1345 }
   1346 
   1347 MeasureUnit *MeasureUnit::createKilojoule(UErrorCode &status) {
   1348    return MeasureUnit::create(9, 10, status);
   1349 }
   1350 
   1351 MeasureUnit MeasureUnit::getKilojoule() {
   1352    return MeasureUnit(9, 10);
   1353 }
   1354 
   1355 MeasureUnit *MeasureUnit::createKilowattHour(UErrorCode &status) {
   1356    return MeasureUnit::create(9, 11, status);
   1357 }
   1358 
   1359 MeasureUnit MeasureUnit::getKilowattHour() {
   1360    return MeasureUnit(9, 11);
   1361 }
   1362 
   1363 MeasureUnit *MeasureUnit::createSievert(UErrorCode &status) {
   1364    return MeasureUnit::create(9, 12, status);
   1365 }
   1366 
   1367 MeasureUnit MeasureUnit::getSievert() {
   1368    return MeasureUnit(9, 12);
   1369 }
   1370 
   1371 MeasureUnit *MeasureUnit::createThermUs(UErrorCode &status) {
   1372    return MeasureUnit::create(9, 13, status);
   1373 }
   1374 
   1375 MeasureUnit MeasureUnit::getThermUs() {
   1376    return MeasureUnit(9, 13);
   1377 }
   1378 
   1379 MeasureUnit *MeasureUnit::createKilogramForce(UErrorCode &status) {
   1380    return MeasureUnit::create(10, 0, status);
   1381 }
   1382 
   1383 MeasureUnit MeasureUnit::getKilogramForce() {
   1384    return MeasureUnit(10, 0);
   1385 }
   1386 
   1387 MeasureUnit *MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode &status) {
   1388    return MeasureUnit::create(10, 1, status);
   1389 }
   1390 
   1391 MeasureUnit MeasureUnit::getKilowattHourPer100Kilometer() {
   1392    return MeasureUnit(10, 1);
   1393 }
   1394 
   1395 MeasureUnit *MeasureUnit::createNewton(UErrorCode &status) {
   1396    return MeasureUnit::create(10, 2, status);
   1397 }
   1398 
   1399 MeasureUnit MeasureUnit::getNewton() {
   1400    return MeasureUnit(10, 2);
   1401 }
   1402 
   1403 MeasureUnit *MeasureUnit::createPoundForce(UErrorCode &status) {
   1404    return MeasureUnit::create(10, 3, status);
   1405 }
   1406 
   1407 MeasureUnit MeasureUnit::getPoundForce() {
   1408    return MeasureUnit(10, 3);
   1409 }
   1410 
   1411 MeasureUnit *MeasureUnit::createGigahertz(UErrorCode &status) {
   1412    return MeasureUnit::create(11, 0, status);
   1413 }
   1414 
   1415 MeasureUnit MeasureUnit::getGigahertz() {
   1416    return MeasureUnit(11, 0);
   1417 }
   1418 
   1419 MeasureUnit *MeasureUnit::createHertz(UErrorCode &status) {
   1420    return MeasureUnit::create(11, 1, status);
   1421 }
   1422 
   1423 MeasureUnit MeasureUnit::getHertz() {
   1424    return MeasureUnit(11, 1);
   1425 }
   1426 
   1427 MeasureUnit *MeasureUnit::createKilohertz(UErrorCode &status) {
   1428    return MeasureUnit::create(11, 2, status);
   1429 }
   1430 
   1431 MeasureUnit MeasureUnit::getKilohertz() {
   1432    return MeasureUnit(11, 2);
   1433 }
   1434 
   1435 MeasureUnit *MeasureUnit::createMegahertz(UErrorCode &status) {
   1436    return MeasureUnit::create(11, 3, status);
   1437 }
   1438 
   1439 MeasureUnit MeasureUnit::getMegahertz() {
   1440    return MeasureUnit(11, 3);
   1441 }
   1442 
   1443 MeasureUnit *MeasureUnit::createDot(UErrorCode &status) {
   1444    return MeasureUnit::create(12, 0, status);
   1445 }
   1446 
   1447 MeasureUnit MeasureUnit::getDot() {
   1448    return MeasureUnit(12, 0);
   1449 }
   1450 
   1451 MeasureUnit *MeasureUnit::createDotPerCentimeter(UErrorCode &status) {
   1452    return MeasureUnit::create(12, 1, status);
   1453 }
   1454 
   1455 MeasureUnit MeasureUnit::getDotPerCentimeter() {
   1456    return MeasureUnit(12, 1);
   1457 }
   1458 
   1459 MeasureUnit *MeasureUnit::createDotPerInch(UErrorCode &status) {
   1460    return MeasureUnit::create(12, 2, status);
   1461 }
   1462 
   1463 MeasureUnit MeasureUnit::getDotPerInch() {
   1464    return MeasureUnit(12, 2);
   1465 }
   1466 
   1467 MeasureUnit *MeasureUnit::createEm(UErrorCode &status) {
   1468    return MeasureUnit::create(12, 3, status);
   1469 }
   1470 
   1471 MeasureUnit MeasureUnit::getEm() {
   1472    return MeasureUnit(12, 3);
   1473 }
   1474 
   1475 MeasureUnit *MeasureUnit::createMegapixel(UErrorCode &status) {
   1476    return MeasureUnit::create(12, 4, status);
   1477 }
   1478 
   1479 MeasureUnit MeasureUnit::getMegapixel() {
   1480    return MeasureUnit(12, 4);
   1481 }
   1482 
   1483 MeasureUnit *MeasureUnit::createPixel(UErrorCode &status) {
   1484    return MeasureUnit::create(12, 5, status);
   1485 }
   1486 
   1487 MeasureUnit MeasureUnit::getPixel() {
   1488    return MeasureUnit(12, 5);
   1489 }
   1490 
   1491 MeasureUnit *MeasureUnit::createPixelPerCentimeter(UErrorCode &status) {
   1492    return MeasureUnit::create(12, 6, status);
   1493 }
   1494 
   1495 MeasureUnit MeasureUnit::getPixelPerCentimeter() {
   1496    return MeasureUnit(12, 6);
   1497 }
   1498 
   1499 MeasureUnit *MeasureUnit::createPixelPerInch(UErrorCode &status) {
   1500    return MeasureUnit::create(12, 7, status);
   1501 }
   1502 
   1503 MeasureUnit MeasureUnit::getPixelPerInch() {
   1504    return MeasureUnit(12, 7);
   1505 }
   1506 
   1507 MeasureUnit *MeasureUnit::createAstronomicalUnit(UErrorCode &status) {
   1508    return MeasureUnit::create(13, 0, status);
   1509 }
   1510 
   1511 MeasureUnit MeasureUnit::getAstronomicalUnit() {
   1512    return MeasureUnit(13, 0);
   1513 }
   1514 
   1515 MeasureUnit *MeasureUnit::createCentimeter(UErrorCode &status) {
   1516    return MeasureUnit::create(13, 1, status);
   1517 }
   1518 
   1519 MeasureUnit MeasureUnit::getCentimeter() {
   1520    return MeasureUnit(13, 1);
   1521 }
   1522 
   1523 MeasureUnit *MeasureUnit::createChain(UErrorCode &status) {
   1524    return MeasureUnit::create(13, 2, status);
   1525 }
   1526 
   1527 MeasureUnit MeasureUnit::getChain() {
   1528    return MeasureUnit(13, 2);
   1529 }
   1530 
   1531 MeasureUnit *MeasureUnit::createDecimeter(UErrorCode &status) {
   1532    return MeasureUnit::create(13, 3, status);
   1533 }
   1534 
   1535 MeasureUnit MeasureUnit::getDecimeter() {
   1536    return MeasureUnit(13, 3);
   1537 }
   1538 
   1539 MeasureUnit *MeasureUnit::createEarthRadius(UErrorCode &status) {
   1540    return MeasureUnit::create(13, 4, status);
   1541 }
   1542 
   1543 MeasureUnit MeasureUnit::getEarthRadius() {
   1544    return MeasureUnit(13, 4);
   1545 }
   1546 
   1547 MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) {
   1548    return MeasureUnit::create(13, 5, status);
   1549 }
   1550 
   1551 MeasureUnit MeasureUnit::getFathom() {
   1552    return MeasureUnit(13, 5);
   1553 }
   1554 
   1555 MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) {
   1556    return MeasureUnit::create(13, 6, status);
   1557 }
   1558 
   1559 MeasureUnit MeasureUnit::getFoot() {
   1560    return MeasureUnit(13, 6);
   1561 }
   1562 
   1563 MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) {
   1564    return MeasureUnit::create(13, 7, status);
   1565 }
   1566 
   1567 MeasureUnit MeasureUnit::getFurlong() {
   1568    return MeasureUnit(13, 7);
   1569 }
   1570 
   1571 MeasureUnit *MeasureUnit::createInch(UErrorCode &status) {
   1572    return MeasureUnit::create(13, 8, status);
   1573 }
   1574 
   1575 MeasureUnit MeasureUnit::getInch() {
   1576    return MeasureUnit(13, 8);
   1577 }
   1578 
   1579 MeasureUnit *MeasureUnit::createJoJp(UErrorCode &status) {
   1580    return MeasureUnit::create(13, 9, status);
   1581 }
   1582 
   1583 MeasureUnit MeasureUnit::getJoJp() {
   1584    return MeasureUnit(13, 9);
   1585 }
   1586 
   1587 MeasureUnit *MeasureUnit::createKen(UErrorCode &status) {
   1588    return MeasureUnit::create(13, 10, status);
   1589 }
   1590 
   1591 MeasureUnit MeasureUnit::getKen() {
   1592    return MeasureUnit(13, 10);
   1593 }
   1594 
   1595 MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) {
   1596    return MeasureUnit::create(13, 11, status);
   1597 }
   1598 
   1599 MeasureUnit MeasureUnit::getKilometer() {
   1600    return MeasureUnit(13, 11);
   1601 }
   1602 
   1603 MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) {
   1604    return MeasureUnit::create(13, 12, status);
   1605 }
   1606 
   1607 MeasureUnit MeasureUnit::getLightYear() {
   1608    return MeasureUnit(13, 12);
   1609 }
   1610 
   1611 MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) {
   1612    return MeasureUnit::create(13, 13, status);
   1613 }
   1614 
   1615 MeasureUnit MeasureUnit::getMeter() {
   1616    return MeasureUnit(13, 13);
   1617 }
   1618 
   1619 MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) {
   1620    return MeasureUnit::create(13, 14, status);
   1621 }
   1622 
   1623 MeasureUnit MeasureUnit::getMicrometer() {
   1624    return MeasureUnit(13, 14);
   1625 }
   1626 
   1627 MeasureUnit *MeasureUnit::createMile(UErrorCode &status) {
   1628    return MeasureUnit::create(13, 15, status);
   1629 }
   1630 
   1631 MeasureUnit MeasureUnit::getMile() {
   1632    return MeasureUnit(13, 15);
   1633 }
   1634 
   1635 MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) {
   1636    return MeasureUnit::create(13, 16, status);
   1637 }
   1638 
   1639 MeasureUnit MeasureUnit::getMileScandinavian() {
   1640    return MeasureUnit(13, 16);
   1641 }
   1642 
   1643 MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) {
   1644    return MeasureUnit::create(13, 17, status);
   1645 }
   1646 
   1647 MeasureUnit MeasureUnit::getMillimeter() {
   1648    return MeasureUnit(13, 17);
   1649 }
   1650 
   1651 MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) {
   1652    return MeasureUnit::create(13, 18, status);
   1653 }
   1654 
   1655 MeasureUnit MeasureUnit::getNanometer() {
   1656    return MeasureUnit(13, 18);
   1657 }
   1658 
   1659 MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) {
   1660    return MeasureUnit::create(13, 19, status);
   1661 }
   1662 
   1663 MeasureUnit MeasureUnit::getNauticalMile() {
   1664    return MeasureUnit(13, 19);
   1665 }
   1666 
   1667 MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) {
   1668    return MeasureUnit::create(13, 20, status);
   1669 }
   1670 
   1671 MeasureUnit MeasureUnit::getParsec() {
   1672    return MeasureUnit(13, 20);
   1673 }
   1674 
   1675 MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) {
   1676    return MeasureUnit::create(13, 21, status);
   1677 }
   1678 
   1679 MeasureUnit MeasureUnit::getPicometer() {
   1680    return MeasureUnit(13, 21);
   1681 }
   1682 
   1683 MeasureUnit *MeasureUnit::createPoint(UErrorCode &status) {
   1684    return MeasureUnit::create(13, 22, status);
   1685 }
   1686 
   1687 MeasureUnit MeasureUnit::getPoint() {
   1688    return MeasureUnit(13, 22);
   1689 }
   1690 
   1691 MeasureUnit *MeasureUnit::createRiJp(UErrorCode &status) {
   1692    return MeasureUnit::create(13, 23, status);
   1693 }
   1694 
   1695 MeasureUnit MeasureUnit::getRiJp() {
   1696    return MeasureUnit(13, 23);
   1697 }
   1698 
   1699 MeasureUnit *MeasureUnit::createRin(UErrorCode &status) {
   1700    return MeasureUnit::create(13, 24, status);
   1701 }
   1702 
   1703 MeasureUnit MeasureUnit::getRin() {
   1704    return MeasureUnit(13, 24);
   1705 }
   1706 
   1707 MeasureUnit *MeasureUnit::createRod(UErrorCode &status) {
   1708    return MeasureUnit::create(13, 25, status);
   1709 }
   1710 
   1711 MeasureUnit MeasureUnit::getRod() {
   1712    return MeasureUnit(13, 25);
   1713 }
   1714 
   1715 MeasureUnit *MeasureUnit::createShakuCloth(UErrorCode &status) {
   1716    return MeasureUnit::create(13, 26, status);
   1717 }
   1718 
   1719 MeasureUnit MeasureUnit::getShakuCloth() {
   1720    return MeasureUnit(13, 26);
   1721 }
   1722 
   1723 MeasureUnit *MeasureUnit::createShakuLength(UErrorCode &status) {
   1724    return MeasureUnit::create(13, 27, status);
   1725 }
   1726 
   1727 MeasureUnit MeasureUnit::getShakuLength() {
   1728    return MeasureUnit(13, 27);
   1729 }
   1730 
   1731 MeasureUnit *MeasureUnit::createSolarRadius(UErrorCode &status) {
   1732    return MeasureUnit::create(13, 28, status);
   1733 }
   1734 
   1735 MeasureUnit MeasureUnit::getSolarRadius() {
   1736    return MeasureUnit(13, 28);
   1737 }
   1738 
   1739 MeasureUnit *MeasureUnit::createSun(UErrorCode &status) {
   1740    return MeasureUnit::create(13, 29, status);
   1741 }
   1742 
   1743 MeasureUnit MeasureUnit::getSun() {
   1744    return MeasureUnit(13, 29);
   1745 }
   1746 
   1747 MeasureUnit *MeasureUnit::createYard(UErrorCode &status) {
   1748    return MeasureUnit::create(13, 30, status);
   1749 }
   1750 
   1751 MeasureUnit MeasureUnit::getYard() {
   1752    return MeasureUnit(13, 30);
   1753 }
   1754 
   1755 MeasureUnit *MeasureUnit::createCandela(UErrorCode &status) {
   1756    return MeasureUnit::create(14, 0, status);
   1757 }
   1758 
   1759 MeasureUnit MeasureUnit::getCandela() {
   1760    return MeasureUnit(14, 0);
   1761 }
   1762 
   1763 MeasureUnit *MeasureUnit::createLumen(UErrorCode &status) {
   1764    return MeasureUnit::create(14, 1, status);
   1765 }
   1766 
   1767 MeasureUnit MeasureUnit::getLumen() {
   1768    return MeasureUnit(14, 1);
   1769 }
   1770 
   1771 MeasureUnit *MeasureUnit::createLux(UErrorCode &status) {
   1772    return MeasureUnit::create(14, 2, status);
   1773 }
   1774 
   1775 MeasureUnit MeasureUnit::getLux() {
   1776    return MeasureUnit(14, 2);
   1777 }
   1778 
   1779 MeasureUnit *MeasureUnit::createSolarLuminosity(UErrorCode &status) {
   1780    return MeasureUnit::create(14, 3, status);
   1781 }
   1782 
   1783 MeasureUnit MeasureUnit::getSolarLuminosity() {
   1784    return MeasureUnit(14, 3);
   1785 }
   1786 
   1787 MeasureUnit *MeasureUnit::createTesla(UErrorCode &status) {
   1788    return MeasureUnit::create(15, 0, status);
   1789 }
   1790 
   1791 MeasureUnit MeasureUnit::getTesla() {
   1792    return MeasureUnit(15, 0);
   1793 }
   1794 
   1795 MeasureUnit *MeasureUnit::createWeber(UErrorCode &status) {
   1796    return MeasureUnit::create(15, 1, status);
   1797 }
   1798 
   1799 MeasureUnit MeasureUnit::getWeber() {
   1800    return MeasureUnit(15, 1);
   1801 }
   1802 
   1803 MeasureUnit *MeasureUnit::createCarat(UErrorCode &status) {
   1804    return MeasureUnit::create(16, 0, status);
   1805 }
   1806 
   1807 MeasureUnit MeasureUnit::getCarat() {
   1808    return MeasureUnit(16, 0);
   1809 }
   1810 
   1811 MeasureUnit *MeasureUnit::createDalton(UErrorCode &status) {
   1812    return MeasureUnit::create(16, 1, status);
   1813 }
   1814 
   1815 MeasureUnit MeasureUnit::getDalton() {
   1816    return MeasureUnit(16, 1);
   1817 }
   1818 
   1819 MeasureUnit *MeasureUnit::createEarthMass(UErrorCode &status) {
   1820    return MeasureUnit::create(16, 2, status);
   1821 }
   1822 
   1823 MeasureUnit MeasureUnit::getEarthMass() {
   1824    return MeasureUnit(16, 2);
   1825 }
   1826 
   1827 MeasureUnit *MeasureUnit::createFun(UErrorCode &status) {
   1828    return MeasureUnit::create(16, 3, status);
   1829 }
   1830 
   1831 MeasureUnit MeasureUnit::getFun() {
   1832    return MeasureUnit(16, 3);
   1833 }
   1834 
   1835 MeasureUnit *MeasureUnit::createGrain(UErrorCode &status) {
   1836    return MeasureUnit::create(16, 4, status);
   1837 }
   1838 
   1839 MeasureUnit MeasureUnit::getGrain() {
   1840    return MeasureUnit(16, 4);
   1841 }
   1842 
   1843 MeasureUnit *MeasureUnit::createGram(UErrorCode &status) {
   1844    return MeasureUnit::create(16, 5, status);
   1845 }
   1846 
   1847 MeasureUnit MeasureUnit::getGram() {
   1848    return MeasureUnit(16, 5);
   1849 }
   1850 
   1851 MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) {
   1852    return MeasureUnit::create(16, 6, status);
   1853 }
   1854 
   1855 MeasureUnit MeasureUnit::getKilogram() {
   1856    return MeasureUnit(16, 6);
   1857 }
   1858 
   1859 MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) {
   1860    return MeasureUnit::create(16, 7, status);
   1861 }
   1862 
   1863 MeasureUnit MeasureUnit::getMicrogram() {
   1864    return MeasureUnit(16, 7);
   1865 }
   1866 
   1867 MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) {
   1868    return MeasureUnit::create(16, 8, status);
   1869 }
   1870 
   1871 MeasureUnit MeasureUnit::getMilligram() {
   1872    return MeasureUnit(16, 8);
   1873 }
   1874 
   1875 MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) {
   1876    return MeasureUnit::create(16, 9, status);
   1877 }
   1878 
   1879 MeasureUnit MeasureUnit::getOunce() {
   1880    return MeasureUnit(16, 9);
   1881 }
   1882 
   1883 MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) {
   1884    return MeasureUnit::create(16, 10, status);
   1885 }
   1886 
   1887 MeasureUnit MeasureUnit::getOunceTroy() {
   1888    return MeasureUnit(16, 10);
   1889 }
   1890 
   1891 MeasureUnit *MeasureUnit::createPound(UErrorCode &status) {
   1892    return MeasureUnit::create(16, 11, status);
   1893 }
   1894 
   1895 MeasureUnit MeasureUnit::getPound() {
   1896    return MeasureUnit(16, 11);
   1897 }
   1898 
   1899 MeasureUnit *MeasureUnit::createSlug(UErrorCode &status) {
   1900    return MeasureUnit::create(16, 12, status);
   1901 }
   1902 
   1903 MeasureUnit MeasureUnit::getSlug() {
   1904    return MeasureUnit(16, 12);
   1905 }
   1906 
   1907 MeasureUnit *MeasureUnit::createSolarMass(UErrorCode &status) {
   1908    return MeasureUnit::create(16, 13, status);
   1909 }
   1910 
   1911 MeasureUnit MeasureUnit::getSolarMass() {
   1912    return MeasureUnit(16, 13);
   1913 }
   1914 
   1915 MeasureUnit *MeasureUnit::createStone(UErrorCode &status) {
   1916    return MeasureUnit::create(16, 14, status);
   1917 }
   1918 
   1919 MeasureUnit MeasureUnit::getStone() {
   1920    return MeasureUnit(16, 14);
   1921 }
   1922 
   1923 MeasureUnit *MeasureUnit::createTon(UErrorCode &status) {
   1924    return MeasureUnit::create(16, 15, status);
   1925 }
   1926 
   1927 MeasureUnit MeasureUnit::getTon() {
   1928    return MeasureUnit(16, 15);
   1929 }
   1930 
   1931 MeasureUnit *MeasureUnit::createTonne(UErrorCode &status) {
   1932    return MeasureUnit::create(16, 16, status);
   1933 }
   1934 
   1935 MeasureUnit MeasureUnit::getTonne() {
   1936    return MeasureUnit(16, 16);
   1937 }
   1938 
   1939 MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) {
   1940    return MeasureUnit::create(16, 16, status);
   1941 }
   1942 
   1943 MeasureUnit MeasureUnit::getMetricTon() {
   1944    return MeasureUnit(16, 16);
   1945 }
   1946 
   1947 MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) {
   1948    return MeasureUnit::create(18, 0, status);
   1949 }
   1950 
   1951 MeasureUnit MeasureUnit::getGigawatt() {
   1952    return MeasureUnit(18, 0);
   1953 }
   1954 
   1955 MeasureUnit *MeasureUnit::createHorsepower(UErrorCode &status) {
   1956    return MeasureUnit::create(18, 1, status);
   1957 }
   1958 
   1959 MeasureUnit MeasureUnit::getHorsepower() {
   1960    return MeasureUnit(18, 1);
   1961 }
   1962 
   1963 MeasureUnit *MeasureUnit::createKilowatt(UErrorCode &status) {
   1964    return MeasureUnit::create(18, 2, status);
   1965 }
   1966 
   1967 MeasureUnit MeasureUnit::getKilowatt() {
   1968    return MeasureUnit(18, 2);
   1969 }
   1970 
   1971 MeasureUnit *MeasureUnit::createMegawatt(UErrorCode &status) {
   1972    return MeasureUnit::create(18, 3, status);
   1973 }
   1974 
   1975 MeasureUnit MeasureUnit::getMegawatt() {
   1976    return MeasureUnit(18, 3);
   1977 }
   1978 
   1979 MeasureUnit *MeasureUnit::createMilliwatt(UErrorCode &status) {
   1980    return MeasureUnit::create(18, 4, status);
   1981 }
   1982 
   1983 MeasureUnit MeasureUnit::getMilliwatt() {
   1984    return MeasureUnit(18, 4);
   1985 }
   1986 
   1987 MeasureUnit *MeasureUnit::createWatt(UErrorCode &status) {
   1988    return MeasureUnit::create(18, 5, status);
   1989 }
   1990 
   1991 MeasureUnit MeasureUnit::getWatt() {
   1992    return MeasureUnit(18, 5);
   1993 }
   1994 
   1995 MeasureUnit *MeasureUnit::createAtmosphere(UErrorCode &status) {
   1996    return MeasureUnit::create(19, 0, status);
   1997 }
   1998 
   1999 MeasureUnit MeasureUnit::getAtmosphere() {
   2000    return MeasureUnit(19, 0);
   2001 }
   2002 
   2003 MeasureUnit *MeasureUnit::createBar(UErrorCode &status) {
   2004    return MeasureUnit::create(19, 1, status);
   2005 }
   2006 
   2007 MeasureUnit MeasureUnit::getBar() {
   2008    return MeasureUnit(19, 1);
   2009 }
   2010 
   2011 MeasureUnit *MeasureUnit::createGasolineEnergyDensity(UErrorCode &status) {
   2012    return MeasureUnit::create(19, 2, status);
   2013 }
   2014 
   2015 MeasureUnit MeasureUnit::getGasolineEnergyDensity() {
   2016    return MeasureUnit(19, 2);
   2017 }
   2018 
   2019 MeasureUnit *MeasureUnit::createHectopascal(UErrorCode &status) {
   2020    return MeasureUnit::create(19, 3, status);
   2021 }
   2022 
   2023 MeasureUnit MeasureUnit::getHectopascal() {
   2024    return MeasureUnit(19, 3);
   2025 }
   2026 
   2027 MeasureUnit *MeasureUnit::createInchHg(UErrorCode &status) {
   2028    return MeasureUnit::create(19, 4, status);
   2029 }
   2030 
   2031 MeasureUnit MeasureUnit::getInchHg() {
   2032    return MeasureUnit(19, 4);
   2033 }
   2034 
   2035 MeasureUnit *MeasureUnit::createKilopascal(UErrorCode &status) {
   2036    return MeasureUnit::create(19, 5, status);
   2037 }
   2038 
   2039 MeasureUnit MeasureUnit::getKilopascal() {
   2040    return MeasureUnit(19, 5);
   2041 }
   2042 
   2043 MeasureUnit *MeasureUnit::createMegapascal(UErrorCode &status) {
   2044    return MeasureUnit::create(19, 6, status);
   2045 }
   2046 
   2047 MeasureUnit MeasureUnit::getMegapascal() {
   2048    return MeasureUnit(19, 6);
   2049 }
   2050 
   2051 MeasureUnit *MeasureUnit::createMillibar(UErrorCode &status) {
   2052    return MeasureUnit::create(19, 7, status);
   2053 }
   2054 
   2055 MeasureUnit MeasureUnit::getMillibar() {
   2056    return MeasureUnit(19, 7);
   2057 }
   2058 
   2059 MeasureUnit *MeasureUnit::createMillimeterOfMercury(UErrorCode &status) {
   2060    return MeasureUnit::create(19, 8, status);
   2061 }
   2062 
   2063 MeasureUnit MeasureUnit::getMillimeterOfMercury() {
   2064    return MeasureUnit(19, 8);
   2065 }
   2066 
   2067 MeasureUnit *MeasureUnit::createOfhg(UErrorCode &status) {
   2068    return MeasureUnit::create(19, 9, status);
   2069 }
   2070 
   2071 MeasureUnit MeasureUnit::getOfhg() {
   2072    return MeasureUnit(19, 9);
   2073 }
   2074 
   2075 MeasureUnit *MeasureUnit::createPascal(UErrorCode &status) {
   2076    return MeasureUnit::create(19, 10, status);
   2077 }
   2078 
   2079 MeasureUnit MeasureUnit::getPascal() {
   2080    return MeasureUnit(19, 10);
   2081 }
   2082 
   2083 MeasureUnit *MeasureUnit::createPoundPerSquareInch(UErrorCode &status) {
   2084    return MeasureUnit::create(19, 11, status);
   2085 }
   2086 
   2087 MeasureUnit MeasureUnit::getPoundPerSquareInch() {
   2088    return MeasureUnit(19, 11);
   2089 }
   2090 
   2091 MeasureUnit *MeasureUnit::createBeaufort(UErrorCode &status) {
   2092    return MeasureUnit::create(20, 0, status);
   2093 }
   2094 
   2095 MeasureUnit MeasureUnit::getBeaufort() {
   2096    return MeasureUnit(20, 0);
   2097 }
   2098 
   2099 MeasureUnit *MeasureUnit::createKilometerPerHour(UErrorCode &status) {
   2100    return MeasureUnit::create(20, 1, status);
   2101 }
   2102 
   2103 MeasureUnit MeasureUnit::getKilometerPerHour() {
   2104    return MeasureUnit(20, 1);
   2105 }
   2106 
   2107 MeasureUnit *MeasureUnit::createKnot(UErrorCode &status) {
   2108    return MeasureUnit::create(20, 2, status);
   2109 }
   2110 
   2111 MeasureUnit MeasureUnit::getKnot() {
   2112    return MeasureUnit(20, 2);
   2113 }
   2114 
   2115 MeasureUnit *MeasureUnit::createLightSpeed(UErrorCode &status) {
   2116    return MeasureUnit::create(20, 3, status);
   2117 }
   2118 
   2119 MeasureUnit MeasureUnit::getLightSpeed() {
   2120    return MeasureUnit(20, 3);
   2121 }
   2122 
   2123 MeasureUnit *MeasureUnit::createMeterPerSecond(UErrorCode &status) {
   2124    return MeasureUnit::create(20, 4, status);
   2125 }
   2126 
   2127 MeasureUnit MeasureUnit::getMeterPerSecond() {
   2128    return MeasureUnit(20, 4);
   2129 }
   2130 
   2131 MeasureUnit *MeasureUnit::createMilePerHour(UErrorCode &status) {
   2132    return MeasureUnit::create(20, 5, status);
   2133 }
   2134 
   2135 MeasureUnit MeasureUnit::getMilePerHour() {
   2136    return MeasureUnit(20, 5);
   2137 }
   2138 
   2139 MeasureUnit *MeasureUnit::createCelsius(UErrorCode &status) {
   2140    return MeasureUnit::create(21, 0, status);
   2141 }
   2142 
   2143 MeasureUnit MeasureUnit::getCelsius() {
   2144    return MeasureUnit(21, 0);
   2145 }
   2146 
   2147 MeasureUnit *MeasureUnit::createFahrenheit(UErrorCode &status) {
   2148    return MeasureUnit::create(21, 1, status);
   2149 }
   2150 
   2151 MeasureUnit MeasureUnit::getFahrenheit() {
   2152    return MeasureUnit(21, 1);
   2153 }
   2154 
   2155 MeasureUnit *MeasureUnit::createGenericTemperature(UErrorCode &status) {
   2156    return MeasureUnit::create(21, 2, status);
   2157 }
   2158 
   2159 MeasureUnit MeasureUnit::getGenericTemperature() {
   2160    return MeasureUnit(21, 2);
   2161 }
   2162 
   2163 MeasureUnit *MeasureUnit::createKelvin(UErrorCode &status) {
   2164    return MeasureUnit::create(21, 3, status);
   2165 }
   2166 
   2167 MeasureUnit MeasureUnit::getKelvin() {
   2168    return MeasureUnit(21, 3);
   2169 }
   2170 
   2171 MeasureUnit *MeasureUnit::createRankine(UErrorCode &status) {
   2172    return MeasureUnit::create(21, 4, status);
   2173 }
   2174 
   2175 MeasureUnit MeasureUnit::getRankine() {
   2176    return MeasureUnit(21, 4);
   2177 }
   2178 
   2179 MeasureUnit *MeasureUnit::createNewtonMeter(UErrorCode &status) {
   2180    return MeasureUnit::create(22, 0, status);
   2181 }
   2182 
   2183 MeasureUnit MeasureUnit::getNewtonMeter() {
   2184    return MeasureUnit(22, 0);
   2185 }
   2186 
   2187 MeasureUnit *MeasureUnit::createPoundFoot(UErrorCode &status) {
   2188    return MeasureUnit::create(22, 1, status);
   2189 }
   2190 
   2191 MeasureUnit MeasureUnit::getPoundFoot() {
   2192    return MeasureUnit(22, 1);
   2193 }
   2194 
   2195 MeasureUnit *MeasureUnit::createAcreFoot(UErrorCode &status) {
   2196    return MeasureUnit::create(23, 0, status);
   2197 }
   2198 
   2199 MeasureUnit MeasureUnit::getAcreFoot() {
   2200    return MeasureUnit(23, 0);
   2201 }
   2202 
   2203 MeasureUnit *MeasureUnit::createBarrel(UErrorCode &status) {
   2204    return MeasureUnit::create(23, 1, status);
   2205 }
   2206 
   2207 MeasureUnit MeasureUnit::getBarrel() {
   2208    return MeasureUnit(23, 1);
   2209 }
   2210 
   2211 MeasureUnit *MeasureUnit::createBushel(UErrorCode &status) {
   2212    return MeasureUnit::create(23, 2, status);
   2213 }
   2214 
   2215 MeasureUnit MeasureUnit::getBushel() {
   2216    return MeasureUnit(23, 2);
   2217 }
   2218 
   2219 MeasureUnit *MeasureUnit::createCentiliter(UErrorCode &status) {
   2220    return MeasureUnit::create(23, 3, status);
   2221 }
   2222 
   2223 MeasureUnit MeasureUnit::getCentiliter() {
   2224    return MeasureUnit(23, 3);
   2225 }
   2226 
   2227 MeasureUnit *MeasureUnit::createCubicCentimeter(UErrorCode &status) {
   2228    return MeasureUnit::create(23, 4, status);
   2229 }
   2230 
   2231 MeasureUnit MeasureUnit::getCubicCentimeter() {
   2232    return MeasureUnit(23, 4);
   2233 }
   2234 
   2235 MeasureUnit *MeasureUnit::createCubicFoot(UErrorCode &status) {
   2236    return MeasureUnit::create(23, 5, status);
   2237 }
   2238 
   2239 MeasureUnit MeasureUnit::getCubicFoot() {
   2240    return MeasureUnit(23, 5);
   2241 }
   2242 
   2243 MeasureUnit *MeasureUnit::createCubicInch(UErrorCode &status) {
   2244    return MeasureUnit::create(23, 6, status);
   2245 }
   2246 
   2247 MeasureUnit MeasureUnit::getCubicInch() {
   2248    return MeasureUnit(23, 6);
   2249 }
   2250 
   2251 MeasureUnit *MeasureUnit::createCubicKilometer(UErrorCode &status) {
   2252    return MeasureUnit::create(23, 7, status);
   2253 }
   2254 
   2255 MeasureUnit MeasureUnit::getCubicKilometer() {
   2256    return MeasureUnit(23, 7);
   2257 }
   2258 
   2259 MeasureUnit *MeasureUnit::createCubicMeter(UErrorCode &status) {
   2260    return MeasureUnit::create(23, 8, status);
   2261 }
   2262 
   2263 MeasureUnit MeasureUnit::getCubicMeter() {
   2264    return MeasureUnit(23, 8);
   2265 }
   2266 
   2267 MeasureUnit *MeasureUnit::createCubicMile(UErrorCode &status) {
   2268    return MeasureUnit::create(23, 9, status);
   2269 }
   2270 
   2271 MeasureUnit MeasureUnit::getCubicMile() {
   2272    return MeasureUnit(23, 9);
   2273 }
   2274 
   2275 MeasureUnit *MeasureUnit::createCubicYard(UErrorCode &status) {
   2276    return MeasureUnit::create(23, 10, status);
   2277 }
   2278 
   2279 MeasureUnit MeasureUnit::getCubicYard() {
   2280    return MeasureUnit(23, 10);
   2281 }
   2282 
   2283 MeasureUnit *MeasureUnit::createCup(UErrorCode &status) {
   2284    return MeasureUnit::create(23, 11, status);
   2285 }
   2286 
   2287 MeasureUnit MeasureUnit::getCup() {
   2288    return MeasureUnit(23, 11);
   2289 }
   2290 
   2291 MeasureUnit *MeasureUnit::createCupImperial(UErrorCode &status) {
   2292    return MeasureUnit::create(23, 12, status);
   2293 }
   2294 
   2295 MeasureUnit MeasureUnit::getCupImperial() {
   2296    return MeasureUnit(23, 12);
   2297 }
   2298 
   2299 MeasureUnit *MeasureUnit::createCupJp(UErrorCode &status) {
   2300    return MeasureUnit::create(23, 13, status);
   2301 }
   2302 
   2303 MeasureUnit MeasureUnit::getCupJp() {
   2304    return MeasureUnit(23, 13);
   2305 }
   2306 
   2307 MeasureUnit *MeasureUnit::createCupMetric(UErrorCode &status) {
   2308    return MeasureUnit::create(23, 14, status);
   2309 }
   2310 
   2311 MeasureUnit MeasureUnit::getCupMetric() {
   2312    return MeasureUnit(23, 14);
   2313 }
   2314 
   2315 MeasureUnit *MeasureUnit::createDeciliter(UErrorCode &status) {
   2316    return MeasureUnit::create(23, 15, status);
   2317 }
   2318 
   2319 MeasureUnit MeasureUnit::getDeciliter() {
   2320    return MeasureUnit(23, 15);
   2321 }
   2322 
   2323 MeasureUnit *MeasureUnit::createDessertSpoon(UErrorCode &status) {
   2324    return MeasureUnit::create(23, 16, status);
   2325 }
   2326 
   2327 MeasureUnit MeasureUnit::getDessertSpoon() {
   2328    return MeasureUnit(23, 16);
   2329 }
   2330 
   2331 MeasureUnit *MeasureUnit::createDessertSpoonImperial(UErrorCode &status) {
   2332    return MeasureUnit::create(23, 17, status);
   2333 }
   2334 
   2335 MeasureUnit MeasureUnit::getDessertSpoonImperial() {
   2336    return MeasureUnit(23, 17);
   2337 }
   2338 
   2339 MeasureUnit *MeasureUnit::createDram(UErrorCode &status) {
   2340    return MeasureUnit::create(23, 18, status);
   2341 }
   2342 
   2343 MeasureUnit MeasureUnit::getDram() {
   2344    return MeasureUnit(23, 18);
   2345 }
   2346 
   2347 MeasureUnit *MeasureUnit::createDrop(UErrorCode &status) {
   2348    return MeasureUnit::create(23, 19, status);
   2349 }
   2350 
   2351 MeasureUnit MeasureUnit::getDrop() {
   2352    return MeasureUnit(23, 19);
   2353 }
   2354 
   2355 MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) {
   2356    return MeasureUnit::create(23, 20, status);
   2357 }
   2358 
   2359 MeasureUnit MeasureUnit::getFluidOunce() {
   2360    return MeasureUnit(23, 20);
   2361 }
   2362 
   2363 MeasureUnit *MeasureUnit::createFluidOunceImperial(UErrorCode &status) {
   2364    return MeasureUnit::create(23, 21, status);
   2365 }
   2366 
   2367 MeasureUnit MeasureUnit::getFluidOunceImperial() {
   2368    return MeasureUnit(23, 21);
   2369 }
   2370 
   2371 MeasureUnit *MeasureUnit::createFluidOunceMetric(UErrorCode &status) {
   2372    return MeasureUnit::create(23, 22, status);
   2373 }
   2374 
   2375 MeasureUnit MeasureUnit::getFluidOunceMetric() {
   2376    return MeasureUnit(23, 22);
   2377 }
   2378 
   2379 MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) {
   2380    return MeasureUnit::create(23, 23, status);
   2381 }
   2382 
   2383 MeasureUnit MeasureUnit::getGallon() {
   2384    return MeasureUnit(23, 23);
   2385 }
   2386 
   2387 MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) {
   2388    return MeasureUnit::create(23, 24, status);
   2389 }
   2390 
   2391 MeasureUnit MeasureUnit::getGallonImperial() {
   2392    return MeasureUnit(23, 24);
   2393 }
   2394 
   2395 MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) {
   2396    return MeasureUnit::create(23, 25, status);
   2397 }
   2398 
   2399 MeasureUnit MeasureUnit::getHectoliter() {
   2400    return MeasureUnit(23, 25);
   2401 }
   2402 
   2403 MeasureUnit *MeasureUnit::createJigger(UErrorCode &status) {
   2404    return MeasureUnit::create(23, 26, status);
   2405 }
   2406 
   2407 MeasureUnit MeasureUnit::getJigger() {
   2408    return MeasureUnit(23, 26);
   2409 }
   2410 
   2411 MeasureUnit *MeasureUnit::createKoku(UErrorCode &status) {
   2412    return MeasureUnit::create(23, 27, status);
   2413 }
   2414 
   2415 MeasureUnit MeasureUnit::getKoku() {
   2416    return MeasureUnit(23, 27);
   2417 }
   2418 
   2419 MeasureUnit *MeasureUnit::createKosaji(UErrorCode &status) {
   2420    return MeasureUnit::create(23, 28, status);
   2421 }
   2422 
   2423 MeasureUnit MeasureUnit::getKosaji() {
   2424    return MeasureUnit(23, 28);
   2425 }
   2426 
   2427 MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) {
   2428    return MeasureUnit::create(23, 29, status);
   2429 }
   2430 
   2431 MeasureUnit MeasureUnit::getLiter() {
   2432    return MeasureUnit(23, 29);
   2433 }
   2434 
   2435 MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) {
   2436    return MeasureUnit::create(23, 30, status);
   2437 }
   2438 
   2439 MeasureUnit MeasureUnit::getMegaliter() {
   2440    return MeasureUnit(23, 30);
   2441 }
   2442 
   2443 MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) {
   2444    return MeasureUnit::create(23, 31, status);
   2445 }
   2446 
   2447 MeasureUnit MeasureUnit::getMilliliter() {
   2448    return MeasureUnit(23, 31);
   2449 }
   2450 
   2451 MeasureUnit *MeasureUnit::createOsaji(UErrorCode &status) {
   2452    return MeasureUnit::create(23, 32, status);
   2453 }
   2454 
   2455 MeasureUnit MeasureUnit::getOsaji() {
   2456    return MeasureUnit(23, 32);
   2457 }
   2458 
   2459 MeasureUnit *MeasureUnit::createPinch(UErrorCode &status) {
   2460    return MeasureUnit::create(23, 33, status);
   2461 }
   2462 
   2463 MeasureUnit MeasureUnit::getPinch() {
   2464    return MeasureUnit(23, 33);
   2465 }
   2466 
   2467 MeasureUnit *MeasureUnit::createPint(UErrorCode &status) {
   2468    return MeasureUnit::create(23, 34, status);
   2469 }
   2470 
   2471 MeasureUnit MeasureUnit::getPint() {
   2472    return MeasureUnit(23, 34);
   2473 }
   2474 
   2475 MeasureUnit *MeasureUnit::createPintImperial(UErrorCode &status) {
   2476    return MeasureUnit::create(23, 35, status);
   2477 }
   2478 
   2479 MeasureUnit MeasureUnit::getPintImperial() {
   2480    return MeasureUnit(23, 35);
   2481 }
   2482 
   2483 MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) {
   2484    return MeasureUnit::create(23, 36, status);
   2485 }
   2486 
   2487 MeasureUnit MeasureUnit::getPintMetric() {
   2488    return MeasureUnit(23, 36);
   2489 }
   2490 
   2491 MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) {
   2492    return MeasureUnit::create(23, 37, status);
   2493 }
   2494 
   2495 MeasureUnit MeasureUnit::getQuart() {
   2496    return MeasureUnit(23, 37);
   2497 }
   2498 
   2499 MeasureUnit *MeasureUnit::createQuartImperial(UErrorCode &status) {
   2500    return MeasureUnit::create(23, 38, status);
   2501 }
   2502 
   2503 MeasureUnit MeasureUnit::getQuartImperial() {
   2504    return MeasureUnit(23, 38);
   2505 }
   2506 
   2507 MeasureUnit *MeasureUnit::createSai(UErrorCode &status) {
   2508    return MeasureUnit::create(23, 39, status);
   2509 }
   2510 
   2511 MeasureUnit MeasureUnit::getSai() {
   2512    return MeasureUnit(23, 39);
   2513 }
   2514 
   2515 MeasureUnit *MeasureUnit::createShaku(UErrorCode &status) {
   2516    return MeasureUnit::create(23, 40, status);
   2517 }
   2518 
   2519 MeasureUnit MeasureUnit::getShaku() {
   2520    return MeasureUnit(23, 40);
   2521 }
   2522 
   2523 MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) {
   2524    return MeasureUnit::create(23, 41, status);
   2525 }
   2526 
   2527 MeasureUnit MeasureUnit::getTablespoon() {
   2528    return MeasureUnit(23, 41);
   2529 }
   2530 
   2531 MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) {
   2532    return MeasureUnit::create(23, 42, status);
   2533 }
   2534 
   2535 MeasureUnit MeasureUnit::getTeaspoon() {
   2536    return MeasureUnit(23, 42);
   2537 }
   2538 
   2539 MeasureUnit *MeasureUnit::createToJp(UErrorCode &status) {
   2540    return MeasureUnit::create(23, 43, status);
   2541 }
   2542 
   2543 MeasureUnit MeasureUnit::getToJp() {
   2544    return MeasureUnit(23, 43);
   2545 }
   2546 
   2547 // End generated code for measunit.cpp
   2548 
   2549 static int32_t binarySearch(
   2550        const char * const * array, int32_t start, int32_t end, StringPiece key) {
   2551    while (start < end) {
   2552        int32_t mid = (start + end) / 2;
   2553        int32_t cmp = StringPiece(array[mid]).compare(key);
   2554        if (cmp < 0) {
   2555            start = mid + 1;
   2556            continue;
   2557        }
   2558        if (cmp == 0) {
   2559            return mid;
   2560        }
   2561        end = mid;
   2562    }
   2563    return -1;
   2564 }
   2565 
   2566 MeasureUnit::MeasureUnit() : MeasureUnit(kBaseTypeIdx, kBaseSubTypeIdx) {
   2567 }
   2568 
   2569 MeasureUnit::MeasureUnit(int32_t typeId, int32_t subTypeId)
   2570        : fImpl(nullptr), fSubTypeId(subTypeId), fTypeId(typeId) {
   2571 }
   2572 
   2573 MeasureUnit::MeasureUnit(const MeasureUnit &other)
   2574        : fImpl(nullptr) {
   2575    *this = other;
   2576 }
   2577 
   2578 MeasureUnit::MeasureUnit(MeasureUnit &&other) noexcept
   2579        : fImpl(other.fImpl),
   2580        fSubTypeId(other.fSubTypeId),
   2581        fTypeId(other.fTypeId) {
   2582    other.fImpl = nullptr;
   2583 }
   2584 
   2585 MeasureUnit::MeasureUnit(MeasureUnitImpl&& impl)
   2586        : fImpl(nullptr), fSubTypeId(-1), fTypeId(-1) {
   2587    if (!findBySubType(impl.identifier.data(), this)) {
   2588        fImpl = new MeasureUnitImpl(std::move(impl));
   2589    }
   2590 }
   2591 
   2592 MeasureUnit &MeasureUnit::operator=(const MeasureUnit &other) {
   2593    if (this == &other) {
   2594        return *this;
   2595    }
   2596    delete fImpl;
   2597    if (other.fImpl) {
   2598        ErrorCode localStatus;
   2599        fImpl = new MeasureUnitImpl(other.fImpl->copy(localStatus));
   2600        if (!fImpl || localStatus.isFailure()) {
   2601            // Unrecoverable allocation error; set to the default unit
   2602            *this = MeasureUnit();
   2603            return *this;
   2604        }
   2605    } else {
   2606        fImpl = nullptr;
   2607    }
   2608    fTypeId = other.fTypeId;
   2609    fSubTypeId = other.fSubTypeId;
   2610    return *this;
   2611 }
   2612 
   2613 MeasureUnit &MeasureUnit::operator=(MeasureUnit &&other) noexcept {
   2614    if (this == &other) {
   2615        return *this;
   2616    }
   2617    delete fImpl;
   2618    fImpl = other.fImpl;
   2619    other.fImpl = nullptr;
   2620    fTypeId = other.fTypeId;
   2621    fSubTypeId = other.fSubTypeId;
   2622    return *this;
   2623 }
   2624 
   2625 MeasureUnit *MeasureUnit::clone() const {
   2626    return new MeasureUnit(*this);
   2627 }
   2628 
   2629 MeasureUnit::~MeasureUnit() {
   2630    if (fImpl != nullptr) {
   2631        delete fImpl;
   2632        fImpl = nullptr;
   2633    }
   2634 }
   2635 
   2636 const char *MeasureUnit::getType() const {
   2637    // We have a type & subtype only if fTypeId is present.
   2638    if (fTypeId == -1) {
   2639        return "";
   2640    }
   2641    return gTypes[fTypeId];
   2642 }
   2643 
   2644 const char *MeasureUnit::getSubtype() const {
   2645    // We have a type & subtype only if fTypeId is present.
   2646    if (fTypeId == -1) {
   2647        return "";
   2648    }
   2649    return getIdentifier();
   2650 }
   2651 
   2652 const char *MeasureUnit::getIdentifier() const {
   2653    return fImpl ? fImpl->identifier.data() : gSubTypes[getOffset()];
   2654 }
   2655 
   2656 bool MeasureUnit::operator==(const UObject& other) const {
   2657    if (this == &other) {  // Same object, equal
   2658        return true;
   2659    }
   2660    if (typeid(*this) != typeid(other)) { // Different types, not equal
   2661        return false;
   2662    }
   2663    const MeasureUnit &rhs = static_cast<const MeasureUnit&>(other);
   2664    return uprv_strcmp(getIdentifier(), rhs.getIdentifier()) == 0;
   2665 }
   2666 
   2667 int32_t MeasureUnit::getAvailable(
   2668        MeasureUnit *dest,
   2669        int32_t destCapacity,
   2670        UErrorCode &errorCode) {
   2671    if (U_FAILURE(errorCode)) {
   2672        return 0;
   2673    }
   2674    if (destCapacity < UPRV_LENGTHOF(gSubTypes)) {
   2675        errorCode = U_BUFFER_OVERFLOW_ERROR;
   2676        return UPRV_LENGTHOF(gSubTypes);
   2677    }
   2678    int32_t idx = 0;
   2679    for (int32_t typeIdx = 0; typeIdx < UPRV_LENGTHOF(gTypes); ++typeIdx) {
   2680        int32_t len = gOffsets[typeIdx + 1] - gOffsets[typeIdx];
   2681        for (int32_t subTypeIdx = 0; subTypeIdx < len; ++subTypeIdx) {
   2682            dest[idx].setTo(typeIdx, subTypeIdx);
   2683            ++idx;
   2684        }
   2685    }
   2686    U_ASSERT(idx == UPRV_LENGTHOF(gSubTypes));
   2687    return UPRV_LENGTHOF(gSubTypes);
   2688 }
   2689 
   2690 int32_t MeasureUnit::getAvailable(
   2691        const char *type,
   2692        MeasureUnit *dest,
   2693        int32_t destCapacity,
   2694        UErrorCode &errorCode) {
   2695    if (U_FAILURE(errorCode)) {
   2696        return 0;
   2697    }
   2698    int32_t typeIdx = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
   2699    if (typeIdx == -1) {
   2700        return 0;
   2701    }
   2702    int32_t len = gOffsets[typeIdx + 1] - gOffsets[typeIdx];
   2703    if (destCapacity < len) {
   2704        errorCode = U_BUFFER_OVERFLOW_ERROR;
   2705        return len;
   2706    }
   2707    for (int subTypeIdx = 0; subTypeIdx < len; ++subTypeIdx) {
   2708        dest[subTypeIdx].setTo(typeIdx, subTypeIdx);
   2709    }
   2710    return len;
   2711 }
   2712 
   2713 StringEnumeration* MeasureUnit::getAvailableTypes(UErrorCode &errorCode) {
   2714    UEnumeration *uenum = uenum_openCharStringsEnumeration(
   2715            gTypes, UPRV_LENGTHOF(gTypes), &errorCode);
   2716    if (U_FAILURE(errorCode)) {
   2717        uenum_close(uenum);
   2718        return nullptr;
   2719    }
   2720    StringEnumeration *result = new UStringEnumeration(uenum);
   2721    if (result == nullptr) {
   2722        errorCode = U_MEMORY_ALLOCATION_ERROR;
   2723        uenum_close(uenum);
   2724        return nullptr;
   2725    }
   2726    return result;
   2727 }
   2728 
   2729 bool MeasureUnit::findBySubType(StringPiece subType, MeasureUnit* output) {
   2730    // Sanity checking kCurrencyOffset and final entry in gOffsets
   2731    U_ASSERT(uprv_strcmp(gTypes[kCurrencyOffset], "currency") == 0);
   2732    U_ASSERT(gOffsets[UPRV_LENGTHOF(gOffsets) - 1] == UPRV_LENGTHOF(gSubTypes));
   2733 
   2734    for (int32_t t = 0; t < UPRV_LENGTHOF(gOffsets) - 1; t++) {
   2735        // Skip currency units
   2736        if (t == kCurrencyOffset) {
   2737            continue;
   2738        }
   2739        int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subType);
   2740        if (st >= 0) {
   2741            output->setTo(t, st - gOffsets[t]);
   2742            return true;
   2743        }
   2744    }
   2745    return false;
   2746 }
   2747 
   2748 MeasureUnit *MeasureUnit::create(int typeId, int subTypeId, UErrorCode &status) {
   2749    if (U_FAILURE(status)) {
   2750        return nullptr;
   2751    }
   2752    MeasureUnit *result = new MeasureUnit(typeId, subTypeId);
   2753    if (result == nullptr) {
   2754        status = U_MEMORY_ALLOCATION_ERROR;
   2755    }
   2756    return result;
   2757 }
   2758 
   2759 void MeasureUnit::initTime(const char *timeId) {
   2760    int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "duration");
   2761    U_ASSERT(result != -1);
   2762    fTypeId = result;
   2763    result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], timeId);
   2764    U_ASSERT(result != -1);
   2765    fSubTypeId = result - gOffsets[fTypeId];
   2766 }
   2767 
   2768 void MeasureUnit::initCurrency(StringPiece isoCurrency) {
   2769    int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "currency");
   2770    U_ASSERT(result != -1);
   2771    fTypeId = result;
   2772    result = binarySearch(
   2773            gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], isoCurrency);
   2774    if (result == -1) {
   2775        UErrorCode status = U_ZERO_ERROR;
   2776        fImpl = new MeasureUnitImpl(MeasureUnitImpl::forCurrencyCode(isoCurrency, status));
   2777        if (fImpl != nullptr) {
   2778            if (U_SUCCESS(status)) {
   2779                fSubTypeId = -1;
   2780                return;
   2781            } else {
   2782                delete fImpl;
   2783                fImpl = nullptr;
   2784            }
   2785        }
   2786        // malloc error: fall back to the undefined currency
   2787        result = binarySearch(
   2788            gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], kDefaultCurrency8);
   2789        U_ASSERT(result != -1);
   2790    }
   2791    fSubTypeId = result - gOffsets[fTypeId];
   2792 }
   2793 
   2794 void MeasureUnit::setTo(int32_t typeId, int32_t subTypeId) {
   2795    fTypeId = typeId;
   2796    fSubTypeId = subTypeId;
   2797    if (fImpl != nullptr) {
   2798        delete fImpl;
   2799        fImpl = nullptr;
   2800    }
   2801 }
   2802 
   2803 int32_t MeasureUnit::getOffset() const {
   2804    if (fTypeId < 0 || fSubTypeId < 0) {
   2805        return -1;
   2806    }
   2807    return gOffsets[fTypeId] + fSubTypeId;
   2808 }
   2809 
   2810 MeasureUnitImpl MeasureUnitImpl::copy(UErrorCode &status) const {
   2811    MeasureUnitImpl result;
   2812    result.complexity = complexity;
   2813    result.identifier = identifier;
   2814    if (result.identifier.isEmpty() != identifier.isEmpty()) {
   2815        status = U_MEMORY_ALLOCATION_ERROR;
   2816        return result;
   2817    }
   2818    result.constantDenominator = constantDenominator;
   2819    for (int32_t i = 0; i < singleUnits.length(); i++) {
   2820        SingleUnitImpl *item = result.singleUnits.emplaceBack(*singleUnits[i]);
   2821        if (!item) {
   2822            status = U_MEMORY_ALLOCATION_ERROR;
   2823            return result;
   2824        }
   2825    }
   2826    return result;
   2827 }
   2828 
   2829 U_NAMESPACE_END
   2830 
   2831 #endif /* !UNCONFIG_NO_FORMATTING */