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