1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
4 **********************************************************************
5 * Copyright (c) 2004-2016, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 **********************************************************************
9 * Created: April 26, 2004
11 **********************************************************************
13 #include "utypeinfo.h" // for 'typeid' to work
15 #include "unicode/measunit.h"
17 #if !UCONFIG_NO_FORMATTING
19 #include "unicode/uenum.h"
26 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit
)
28 // All code between the "Start generated code" comment and
29 // the "End generated code" comment is auto generated code
30 // and must not be edited manually. For instructions on how to correctly
31 // update this code, refer to:
32 // http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
34 // Start generated code
37 static const int32_t gOffsets
[] = {
63 static const int32_t gIndexes
[] = {
89 // Must be sorted alphabetically.
90 static const char * const gTypes
[] = {
115 // Must be grouped by type and sorted alphabetically within each type.
116 static const char * const gSubTypes
[] = {
118 "meter-per-second-squared",
135 "milligram-per-deciliter",
136 "millimole-per-liter",
142 "liter-per-100kilometers",
143 "liter-per-kilometer",
145 "mile-per-gallon-imperial",
475 "british-thermal-unit",
541 "millimeter-of-mercury",
542 "pound-per-square-inch",
543 "kilometer-per-hour",
568 "fluid-ounce-imperial",
582 // Must be sorted by first value and then second value.
583 static int32_t unitPerUnitToSingleUnit
[][4] = {
594 // Shortcuts to the base unit in order to make the default constructor fast
595 static const int32_t kBaseTypeIdx
= 15;
596 static const int32_t kBaseSubTypeIdx
= 0;
598 MeasureUnit
*MeasureUnit::createGForce(UErrorCode
&status
) {
599 return MeasureUnit::create(0, 0, status
);
602 MeasureUnit
MeasureUnit::getGForce() {
603 return MeasureUnit(0, 0);
606 MeasureUnit
*MeasureUnit::createMeterPerSecondSquared(UErrorCode
&status
) {
607 return MeasureUnit::create(0, 1, status
);
610 MeasureUnit
MeasureUnit::getMeterPerSecondSquared() {
611 return MeasureUnit(0, 1);
614 MeasureUnit
*MeasureUnit::createArcMinute(UErrorCode
&status
) {
615 return MeasureUnit::create(1, 0, status
);
618 MeasureUnit
MeasureUnit::getArcMinute() {
619 return MeasureUnit(1, 0);
622 MeasureUnit
*MeasureUnit::createArcSecond(UErrorCode
&status
) {
623 return MeasureUnit::create(1, 1, status
);
626 MeasureUnit
MeasureUnit::getArcSecond() {
627 return MeasureUnit(1, 1);
630 MeasureUnit
*MeasureUnit::createDegree(UErrorCode
&status
) {
631 return MeasureUnit::create(1, 2, status
);
634 MeasureUnit
MeasureUnit::getDegree() {
635 return MeasureUnit(1, 2);
638 MeasureUnit
*MeasureUnit::createRadian(UErrorCode
&status
) {
639 return MeasureUnit::create(1, 3, status
);
642 MeasureUnit
MeasureUnit::getRadian() {
643 return MeasureUnit(1, 3);
646 MeasureUnit
*MeasureUnit::createRevolutionAngle(UErrorCode
&status
) {
647 return MeasureUnit::create(1, 4, status
);
650 MeasureUnit
MeasureUnit::getRevolutionAngle() {
651 return MeasureUnit(1, 4);
654 MeasureUnit
*MeasureUnit::createAcre(UErrorCode
&status
) {
655 return MeasureUnit::create(2, 0, status
);
658 MeasureUnit
MeasureUnit::getAcre() {
659 return MeasureUnit(2, 0);
662 MeasureUnit
*MeasureUnit::createDunam(UErrorCode
&status
) {
663 return MeasureUnit::create(2, 1, status
);
666 MeasureUnit
MeasureUnit::getDunam() {
667 return MeasureUnit(2, 1);
670 MeasureUnit
*MeasureUnit::createHectare(UErrorCode
&status
) {
671 return MeasureUnit::create(2, 2, status
);
674 MeasureUnit
MeasureUnit::getHectare() {
675 return MeasureUnit(2, 2);
678 MeasureUnit
*MeasureUnit::createSquareCentimeter(UErrorCode
&status
) {
679 return MeasureUnit::create(2, 3, status
);
682 MeasureUnit
MeasureUnit::getSquareCentimeter() {
683 return MeasureUnit(2, 3);
686 MeasureUnit
*MeasureUnit::createSquareFoot(UErrorCode
&status
) {
687 return MeasureUnit::create(2, 4, status
);
690 MeasureUnit
MeasureUnit::getSquareFoot() {
691 return MeasureUnit(2, 4);
694 MeasureUnit
*MeasureUnit::createSquareInch(UErrorCode
&status
) {
695 return MeasureUnit::create(2, 5, status
);
698 MeasureUnit
MeasureUnit::getSquareInch() {
699 return MeasureUnit(2, 5);
702 MeasureUnit
*MeasureUnit::createSquareKilometer(UErrorCode
&status
) {
703 return MeasureUnit::create(2, 6, status
);
706 MeasureUnit
MeasureUnit::getSquareKilometer() {
707 return MeasureUnit(2, 6);
710 MeasureUnit
*MeasureUnit::createSquareMeter(UErrorCode
&status
) {
711 return MeasureUnit::create(2, 7, status
);
714 MeasureUnit
MeasureUnit::getSquareMeter() {
715 return MeasureUnit(2, 7);
718 MeasureUnit
*MeasureUnit::createSquareMile(UErrorCode
&status
) {
719 return MeasureUnit::create(2, 8, status
);
722 MeasureUnit
MeasureUnit::getSquareMile() {
723 return MeasureUnit(2, 8);
726 MeasureUnit
*MeasureUnit::createSquareYard(UErrorCode
&status
) {
727 return MeasureUnit::create(2, 9, status
);
730 MeasureUnit
MeasureUnit::getSquareYard() {
731 return MeasureUnit(2, 9);
734 MeasureUnit
*MeasureUnit::createKarat(UErrorCode
&status
) {
735 return MeasureUnit::create(3, 0, status
);
738 MeasureUnit
MeasureUnit::getKarat() {
739 return MeasureUnit(3, 0);
742 MeasureUnit
*MeasureUnit::createMilligramPerDeciliter(UErrorCode
&status
) {
743 return MeasureUnit::create(3, 1, status
);
746 MeasureUnit
MeasureUnit::getMilligramPerDeciliter() {
747 return MeasureUnit(3, 1);
750 MeasureUnit
*MeasureUnit::createMillimolePerLiter(UErrorCode
&status
) {
751 return MeasureUnit::create(3, 2, status
);
754 MeasureUnit
MeasureUnit::getMillimolePerLiter() {
755 return MeasureUnit(3, 2);
758 MeasureUnit
*MeasureUnit::createMole(UErrorCode
&status
) {
759 return MeasureUnit::create(3, 3, status
);
762 MeasureUnit
MeasureUnit::getMole() {
763 return MeasureUnit(3, 3);
766 MeasureUnit
*MeasureUnit::createPartPerMillion(UErrorCode
&status
) {
767 return MeasureUnit::create(3, 4, status
);
770 MeasureUnit
MeasureUnit::getPartPerMillion() {
771 return MeasureUnit(3, 4);
774 MeasureUnit
*MeasureUnit::createPercent(UErrorCode
&status
) {
775 return MeasureUnit::create(3, 5, status
);
778 MeasureUnit
MeasureUnit::getPercent() {
779 return MeasureUnit(3, 5);
782 MeasureUnit
*MeasureUnit::createPermille(UErrorCode
&status
) {
783 return MeasureUnit::create(3, 6, status
);
786 MeasureUnit
MeasureUnit::getPermille() {
787 return MeasureUnit(3, 6);
790 MeasureUnit
*MeasureUnit::createPermyriad(UErrorCode
&status
) {
791 return MeasureUnit::create(3, 7, status
);
794 MeasureUnit
MeasureUnit::getPermyriad() {
795 return MeasureUnit(3, 7);
798 MeasureUnit
*MeasureUnit::createLiterPer100Kilometers(UErrorCode
&status
) {
799 return MeasureUnit::create(4, 0, status
);
802 MeasureUnit
MeasureUnit::getLiterPer100Kilometers() {
803 return MeasureUnit(4, 0);
806 MeasureUnit
*MeasureUnit::createLiterPerKilometer(UErrorCode
&status
) {
807 return MeasureUnit::create(4, 1, status
);
810 MeasureUnit
MeasureUnit::getLiterPerKilometer() {
811 return MeasureUnit(4, 1);
814 MeasureUnit
*MeasureUnit::createMilePerGallon(UErrorCode
&status
) {
815 return MeasureUnit::create(4, 2, status
);
818 MeasureUnit
MeasureUnit::getMilePerGallon() {
819 return MeasureUnit(4, 2);
822 MeasureUnit
*MeasureUnit::createMilePerGallonImperial(UErrorCode
&status
) {
823 return MeasureUnit::create(4, 3, status
);
826 MeasureUnit
MeasureUnit::getMilePerGallonImperial() {
827 return MeasureUnit(4, 3);
830 MeasureUnit
*MeasureUnit::createBit(UErrorCode
&status
) {
831 return MeasureUnit::create(6, 0, status
);
834 MeasureUnit
MeasureUnit::getBit() {
835 return MeasureUnit(6, 0);
838 MeasureUnit
*MeasureUnit::createByte(UErrorCode
&status
) {
839 return MeasureUnit::create(6, 1, status
);
842 MeasureUnit
MeasureUnit::getByte() {
843 return MeasureUnit(6, 1);
846 MeasureUnit
*MeasureUnit::createGigabit(UErrorCode
&status
) {
847 return MeasureUnit::create(6, 2, status
);
850 MeasureUnit
MeasureUnit::getGigabit() {
851 return MeasureUnit(6, 2);
854 MeasureUnit
*MeasureUnit::createGigabyte(UErrorCode
&status
) {
855 return MeasureUnit::create(6, 3, status
);
858 MeasureUnit
MeasureUnit::getGigabyte() {
859 return MeasureUnit(6, 3);
862 MeasureUnit
*MeasureUnit::createKilobit(UErrorCode
&status
) {
863 return MeasureUnit::create(6, 4, status
);
866 MeasureUnit
MeasureUnit::getKilobit() {
867 return MeasureUnit(6, 4);
870 MeasureUnit
*MeasureUnit::createKilobyte(UErrorCode
&status
) {
871 return MeasureUnit::create(6, 5, status
);
874 MeasureUnit
MeasureUnit::getKilobyte() {
875 return MeasureUnit(6, 5);
878 MeasureUnit
*MeasureUnit::createMegabit(UErrorCode
&status
) {
879 return MeasureUnit::create(6, 6, status
);
882 MeasureUnit
MeasureUnit::getMegabit() {
883 return MeasureUnit(6, 6);
886 MeasureUnit
*MeasureUnit::createMegabyte(UErrorCode
&status
) {
887 return MeasureUnit::create(6, 7, status
);
890 MeasureUnit
MeasureUnit::getMegabyte() {
891 return MeasureUnit(6, 7);
894 MeasureUnit
*MeasureUnit::createPetabyte(UErrorCode
&status
) {
895 return MeasureUnit::create(6, 8, status
);
898 MeasureUnit
MeasureUnit::getPetabyte() {
899 return MeasureUnit(6, 8);
902 MeasureUnit
*MeasureUnit::createTerabit(UErrorCode
&status
) {
903 return MeasureUnit::create(6, 9, status
);
906 MeasureUnit
MeasureUnit::getTerabit() {
907 return MeasureUnit(6, 9);
910 MeasureUnit
*MeasureUnit::createTerabyte(UErrorCode
&status
) {
911 return MeasureUnit::create(6, 10, status
);
914 MeasureUnit
MeasureUnit::getTerabyte() {
915 return MeasureUnit(6, 10);
918 MeasureUnit
*MeasureUnit::createCentury(UErrorCode
&status
) {
919 return MeasureUnit::create(7, 0, status
);
922 MeasureUnit
MeasureUnit::getCentury() {
923 return MeasureUnit(7, 0);
926 MeasureUnit
*MeasureUnit::createDay(UErrorCode
&status
) {
927 return MeasureUnit::create(7, 1, status
);
930 MeasureUnit
MeasureUnit::getDay() {
931 return MeasureUnit(7, 1);
934 MeasureUnit
*MeasureUnit::createDayPerson(UErrorCode
&status
) {
935 return MeasureUnit::create(7, 2, status
);
938 MeasureUnit
MeasureUnit::getDayPerson() {
939 return MeasureUnit(7, 2);
942 MeasureUnit
*MeasureUnit::createHour(UErrorCode
&status
) {
943 return MeasureUnit::create(7, 3, status
);
946 MeasureUnit
MeasureUnit::getHour() {
947 return MeasureUnit(7, 3);
950 MeasureUnit
*MeasureUnit::createMicrosecond(UErrorCode
&status
) {
951 return MeasureUnit::create(7, 4, status
);
954 MeasureUnit
MeasureUnit::getMicrosecond() {
955 return MeasureUnit(7, 4);
958 MeasureUnit
*MeasureUnit::createMillisecond(UErrorCode
&status
) {
959 return MeasureUnit::create(7, 5, status
);
962 MeasureUnit
MeasureUnit::getMillisecond() {
963 return MeasureUnit(7, 5);
966 MeasureUnit
*MeasureUnit::createMinute(UErrorCode
&status
) {
967 return MeasureUnit::create(7, 6, status
);
970 MeasureUnit
MeasureUnit::getMinute() {
971 return MeasureUnit(7, 6);
974 MeasureUnit
*MeasureUnit::createMonth(UErrorCode
&status
) {
975 return MeasureUnit::create(7, 7, status
);
978 MeasureUnit
MeasureUnit::getMonth() {
979 return MeasureUnit(7, 7);
982 MeasureUnit
*MeasureUnit::createMonthPerson(UErrorCode
&status
) {
983 return MeasureUnit::create(7, 8, status
);
986 MeasureUnit
MeasureUnit::getMonthPerson() {
987 return MeasureUnit(7, 8);
990 MeasureUnit
*MeasureUnit::createNanosecond(UErrorCode
&status
) {
991 return MeasureUnit::create(7, 9, status
);
994 MeasureUnit
MeasureUnit::getNanosecond() {
995 return MeasureUnit(7, 9);
998 MeasureUnit
*MeasureUnit::createSecond(UErrorCode
&status
) {
999 return MeasureUnit::create(7, 10, status
);
1002 MeasureUnit
MeasureUnit::getSecond() {
1003 return MeasureUnit(7, 10);
1006 MeasureUnit
*MeasureUnit::createWeek(UErrorCode
&status
) {
1007 return MeasureUnit::create(7, 11, status
);
1010 MeasureUnit
MeasureUnit::getWeek() {
1011 return MeasureUnit(7, 11);
1014 MeasureUnit
*MeasureUnit::createWeekPerson(UErrorCode
&status
) {
1015 return MeasureUnit::create(7, 12, status
);
1018 MeasureUnit
MeasureUnit::getWeekPerson() {
1019 return MeasureUnit(7, 12);
1022 MeasureUnit
*MeasureUnit::createYear(UErrorCode
&status
) {
1023 return MeasureUnit::create(7, 13, status
);
1026 MeasureUnit
MeasureUnit::getYear() {
1027 return MeasureUnit(7, 13);
1030 MeasureUnit
*MeasureUnit::createYearPerson(UErrorCode
&status
) {
1031 return MeasureUnit::create(7, 14, status
);
1034 MeasureUnit
MeasureUnit::getYearPerson() {
1035 return MeasureUnit(7, 14);
1038 MeasureUnit
*MeasureUnit::createAmpere(UErrorCode
&status
) {
1039 return MeasureUnit::create(8, 0, status
);
1042 MeasureUnit
MeasureUnit::getAmpere() {
1043 return MeasureUnit(8, 0);
1046 MeasureUnit
*MeasureUnit::createMilliampere(UErrorCode
&status
) {
1047 return MeasureUnit::create(8, 1, status
);
1050 MeasureUnit
MeasureUnit::getMilliampere() {
1051 return MeasureUnit(8, 1);
1054 MeasureUnit
*MeasureUnit::createOhm(UErrorCode
&status
) {
1055 return MeasureUnit::create(8, 2, status
);
1058 MeasureUnit
MeasureUnit::getOhm() {
1059 return MeasureUnit(8, 2);
1062 MeasureUnit
*MeasureUnit::createVolt(UErrorCode
&status
) {
1063 return MeasureUnit::create(8, 3, status
);
1066 MeasureUnit
MeasureUnit::getVolt() {
1067 return MeasureUnit(8, 3);
1070 MeasureUnit
*MeasureUnit::createBritishThermalUnit(UErrorCode
&status
) {
1071 return MeasureUnit::create(9, 0, status
);
1074 MeasureUnit
MeasureUnit::getBritishThermalUnit() {
1075 return MeasureUnit(9, 0);
1078 MeasureUnit
*MeasureUnit::createCalorie(UErrorCode
&status
) {
1079 return MeasureUnit::create(9, 1, status
);
1082 MeasureUnit
MeasureUnit::getCalorie() {
1083 return MeasureUnit(9, 1);
1086 MeasureUnit
*MeasureUnit::createElectronvolt(UErrorCode
&status
) {
1087 return MeasureUnit::create(9, 2, status
);
1090 MeasureUnit
MeasureUnit::getElectronvolt() {
1091 return MeasureUnit(9, 2);
1094 MeasureUnit
*MeasureUnit::createFoodcalorie(UErrorCode
&status
) {
1095 return MeasureUnit::create(9, 3, status
);
1098 MeasureUnit
MeasureUnit::getFoodcalorie() {
1099 return MeasureUnit(9, 3);
1102 MeasureUnit
*MeasureUnit::createJoule(UErrorCode
&status
) {
1103 return MeasureUnit::create(9, 4, status
);
1106 MeasureUnit
MeasureUnit::getJoule() {
1107 return MeasureUnit(9, 4);
1110 MeasureUnit
*MeasureUnit::createKilocalorie(UErrorCode
&status
) {
1111 return MeasureUnit::create(9, 5, status
);
1114 MeasureUnit
MeasureUnit::getKilocalorie() {
1115 return MeasureUnit(9, 5);
1118 MeasureUnit
*MeasureUnit::createKilojoule(UErrorCode
&status
) {
1119 return MeasureUnit::create(9, 6, status
);
1122 MeasureUnit
MeasureUnit::getKilojoule() {
1123 return MeasureUnit(9, 6);
1126 MeasureUnit
*MeasureUnit::createKilowattHour(UErrorCode
&status
) {
1127 return MeasureUnit::create(9, 7, status
);
1130 MeasureUnit
MeasureUnit::getKilowattHour() {
1131 return MeasureUnit(9, 7);
1134 MeasureUnit
*MeasureUnit::createNewton(UErrorCode
&status
) {
1135 return MeasureUnit::create(10, 0, status
);
1138 MeasureUnit
MeasureUnit::getNewton() {
1139 return MeasureUnit(10, 0);
1142 MeasureUnit
*MeasureUnit::createPoundForce(UErrorCode
&status
) {
1143 return MeasureUnit::create(10, 1, status
);
1146 MeasureUnit
MeasureUnit::getPoundForce() {
1147 return MeasureUnit(10, 1);
1150 MeasureUnit
*MeasureUnit::createGigahertz(UErrorCode
&status
) {
1151 return MeasureUnit::create(11, 0, status
);
1154 MeasureUnit
MeasureUnit::getGigahertz() {
1155 return MeasureUnit(11, 0);
1158 MeasureUnit
*MeasureUnit::createHertz(UErrorCode
&status
) {
1159 return MeasureUnit::create(11, 1, status
);
1162 MeasureUnit
MeasureUnit::getHertz() {
1163 return MeasureUnit(11, 1);
1166 MeasureUnit
*MeasureUnit::createKilohertz(UErrorCode
&status
) {
1167 return MeasureUnit::create(11, 2, status
);
1170 MeasureUnit
MeasureUnit::getKilohertz() {
1171 return MeasureUnit(11, 2);
1174 MeasureUnit
*MeasureUnit::createMegahertz(UErrorCode
&status
) {
1175 return MeasureUnit::create(11, 3, status
);
1178 MeasureUnit
MeasureUnit::getMegahertz() {
1179 return MeasureUnit(11, 3);
1182 MeasureUnit
*MeasureUnit::createAstronomicalUnit(UErrorCode
&status
) {
1183 return MeasureUnit::create(12, 0, status
);
1186 MeasureUnit
MeasureUnit::getAstronomicalUnit() {
1187 return MeasureUnit(12, 0);
1190 MeasureUnit
*MeasureUnit::createCentimeter(UErrorCode
&status
) {
1191 return MeasureUnit::create(12, 1, status
);
1194 MeasureUnit
MeasureUnit::getCentimeter() {
1195 return MeasureUnit(12, 1);
1198 MeasureUnit
*MeasureUnit::createDecimeter(UErrorCode
&status
) {
1199 return MeasureUnit::create(12, 2, status
);
1202 MeasureUnit
MeasureUnit::getDecimeter() {
1203 return MeasureUnit(12, 2);
1206 MeasureUnit
*MeasureUnit::createFathom(UErrorCode
&status
) {
1207 return MeasureUnit::create(12, 3, status
);
1210 MeasureUnit
MeasureUnit::getFathom() {
1211 return MeasureUnit(12, 3);
1214 MeasureUnit
*MeasureUnit::createFoot(UErrorCode
&status
) {
1215 return MeasureUnit::create(12, 4, status
);
1218 MeasureUnit
MeasureUnit::getFoot() {
1219 return MeasureUnit(12, 4);
1222 MeasureUnit
*MeasureUnit::createFurlong(UErrorCode
&status
) {
1223 return MeasureUnit::create(12, 5, status
);
1226 MeasureUnit
MeasureUnit::getFurlong() {
1227 return MeasureUnit(12, 5);
1230 MeasureUnit
*MeasureUnit::createInch(UErrorCode
&status
) {
1231 return MeasureUnit::create(12, 6, status
);
1234 MeasureUnit
MeasureUnit::getInch() {
1235 return MeasureUnit(12, 6);
1238 MeasureUnit
*MeasureUnit::createKilometer(UErrorCode
&status
) {
1239 return MeasureUnit::create(12, 7, status
);
1242 MeasureUnit
MeasureUnit::getKilometer() {
1243 return MeasureUnit(12, 7);
1246 MeasureUnit
*MeasureUnit::createLightYear(UErrorCode
&status
) {
1247 return MeasureUnit::create(12, 8, status
);
1250 MeasureUnit
MeasureUnit::getLightYear() {
1251 return MeasureUnit(12, 8);
1254 MeasureUnit
*MeasureUnit::createMeter(UErrorCode
&status
) {
1255 return MeasureUnit::create(12, 9, status
);
1258 MeasureUnit
MeasureUnit::getMeter() {
1259 return MeasureUnit(12, 9);
1262 MeasureUnit
*MeasureUnit::createMicrometer(UErrorCode
&status
) {
1263 return MeasureUnit::create(12, 10, status
);
1266 MeasureUnit
MeasureUnit::getMicrometer() {
1267 return MeasureUnit(12, 10);
1270 MeasureUnit
*MeasureUnit::createMile(UErrorCode
&status
) {
1271 return MeasureUnit::create(12, 11, status
);
1274 MeasureUnit
MeasureUnit::getMile() {
1275 return MeasureUnit(12, 11);
1278 MeasureUnit
*MeasureUnit::createMileScandinavian(UErrorCode
&status
) {
1279 return MeasureUnit::create(12, 12, status
);
1282 MeasureUnit
MeasureUnit::getMileScandinavian() {
1283 return MeasureUnit(12, 12);
1286 MeasureUnit
*MeasureUnit::createMillimeter(UErrorCode
&status
) {
1287 return MeasureUnit::create(12, 13, status
);
1290 MeasureUnit
MeasureUnit::getMillimeter() {
1291 return MeasureUnit(12, 13);
1294 MeasureUnit
*MeasureUnit::createNanometer(UErrorCode
&status
) {
1295 return MeasureUnit::create(12, 14, status
);
1298 MeasureUnit
MeasureUnit::getNanometer() {
1299 return MeasureUnit(12, 14);
1302 MeasureUnit
*MeasureUnit::createNauticalMile(UErrorCode
&status
) {
1303 return MeasureUnit::create(12, 15, status
);
1306 MeasureUnit
MeasureUnit::getNauticalMile() {
1307 return MeasureUnit(12, 15);
1310 MeasureUnit
*MeasureUnit::createParsec(UErrorCode
&status
) {
1311 return MeasureUnit::create(12, 16, status
);
1314 MeasureUnit
MeasureUnit::getParsec() {
1315 return MeasureUnit(12, 16);
1318 MeasureUnit
*MeasureUnit::createPicometer(UErrorCode
&status
) {
1319 return MeasureUnit::create(12, 17, status
);
1322 MeasureUnit
MeasureUnit::getPicometer() {
1323 return MeasureUnit(12, 17);
1326 MeasureUnit
*MeasureUnit::createPoint(UErrorCode
&status
) {
1327 return MeasureUnit::create(12, 18, status
);
1330 MeasureUnit
MeasureUnit::getPoint() {
1331 return MeasureUnit(12, 18);
1334 MeasureUnit
*MeasureUnit::createSolarRadius(UErrorCode
&status
) {
1335 return MeasureUnit::create(12, 19, status
);
1338 MeasureUnit
MeasureUnit::getSolarRadius() {
1339 return MeasureUnit(12, 19);
1342 MeasureUnit
*MeasureUnit::createYard(UErrorCode
&status
) {
1343 return MeasureUnit::create(12, 20, status
);
1346 MeasureUnit
MeasureUnit::getYard() {
1347 return MeasureUnit(12, 20);
1350 MeasureUnit
*MeasureUnit::createLux(UErrorCode
&status
) {
1351 return MeasureUnit::create(13, 0, status
);
1354 MeasureUnit
MeasureUnit::getLux() {
1355 return MeasureUnit(13, 0);
1358 MeasureUnit
*MeasureUnit::createSolarLuminosity(UErrorCode
&status
) {
1359 return MeasureUnit::create(13, 1, status
);
1362 MeasureUnit
MeasureUnit::getSolarLuminosity() {
1363 return MeasureUnit(13, 1);
1366 MeasureUnit
*MeasureUnit::createCarat(UErrorCode
&status
) {
1367 return MeasureUnit::create(14, 0, status
);
1370 MeasureUnit
MeasureUnit::getCarat() {
1371 return MeasureUnit(14, 0);
1374 MeasureUnit
*MeasureUnit::createDalton(UErrorCode
&status
) {
1375 return MeasureUnit::create(14, 1, status
);
1378 MeasureUnit
MeasureUnit::getDalton() {
1379 return MeasureUnit(14, 1);
1382 MeasureUnit
*MeasureUnit::createEarthMass(UErrorCode
&status
) {
1383 return MeasureUnit::create(14, 2, status
);
1386 MeasureUnit
MeasureUnit::getEarthMass() {
1387 return MeasureUnit(14, 2);
1390 MeasureUnit
*MeasureUnit::createGram(UErrorCode
&status
) {
1391 return MeasureUnit::create(14, 3, status
);
1394 MeasureUnit
MeasureUnit::getGram() {
1395 return MeasureUnit(14, 3);
1398 MeasureUnit
*MeasureUnit::createKilogram(UErrorCode
&status
) {
1399 return MeasureUnit::create(14, 4, status
);
1402 MeasureUnit
MeasureUnit::getKilogram() {
1403 return MeasureUnit(14, 4);
1406 MeasureUnit
*MeasureUnit::createMetricTon(UErrorCode
&status
) {
1407 return MeasureUnit::create(14, 5, status
);
1410 MeasureUnit
MeasureUnit::getMetricTon() {
1411 return MeasureUnit(14, 5);
1414 MeasureUnit
*MeasureUnit::createMicrogram(UErrorCode
&status
) {
1415 return MeasureUnit::create(14, 6, status
);
1418 MeasureUnit
MeasureUnit::getMicrogram() {
1419 return MeasureUnit(14, 6);
1422 MeasureUnit
*MeasureUnit::createMilligram(UErrorCode
&status
) {
1423 return MeasureUnit::create(14, 7, status
);
1426 MeasureUnit
MeasureUnit::getMilligram() {
1427 return MeasureUnit(14, 7);
1430 MeasureUnit
*MeasureUnit::createOunce(UErrorCode
&status
) {
1431 return MeasureUnit::create(14, 8, status
);
1434 MeasureUnit
MeasureUnit::getOunce() {
1435 return MeasureUnit(14, 8);
1438 MeasureUnit
*MeasureUnit::createOunceTroy(UErrorCode
&status
) {
1439 return MeasureUnit::create(14, 9, status
);
1442 MeasureUnit
MeasureUnit::getOunceTroy() {
1443 return MeasureUnit(14, 9);
1446 MeasureUnit
*MeasureUnit::createPound(UErrorCode
&status
) {
1447 return MeasureUnit::create(14, 10, status
);
1450 MeasureUnit
MeasureUnit::getPound() {
1451 return MeasureUnit(14, 10);
1454 MeasureUnit
*MeasureUnit::createSolarMass(UErrorCode
&status
) {
1455 return MeasureUnit::create(14, 11, status
);
1458 MeasureUnit
MeasureUnit::getSolarMass() {
1459 return MeasureUnit(14, 11);
1462 MeasureUnit
*MeasureUnit::createStone(UErrorCode
&status
) {
1463 return MeasureUnit::create(14, 12, status
);
1466 MeasureUnit
MeasureUnit::getStone() {
1467 return MeasureUnit(14, 12);
1470 MeasureUnit
*MeasureUnit::createTon(UErrorCode
&status
) {
1471 return MeasureUnit::create(14, 13, status
);
1474 MeasureUnit
MeasureUnit::getTon() {
1475 return MeasureUnit(14, 13);
1478 MeasureUnit
*MeasureUnit::createGigawatt(UErrorCode
&status
) {
1479 return MeasureUnit::create(16, 0, status
);
1482 MeasureUnit
MeasureUnit::getGigawatt() {
1483 return MeasureUnit(16, 0);
1486 MeasureUnit
*MeasureUnit::createHorsepower(UErrorCode
&status
) {
1487 return MeasureUnit::create(16, 1, status
);
1490 MeasureUnit
MeasureUnit::getHorsepower() {
1491 return MeasureUnit(16, 1);
1494 MeasureUnit
*MeasureUnit::createKilowatt(UErrorCode
&status
) {
1495 return MeasureUnit::create(16, 2, status
);
1498 MeasureUnit
MeasureUnit::getKilowatt() {
1499 return MeasureUnit(16, 2);
1502 MeasureUnit
*MeasureUnit::createMegawatt(UErrorCode
&status
) {
1503 return MeasureUnit::create(16, 3, status
);
1506 MeasureUnit
MeasureUnit::getMegawatt() {
1507 return MeasureUnit(16, 3);
1510 MeasureUnit
*MeasureUnit::createMilliwatt(UErrorCode
&status
) {
1511 return MeasureUnit::create(16, 4, status
);
1514 MeasureUnit
MeasureUnit::getMilliwatt() {
1515 return MeasureUnit(16, 4);
1518 MeasureUnit
*MeasureUnit::createWatt(UErrorCode
&status
) {
1519 return MeasureUnit::create(16, 5, status
);
1522 MeasureUnit
MeasureUnit::getWatt() {
1523 return MeasureUnit(16, 5);
1526 MeasureUnit
*MeasureUnit::createAtmosphere(UErrorCode
&status
) {
1527 return MeasureUnit::create(17, 0, status
);
1530 MeasureUnit
MeasureUnit::getAtmosphere() {
1531 return MeasureUnit(17, 0);
1534 MeasureUnit
*MeasureUnit::createHectopascal(UErrorCode
&status
) {
1535 return MeasureUnit::create(17, 1, status
);
1538 MeasureUnit
MeasureUnit::getHectopascal() {
1539 return MeasureUnit(17, 1);
1542 MeasureUnit
*MeasureUnit::createInchHg(UErrorCode
&status
) {
1543 return MeasureUnit::create(17, 2, status
);
1546 MeasureUnit
MeasureUnit::getInchHg() {
1547 return MeasureUnit(17, 2);
1550 MeasureUnit
*MeasureUnit::createKilopascal(UErrorCode
&status
) {
1551 return MeasureUnit::create(17, 3, status
);
1554 MeasureUnit
MeasureUnit::getKilopascal() {
1555 return MeasureUnit(17, 3);
1558 MeasureUnit
*MeasureUnit::createMegapascal(UErrorCode
&status
) {
1559 return MeasureUnit::create(17, 4, status
);
1562 MeasureUnit
MeasureUnit::getMegapascal() {
1563 return MeasureUnit(17, 4);
1566 MeasureUnit
*MeasureUnit::createMillibar(UErrorCode
&status
) {
1567 return MeasureUnit::create(17, 5, status
);
1570 MeasureUnit
MeasureUnit::getMillibar() {
1571 return MeasureUnit(17, 5);
1574 MeasureUnit
*MeasureUnit::createMillimeterOfMercury(UErrorCode
&status
) {
1575 return MeasureUnit::create(17, 6, status
);
1578 MeasureUnit
MeasureUnit::getMillimeterOfMercury() {
1579 return MeasureUnit(17, 6);
1582 MeasureUnit
*MeasureUnit::createPoundPerSquareInch(UErrorCode
&status
) {
1583 return MeasureUnit::create(17, 7, status
);
1586 MeasureUnit
MeasureUnit::getPoundPerSquareInch() {
1587 return MeasureUnit(17, 7);
1590 MeasureUnit
*MeasureUnit::createKilometerPerHour(UErrorCode
&status
) {
1591 return MeasureUnit::create(18, 0, status
);
1594 MeasureUnit
MeasureUnit::getKilometerPerHour() {
1595 return MeasureUnit(18, 0);
1598 MeasureUnit
*MeasureUnit::createKnot(UErrorCode
&status
) {
1599 return MeasureUnit::create(18, 1, status
);
1602 MeasureUnit
MeasureUnit::getKnot() {
1603 return MeasureUnit(18, 1);
1606 MeasureUnit
*MeasureUnit::createMeterPerSecond(UErrorCode
&status
) {
1607 return MeasureUnit::create(18, 2, status
);
1610 MeasureUnit
MeasureUnit::getMeterPerSecond() {
1611 return MeasureUnit(18, 2);
1614 MeasureUnit
*MeasureUnit::createMilePerHour(UErrorCode
&status
) {
1615 return MeasureUnit::create(18, 3, status
);
1618 MeasureUnit
MeasureUnit::getMilePerHour() {
1619 return MeasureUnit(18, 3);
1622 MeasureUnit
*MeasureUnit::createCelsius(UErrorCode
&status
) {
1623 return MeasureUnit::create(19, 0, status
);
1626 MeasureUnit
MeasureUnit::getCelsius() {
1627 return MeasureUnit(19, 0);
1630 MeasureUnit
*MeasureUnit::createFahrenheit(UErrorCode
&status
) {
1631 return MeasureUnit::create(19, 1, status
);
1634 MeasureUnit
MeasureUnit::getFahrenheit() {
1635 return MeasureUnit(19, 1);
1638 MeasureUnit
*MeasureUnit::createGenericTemperature(UErrorCode
&status
) {
1639 return MeasureUnit::create(19, 2, status
);
1642 MeasureUnit
MeasureUnit::getGenericTemperature() {
1643 return MeasureUnit(19, 2);
1646 MeasureUnit
*MeasureUnit::createKelvin(UErrorCode
&status
) {
1647 return MeasureUnit::create(19, 3, status
);
1650 MeasureUnit
MeasureUnit::getKelvin() {
1651 return MeasureUnit(19, 3);
1654 MeasureUnit
*MeasureUnit::createNewtonMeter(UErrorCode
&status
) {
1655 return MeasureUnit::create(20, 0, status
);
1658 MeasureUnit
MeasureUnit::getNewtonMeter() {
1659 return MeasureUnit(20, 0);
1662 MeasureUnit
*MeasureUnit::createPoundFoot(UErrorCode
&status
) {
1663 return MeasureUnit::create(20, 1, status
);
1666 MeasureUnit
MeasureUnit::getPoundFoot() {
1667 return MeasureUnit(20, 1);
1670 MeasureUnit
*MeasureUnit::createAcreFoot(UErrorCode
&status
) {
1671 return MeasureUnit::create(21, 0, status
);
1674 MeasureUnit
MeasureUnit::getAcreFoot() {
1675 return MeasureUnit(21, 0);
1678 MeasureUnit
*MeasureUnit::createBarrel(UErrorCode
&status
) {
1679 return MeasureUnit::create(21, 1, status
);
1682 MeasureUnit
MeasureUnit::getBarrel() {
1683 return MeasureUnit(21, 1);
1686 MeasureUnit
*MeasureUnit::createBushel(UErrorCode
&status
) {
1687 return MeasureUnit::create(21, 2, status
);
1690 MeasureUnit
MeasureUnit::getBushel() {
1691 return MeasureUnit(21, 2);
1694 MeasureUnit
*MeasureUnit::createCentiliter(UErrorCode
&status
) {
1695 return MeasureUnit::create(21, 3, status
);
1698 MeasureUnit
MeasureUnit::getCentiliter() {
1699 return MeasureUnit(21, 3);
1702 MeasureUnit
*MeasureUnit::createCubicCentimeter(UErrorCode
&status
) {
1703 return MeasureUnit::create(21, 4, status
);
1706 MeasureUnit
MeasureUnit::getCubicCentimeter() {
1707 return MeasureUnit(21, 4);
1710 MeasureUnit
*MeasureUnit::createCubicFoot(UErrorCode
&status
) {
1711 return MeasureUnit::create(21, 5, status
);
1714 MeasureUnit
MeasureUnit::getCubicFoot() {
1715 return MeasureUnit(21, 5);
1718 MeasureUnit
*MeasureUnit::createCubicInch(UErrorCode
&status
) {
1719 return MeasureUnit::create(21, 6, status
);
1722 MeasureUnit
MeasureUnit::getCubicInch() {
1723 return MeasureUnit(21, 6);
1726 MeasureUnit
*MeasureUnit::createCubicKilometer(UErrorCode
&status
) {
1727 return MeasureUnit::create(21, 7, status
);
1730 MeasureUnit
MeasureUnit::getCubicKilometer() {
1731 return MeasureUnit(21, 7);
1734 MeasureUnit
*MeasureUnit::createCubicMeter(UErrorCode
&status
) {
1735 return MeasureUnit::create(21, 8, status
);
1738 MeasureUnit
MeasureUnit::getCubicMeter() {
1739 return MeasureUnit(21, 8);
1742 MeasureUnit
*MeasureUnit::createCubicMile(UErrorCode
&status
) {
1743 return MeasureUnit::create(21, 9, status
);
1746 MeasureUnit
MeasureUnit::getCubicMile() {
1747 return MeasureUnit(21, 9);
1750 MeasureUnit
*MeasureUnit::createCubicYard(UErrorCode
&status
) {
1751 return MeasureUnit::create(21, 10, status
);
1754 MeasureUnit
MeasureUnit::getCubicYard() {
1755 return MeasureUnit(21, 10);
1758 MeasureUnit
*MeasureUnit::createCup(UErrorCode
&status
) {
1759 return MeasureUnit::create(21, 11, status
);
1762 MeasureUnit
MeasureUnit::getCup() {
1763 return MeasureUnit(21, 11);
1766 MeasureUnit
*MeasureUnit::createCupMetric(UErrorCode
&status
) {
1767 return MeasureUnit::create(21, 12, status
);
1770 MeasureUnit
MeasureUnit::getCupMetric() {
1771 return MeasureUnit(21, 12);
1774 MeasureUnit
*MeasureUnit::createDeciliter(UErrorCode
&status
) {
1775 return MeasureUnit::create(21, 13, status
);
1778 MeasureUnit
MeasureUnit::getDeciliter() {
1779 return MeasureUnit(21, 13);
1782 MeasureUnit
*MeasureUnit::createFluidOunce(UErrorCode
&status
) {
1783 return MeasureUnit::create(21, 14, status
);
1786 MeasureUnit
MeasureUnit::getFluidOunce() {
1787 return MeasureUnit(21, 14);
1790 MeasureUnit
*MeasureUnit::createFluidOunceImperial(UErrorCode
&status
) {
1791 return MeasureUnit::create(21, 15, status
);
1794 MeasureUnit
MeasureUnit::getFluidOunceImperial() {
1795 return MeasureUnit(21, 15);
1798 MeasureUnit
*MeasureUnit::createGallon(UErrorCode
&status
) {
1799 return MeasureUnit::create(21, 16, status
);
1802 MeasureUnit
MeasureUnit::getGallon() {
1803 return MeasureUnit(21, 16);
1806 MeasureUnit
*MeasureUnit::createGallonImperial(UErrorCode
&status
) {
1807 return MeasureUnit::create(21, 17, status
);
1810 MeasureUnit
MeasureUnit::getGallonImperial() {
1811 return MeasureUnit(21, 17);
1814 MeasureUnit
*MeasureUnit::createHectoliter(UErrorCode
&status
) {
1815 return MeasureUnit::create(21, 18, status
);
1818 MeasureUnit
MeasureUnit::getHectoliter() {
1819 return MeasureUnit(21, 18);
1822 MeasureUnit
*MeasureUnit::createLiter(UErrorCode
&status
) {
1823 return MeasureUnit::create(21, 19, status
);
1826 MeasureUnit
MeasureUnit::getLiter() {
1827 return MeasureUnit(21, 19);
1830 MeasureUnit
*MeasureUnit::createMegaliter(UErrorCode
&status
) {
1831 return MeasureUnit::create(21, 20, status
);
1834 MeasureUnit
MeasureUnit::getMegaliter() {
1835 return MeasureUnit(21, 20);
1838 MeasureUnit
*MeasureUnit::createMilliliter(UErrorCode
&status
) {
1839 return MeasureUnit::create(21, 21, status
);
1842 MeasureUnit
MeasureUnit::getMilliliter() {
1843 return MeasureUnit(21, 21);
1846 MeasureUnit
*MeasureUnit::createPint(UErrorCode
&status
) {
1847 return MeasureUnit::create(21, 22, status
);
1850 MeasureUnit
MeasureUnit::getPint() {
1851 return MeasureUnit(21, 22);
1854 MeasureUnit
*MeasureUnit::createPintMetric(UErrorCode
&status
) {
1855 return MeasureUnit::create(21, 23, status
);
1858 MeasureUnit
MeasureUnit::getPintMetric() {
1859 return MeasureUnit(21, 23);
1862 MeasureUnit
*MeasureUnit::createQuart(UErrorCode
&status
) {
1863 return MeasureUnit::create(21, 24, status
);
1866 MeasureUnit
MeasureUnit::getQuart() {
1867 return MeasureUnit(21, 24);
1870 MeasureUnit
*MeasureUnit::createTablespoon(UErrorCode
&status
) {
1871 return MeasureUnit::create(21, 25, status
);
1874 MeasureUnit
MeasureUnit::getTablespoon() {
1875 return MeasureUnit(21, 25);
1878 MeasureUnit
*MeasureUnit::createTeaspoon(UErrorCode
&status
) {
1879 return MeasureUnit::create(21, 26, status
);
1882 MeasureUnit
MeasureUnit::getTeaspoon() {
1883 return MeasureUnit(21, 26);
1886 // End generated code
1888 static int32_t binarySearch(
1889 const char * const * array
, int32_t start
, int32_t end
, const char * key
) {
1890 while (start
< end
) {
1891 int32_t mid
= (start
+ end
) / 2;
1892 int32_t cmp
= uprv_strcmp(array
[mid
], key
);
1905 MeasureUnit::MeasureUnit() {
1907 fTypeId
= kBaseTypeIdx
;
1908 fSubTypeId
= kBaseSubTypeIdx
;
1911 MeasureUnit::MeasureUnit(const MeasureUnit
&other
)
1912 : fTypeId(other
.fTypeId
), fSubTypeId(other
.fSubTypeId
) {
1913 uprv_strcpy(fCurrency
, other
.fCurrency
);
1916 MeasureUnit
&MeasureUnit::operator=(const MeasureUnit
&other
) {
1917 if (this == &other
) {
1920 fTypeId
= other
.fTypeId
;
1921 fSubTypeId
= other
.fSubTypeId
;
1922 uprv_strcpy(fCurrency
, other
.fCurrency
);
1926 UObject
*MeasureUnit::clone() const {
1927 return new MeasureUnit(*this);
1930 MeasureUnit::~MeasureUnit() {
1933 const char *MeasureUnit::getType() const {
1934 return gTypes
[fTypeId
];
1937 const char *MeasureUnit::getSubtype() const {
1938 return fCurrency
[0] == 0 ? gSubTypes
[getOffset()] : fCurrency
;
1941 UBool
MeasureUnit::operator==(const UObject
& other
) const {
1942 if (this == &other
) { // Same object, equal
1945 if (typeid(*this) != typeid(other
)) { // Different types, not equal
1948 const MeasureUnit
&rhs
= static_cast<const MeasureUnit
&>(other
);
1950 fTypeId
== rhs
.fTypeId
1951 && fSubTypeId
== rhs
.fSubTypeId
1952 && uprv_strcmp(fCurrency
, rhs
.fCurrency
) == 0);
1955 int32_t MeasureUnit::getIndex() const {
1956 return gIndexes
[fTypeId
] + fSubTypeId
;
1959 int32_t MeasureUnit::getAvailable(
1961 int32_t destCapacity
,
1962 UErrorCode
&errorCode
) {
1963 if (U_FAILURE(errorCode
)) {
1966 if (destCapacity
< UPRV_LENGTHOF(gSubTypes
)) {
1967 errorCode
= U_BUFFER_OVERFLOW_ERROR
;
1968 return UPRV_LENGTHOF(gSubTypes
);
1971 for (int32_t typeIdx
= 0; typeIdx
< UPRV_LENGTHOF(gTypes
); ++typeIdx
) {
1972 int32_t len
= gOffsets
[typeIdx
+ 1] - gOffsets
[typeIdx
];
1973 for (int32_t subTypeIdx
= 0; subTypeIdx
< len
; ++subTypeIdx
) {
1974 dest
[idx
].setTo(typeIdx
, subTypeIdx
);
1978 U_ASSERT(idx
== UPRV_LENGTHOF(gSubTypes
));
1979 return UPRV_LENGTHOF(gSubTypes
);
1982 int32_t MeasureUnit::getAvailable(
1985 int32_t destCapacity
,
1986 UErrorCode
&errorCode
) {
1987 if (U_FAILURE(errorCode
)) {
1990 int32_t typeIdx
= binarySearch(gTypes
, 0, UPRV_LENGTHOF(gTypes
), type
);
1991 if (typeIdx
== -1) {
1994 int32_t len
= gOffsets
[typeIdx
+ 1] - gOffsets
[typeIdx
];
1995 if (destCapacity
< len
) {
1996 errorCode
= U_BUFFER_OVERFLOW_ERROR
;
1999 for (int subTypeIdx
= 0; subTypeIdx
< len
; ++subTypeIdx
) {
2000 dest
[subTypeIdx
].setTo(typeIdx
, subTypeIdx
);
2005 StringEnumeration
* MeasureUnit::getAvailableTypes(UErrorCode
&errorCode
) {
2006 UEnumeration
*uenum
= uenum_openCharStringsEnumeration(
2007 gTypes
, UPRV_LENGTHOF(gTypes
), &errorCode
);
2008 if (U_FAILURE(errorCode
)) {
2012 StringEnumeration
*result
= new UStringEnumeration(uenum
);
2013 if (result
== NULL
) {
2014 errorCode
= U_MEMORY_ALLOCATION_ERROR
;
2021 int32_t MeasureUnit::getIndexCount() {
2022 return gIndexes
[UPRV_LENGTHOF(gIndexes
) - 1];
2025 int32_t MeasureUnit::internalGetIndexForTypeAndSubtype(const char *type
, const char *subtype
) {
2026 int32_t t
= binarySearch(gTypes
, 0, UPRV_LENGTHOF(gTypes
), type
);
2030 int32_t st
= binarySearch(gSubTypes
, gOffsets
[t
], gOffsets
[t
+ 1], subtype
);
2034 return gIndexes
[t
] + st
- gOffsets
[t
];
2037 MeasureUnit
MeasureUnit::resolveUnitPerUnit(
2038 const MeasureUnit
&unit
, const MeasureUnit
&perUnit
, bool* isResolved
) {
2039 int32_t unitOffset
= unit
.getOffset();
2040 int32_t perUnitOffset
= perUnit
.getOffset();
2042 // binary search for (unitOffset, perUnitOffset)
2044 int32_t end
= UPRV_LENGTHOF(unitPerUnitToSingleUnit
);
2045 while (start
< end
) {
2046 int32_t mid
= (start
+ end
) / 2;
2047 int32_t *midRow
= unitPerUnitToSingleUnit
[mid
];
2048 if (unitOffset
< midRow
[0]) {
2050 } else if (unitOffset
> midRow
[0]) {
2052 } else if (perUnitOffset
< midRow
[1]) {
2054 } else if (perUnitOffset
> midRow
[1]) {
2057 // We found a resolution for our unit / per-unit combo
2060 return MeasureUnit(midRow
[2], midRow
[3]);
2064 *isResolved
= false;
2065 return MeasureUnit();
2068 MeasureUnit
*MeasureUnit::create(int typeId
, int subTypeId
, UErrorCode
&status
) {
2069 if (U_FAILURE(status
)) {
2072 MeasureUnit
*result
= new MeasureUnit(typeId
, subTypeId
);
2073 if (result
== NULL
) {
2074 status
= U_MEMORY_ALLOCATION_ERROR
;
2079 void MeasureUnit::initTime(const char *timeId
) {
2080 int32_t result
= binarySearch(gTypes
, 0, UPRV_LENGTHOF(gTypes
), "duration");
2081 U_ASSERT(result
!= -1);
2083 result
= binarySearch(gSubTypes
, gOffsets
[fTypeId
], gOffsets
[fTypeId
+ 1], timeId
);
2084 U_ASSERT(result
!= -1);
2085 fSubTypeId
= result
- gOffsets
[fTypeId
];
2088 void MeasureUnit::initCurrency(const char *isoCurrency
) {
2089 int32_t result
= binarySearch(gTypes
, 0, UPRV_LENGTHOF(gTypes
), "currency");
2090 U_ASSERT(result
!= -1);
2092 result
= binarySearch(
2093 gSubTypes
, gOffsets
[fTypeId
], gOffsets
[fTypeId
+ 1], isoCurrency
);
2095 fSubTypeId
= result
- gOffsets
[fTypeId
];
2097 uprv_strncpy(fCurrency
, isoCurrency
, UPRV_LENGTHOF(fCurrency
));
2102 void MeasureUnit::initNoUnit(const char *subtype
) {
2103 int32_t result
= binarySearch(gTypes
, 0, UPRV_LENGTHOF(gTypes
), "none");
2104 U_ASSERT(result
!= -1);
2106 result
= binarySearch(gSubTypes
, gOffsets
[fTypeId
], gOffsets
[fTypeId
+ 1], subtype
);
2107 U_ASSERT(result
!= -1);
2108 fSubTypeId
= result
- gOffsets
[fTypeId
];
2111 void MeasureUnit::setTo(int32_t typeId
, int32_t subTypeId
) {
2113 fSubTypeId
= subTypeId
;
2117 int32_t MeasureUnit::getOffset() const {
2118 return gOffsets
[fTypeId
] + fSubTypeId
;
2123 #endif /* !UNCONFIG_NO_FORMATTING */