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