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