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