Coverage Report

Created: 2025-06-24 06:43

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