X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/f3c0d7a59d99c2a94c6b8822291f0e42be3773c9..249c4c5ea9376c24572daf9c2effa7484a282f14:/icuSources/i18n/measunit.cpp diff --git a/icuSources/i18n/measunit.cpp b/icuSources/i18n/measunit.cpp index 15497eff..667c7399 100644 --- a/icuSources/i18n/measunit.cpp +++ b/icuSources/i18n/measunit.cpp @@ -33,6 +33,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit) // // Start generated code + static const int32_t gOffsets[] = { 0, 2, @@ -40,20 +41,21 @@ static const int32_t gOffsets[] = { 16, 20, 24, - 285, - 295, - 306, - 310, - 316, - 320, - 340, - 341, - 352, - 358, - 363, - 367, - 371, - 396 + 322, + 332, + 343, + 347, + 353, + 357, + 377, + 378, + 389, + 392, + 398, + 403, + 407, + 411, + 436 }; static const int32_t gIndexes[] = { @@ -72,11 +74,12 @@ static const int32_t gIndexes[] = { 79, 80, 91, - 97, - 102, - 106, - 110, - 135 + 94, + 100, + 105, + 109, + 113, + 138 }; // Must be sorted alphabetically. @@ -95,6 +98,7 @@ static const char * const gTypes[] = { "length", "light", "mass", + "none", "power", "pressure", "speed", @@ -132,15 +136,18 @@ static const char * const gSubTypes[] = { "AED", "AFA", "AFN", + "ALK", "ALL", "AMD", "ANG", "AOA", + "AOK", "AON", "AOR", "ARA", "ARP", "ARS", + "ARY", "ATS", "AUD", "AWG", @@ -154,6 +161,8 @@ static const char * const gSubTypes[] = { "BEC", "BEF", "BEL", + "BGJ", + "BGK", "BGL", "BGN", "BHD", @@ -161,7 +170,9 @@ static const char * const gSubTypes[] = { "BMD", "BND", "BOB", + "BOP", "BOV", + "BRB", "BRC", "BRE", "BRL", @@ -169,6 +180,7 @@ static const char * const gSubTypes[] = { "BRR", "BSD", "BTN", + "BUK", "BWP", "BYB", "BYN", @@ -187,6 +199,7 @@ static const char * const gSubTypes[] = { "COU", "CRC", "CSD", + "CSJ", "CSK", "CUC", "CUP", @@ -221,10 +234,13 @@ static const char * const gSubTypes[] = { "GHS", "GIP", "GMD", + "GNE", "GNF", + "GNS", "GQE", "GRD", "GTQ", + "GWE", "GWP", "GYD", "HKD", @@ -235,10 +251,13 @@ static const char * const gSubTypes[] = { "HUF", "IDR", "IEP", + "ILP", + "ILR", "ILS", "INR", "IQD", "IRR", + "ISJ", "ISK", "ITL", "JMD", @@ -253,11 +272,13 @@ static const char * const gSubTypes[] = { "KWD", "KYD", "KZT", + "LAJ", "LAK", "LBP", "LKR", "LRD", "LSL", + "LSM", "LTL", "LTT", "LUC", @@ -276,17 +297,23 @@ static const char * const gSubTypes[] = { "MNT", "MOP", "MRO", + "MRU", "MTL", + "MTP", "MUR", + "MVQ", "MVR", "MWK", "MXN", + "MXP", "MXV", "MYR", + "MZE", "MZM", "MZN", "NAD", "NGN", + "NIC", "NIO", "NLG", "NOK", @@ -294,6 +321,7 @@ static const char * const gSubTypes[] = { "NZD", "OMR", "PAB", + "PEH", "PEI", "PEN", "PES", @@ -305,6 +333,8 @@ static const char * const gSubTypes[] = { "PTE", "PYG", "QAR", + "RHD", + "ROK", "ROL", "RON", "RSD", @@ -316,6 +346,7 @@ static const char * const gSubTypes[] = { "SCR", "SDD", "SDG", + "SDP", "SEK", "SGD", "SHP", @@ -327,6 +358,8 @@ static const char * const gSubTypes[] = { "SRG", "SSP", "STD", + "STN", + "SUR", "SVC", "SYP", "SZL", @@ -345,15 +378,21 @@ static const char * const gSubTypes[] = { "TZS", "UAH", "UAK", + "UGS", + "UGW", "UGX", "USD", "USN", "USS", "UYI", + "UYN", + "UYP", "UYU", "UZS", "VEB", "VEF", + "VES", + "VNC", "VND", "VUV", "WST", @@ -377,6 +416,7 @@ static const char * const gSubTypes[] = { "XXX", "YDD", "YER", + "YUD", "YUM", "YUN", "ZAL", @@ -385,6 +425,7 @@ static const char * const gSubTypes[] = { "ZMW", "ZRN", "ZRZ", + "ZWC", "ZWD", "ZWL", "ZWN", @@ -456,6 +497,9 @@ static const char * const gSubTypes[] = { "pound", "stone", "ton", + "base", + "percent", + "permille", "gigawatt", "horsepower", "kilowatt", @@ -504,16 +548,20 @@ static const char * const gSubTypes[] = { // Must be sorted by first value and then second value. static int32_t unitPerUnitToSingleUnit[][4] = { - {327, 297, 16, 0}, - {329, 303, 16, 2}, - {331, 297, 16, 3}, - {331, 385, 4, 2}, - {331, 386, 4, 3}, - {346, 383, 3, 1}, - {349, 11, 15, 4}, - {388, 327, 4, 1} + {364, 334, 17, 0}, + {366, 340, 17, 2}, + {368, 334, 17, 3}, + {368, 425, 4, 2}, + {368, 426, 4, 3}, + {383, 423, 3, 1}, + {386, 11, 16, 4}, + {428, 364, 4, 1} }; +// Shortcuts to the base unit in order to make the default constructor fast +static const int32_t kBaseTypeIdx = 14; +static const int32_t kBaseSubTypeIdx = 0; + MeasureUnit *MeasureUnit::createGForce(UErrorCode &status) { return MeasureUnit::create(0, 0, status); } @@ -610,14 +658,6 @@ MeasureUnit *MeasureUnit::createMilePerGallonImperial(UErrorCode &status) { return MeasureUnit::create(4, 3, status); } -// MeasureUnit *MeasureUnit::createEast(UErrorCode &status) {...} - -// MeasureUnit *MeasureUnit::createNorth(UErrorCode &status) {...} - -// MeasureUnit *MeasureUnit::createSouth(UErrorCode &status) {...} - -// MeasureUnit *MeasureUnit::createWest(UErrorCode &status) {...} - MeasureUnit *MeasureUnit::createBit(UErrorCode &status) { return MeasureUnit::create(6, 0, status); } @@ -887,179 +927,179 @@ MeasureUnit *MeasureUnit::createTon(UErrorCode &status) { } MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) { - return MeasureUnit::create(14, 0, status); + return MeasureUnit::create(15, 0, status); } MeasureUnit *MeasureUnit::createHorsepower(UErrorCode &status) { - return MeasureUnit::create(14, 1, status); + return MeasureUnit::create(15, 1, status); } MeasureUnit *MeasureUnit::createKilowatt(UErrorCode &status) { - return MeasureUnit::create(14, 2, status); + return MeasureUnit::create(15, 2, status); } MeasureUnit *MeasureUnit::createMegawatt(UErrorCode &status) { - return MeasureUnit::create(14, 3, status); + return MeasureUnit::create(15, 3, status); } MeasureUnit *MeasureUnit::createMilliwatt(UErrorCode &status) { - return MeasureUnit::create(14, 4, status); + return MeasureUnit::create(15, 4, status); } MeasureUnit *MeasureUnit::createWatt(UErrorCode &status) { - return MeasureUnit::create(14, 5, status); + return MeasureUnit::create(15, 5, status); } MeasureUnit *MeasureUnit::createHectopascal(UErrorCode &status) { - return MeasureUnit::create(15, 0, status); + return MeasureUnit::create(16, 0, status); } MeasureUnit *MeasureUnit::createInchHg(UErrorCode &status) { - return MeasureUnit::create(15, 1, status); + return MeasureUnit::create(16, 1, status); } MeasureUnit *MeasureUnit::createMillibar(UErrorCode &status) { - return MeasureUnit::create(15, 2, status); + return MeasureUnit::create(16, 2, status); } MeasureUnit *MeasureUnit::createMillimeterOfMercury(UErrorCode &status) { - return MeasureUnit::create(15, 3, status); + return MeasureUnit::create(16, 3, status); } MeasureUnit *MeasureUnit::createPoundPerSquareInch(UErrorCode &status) { - return MeasureUnit::create(15, 4, status); + return MeasureUnit::create(16, 4, status); } MeasureUnit *MeasureUnit::createKilometerPerHour(UErrorCode &status) { - return MeasureUnit::create(16, 0, status); + return MeasureUnit::create(17, 0, status); } MeasureUnit *MeasureUnit::createKnot(UErrorCode &status) { - return MeasureUnit::create(16, 1, status); + return MeasureUnit::create(17, 1, status); } MeasureUnit *MeasureUnit::createMeterPerSecond(UErrorCode &status) { - return MeasureUnit::create(16, 2, status); + return MeasureUnit::create(17, 2, status); } MeasureUnit *MeasureUnit::createMilePerHour(UErrorCode &status) { - return MeasureUnit::create(16, 3, status); + return MeasureUnit::create(17, 3, status); } MeasureUnit *MeasureUnit::createCelsius(UErrorCode &status) { - return MeasureUnit::create(17, 0, status); + return MeasureUnit::create(18, 0, status); } MeasureUnit *MeasureUnit::createFahrenheit(UErrorCode &status) { - return MeasureUnit::create(17, 1, status); + return MeasureUnit::create(18, 1, status); } MeasureUnit *MeasureUnit::createGenericTemperature(UErrorCode &status) { - return MeasureUnit::create(17, 2, status); + return MeasureUnit::create(18, 2, status); } MeasureUnit *MeasureUnit::createKelvin(UErrorCode &status) { - return MeasureUnit::create(17, 3, status); + return MeasureUnit::create(18, 3, status); } MeasureUnit *MeasureUnit::createAcreFoot(UErrorCode &status) { - return MeasureUnit::create(18, 0, status); + return MeasureUnit::create(19, 0, status); } MeasureUnit *MeasureUnit::createBushel(UErrorCode &status) { - return MeasureUnit::create(18, 1, status); + return MeasureUnit::create(19, 1, status); } MeasureUnit *MeasureUnit::createCentiliter(UErrorCode &status) { - return MeasureUnit::create(18, 2, status); + return MeasureUnit::create(19, 2, status); } MeasureUnit *MeasureUnit::createCubicCentimeter(UErrorCode &status) { - return MeasureUnit::create(18, 3, status); + return MeasureUnit::create(19, 3, status); } MeasureUnit *MeasureUnit::createCubicFoot(UErrorCode &status) { - return MeasureUnit::create(18, 4, status); + return MeasureUnit::create(19, 4, status); } MeasureUnit *MeasureUnit::createCubicInch(UErrorCode &status) { - return MeasureUnit::create(18, 5, status); + return MeasureUnit::create(19, 5, status); } MeasureUnit *MeasureUnit::createCubicKilometer(UErrorCode &status) { - return MeasureUnit::create(18, 6, status); + return MeasureUnit::create(19, 6, status); } MeasureUnit *MeasureUnit::createCubicMeter(UErrorCode &status) { - return MeasureUnit::create(18, 7, status); + return MeasureUnit::create(19, 7, status); } MeasureUnit *MeasureUnit::createCubicMile(UErrorCode &status) { - return MeasureUnit::create(18, 8, status); + return MeasureUnit::create(19, 8, status); } MeasureUnit *MeasureUnit::createCubicYard(UErrorCode &status) { - return MeasureUnit::create(18, 9, status); + return MeasureUnit::create(19, 9, status); } MeasureUnit *MeasureUnit::createCup(UErrorCode &status) { - return MeasureUnit::create(18, 10, status); + return MeasureUnit::create(19, 10, status); } MeasureUnit *MeasureUnit::createCupMetric(UErrorCode &status) { - return MeasureUnit::create(18, 11, status); + return MeasureUnit::create(19, 11, status); } MeasureUnit *MeasureUnit::createDeciliter(UErrorCode &status) { - return MeasureUnit::create(18, 12, status); + return MeasureUnit::create(19, 12, status); } MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) { - return MeasureUnit::create(18, 13, status); + return MeasureUnit::create(19, 13, status); } MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) { - return MeasureUnit::create(18, 14, status); + return MeasureUnit::create(19, 14, status); } MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) { - return MeasureUnit::create(18, 15, status); + return MeasureUnit::create(19, 15, status); } MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) { - return MeasureUnit::create(18, 16, status); + return MeasureUnit::create(19, 16, status); } MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) { - return MeasureUnit::create(18, 17, status); + return MeasureUnit::create(19, 17, status); } MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) { - return MeasureUnit::create(18, 18, status); + return MeasureUnit::create(19, 18, status); } MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) { - return MeasureUnit::create(18, 19, status); + return MeasureUnit::create(19, 19, status); } MeasureUnit *MeasureUnit::createPint(UErrorCode &status) { - return MeasureUnit::create(18, 20, status); + return MeasureUnit::create(19, 20, status); } MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) { - return MeasureUnit::create(18, 21, status); + return MeasureUnit::create(19, 21, status); } MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) { - return MeasureUnit::create(18, 22, status); + return MeasureUnit::create(19, 22, status); } MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) { - return MeasureUnit::create(18, 23, status); + return MeasureUnit::create(19, 23, status); } MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) { - return MeasureUnit::create(18, 24, status); + return MeasureUnit::create(19, 24, status); } // End generated code @@ -1080,7 +1120,13 @@ static int32_t binarySearch( } return -1; } - + +MeasureUnit::MeasureUnit() { + fCurrency[0] = 0; + fTypeId = kBaseTypeIdx; + fSubTypeId = kBaseSubTypeIdx; +} + MeasureUnit::MeasureUnit(const MeasureUnit &other) : fTypeId(other.fTypeId), fSubTypeId(other.fSubTypeId) { uprv_strcpy(fCurrency, other.fCurrency); @@ -1207,8 +1253,8 @@ int32_t MeasureUnit::internalGetIndexForTypeAndSubtype(const char *type, const c return gIndexes[t] + st - gOffsets[t]; } -MeasureUnit *MeasureUnit::resolveUnitPerUnit( - const MeasureUnit &unit, const MeasureUnit &perUnit) { +MeasureUnit MeasureUnit::resolveUnitPerUnit( + const MeasureUnit &unit, const MeasureUnit &perUnit, bool* isResolved) { int32_t unitOffset = unit.getOffset(); int32_t perUnitOffset = perUnit.getOffset(); @@ -1229,10 +1275,13 @@ MeasureUnit *MeasureUnit::resolveUnitPerUnit( } else { // We found a resolution for our unit / per-unit combo // return it. - return new MeasureUnit(midRow[2], midRow[3]); + *isResolved = true; + return MeasureUnit(midRow[2], midRow[3]); } } - return NULL; + + *isResolved = false; + return MeasureUnit(); } MeasureUnit *MeasureUnit::create(int typeId, int subTypeId, UErrorCode &status) { @@ -1269,6 +1318,15 @@ void MeasureUnit::initCurrency(const char *isoCurrency) { } } +void MeasureUnit::initNoUnit(const char *subtype) { + int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "none"); + U_ASSERT(result != -1); + fTypeId = result; + result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], subtype); + U_ASSERT(result != -1); + fSubTypeId = result - gOffsets[fTypeId]; +} + void MeasureUnit::setTo(int32_t typeId, int32_t subTypeId) { fTypeId = typeId; fSubTypeId = subTypeId;