Bug Summary

File:root/firefox-clang/intl/icu/source/i18n/measunit.cpp
Warning:line 2257, column 5
Undefined or garbage value returned to caller

Annotated Source Code

Press '?' to see keyboard shortcuts

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