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