1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294 |
- // Copyright (C) 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- **********************************************************************
- * Copyright (c) 2004-2016, International Business Machines
- * Corporation and others. All Rights Reserved.
- **********************************************************************
- * Author: Alan Liu
- * Created: April 26, 2004
- * Since: ICU 3.0
- **********************************************************************
- */
- #include "utypeinfo.h" // for 'typeid' to work
- #include "unicode/measunit.h"
- #if !UCONFIG_NO_FORMATTING
- #include "unicode/uenum.h"
- #include "ustrenum.h"
- #include "cstring.h"
- #include "uassert.h"
- U_NAMESPACE_BEGIN
- UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit)
- // All code between the "Start generated code" comment and
- // the "End generated code" comment is auto generated code
- // and must not be edited manually. For instructions on how to correctly
- // update this code, refer to:
- // http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
- //
- // Start generated code
- static const int32_t gOffsets[] = {
- 0,
- 2,
- 7,
- 16,
- 20,
- 24,
- 28,
- 288,
- 298,
- 309,
- 313,
- 319,
- 323,
- 342,
- 343,
- 354,
- 360,
- 365,
- 369,
- 373,
- 398
- };
- static const int32_t gIndexes[] = {
- 0,
- 2,
- 7,
- 16,
- 20,
- 24,
- 28,
- 28,
- 38,
- 49,
- 53,
- 59,
- 63,
- 82,
- 83,
- 94,
- 100,
- 105,
- 109,
- 113,
- 138
- };
- // Must be sorted alphabetically.
- static const char * const gTypes[] = {
- "acceleration",
- "angle",
- "area",
- "concentr",
- "consumption",
- "coordinate",
- "currency",
- "digital",
- "duration",
- "electric",
- "energy",
- "frequency",
- "length",
- "light",
- "mass",
- "power",
- "pressure",
- "speed",
- "temperature",
- "volume"
- };
- // Must be grouped by type and sorted alphabetically within each type.
- static const char * const gSubTypes[] = {
- "g-force",
- "meter-per-second-squared",
- "arc-minute",
- "arc-second",
- "degree",
- "radian",
- "revolution",
- "acre",
- "hectare",
- "square-centimeter",
- "square-foot",
- "square-inch",
- "square-kilometer",
- "square-meter",
- "square-mile",
- "square-yard",
- "karat",
- "milligram-per-deciliter",
- "millimole-per-liter",
- "part-per-million",
- "liter-per-100kilometers",
- "liter-per-kilometer",
- "mile-per-gallon",
- "mile-per-gallon-imperial",
- "east",
- "north",
- "south",
- "west",
- "ADP",
- "AED",
- "AFA",
- "AFN",
- "ALL",
- "AMD",
- "ANG",
- "AOA",
- "AON",
- "AOR",
- "ARA",
- "ARP",
- "ARS",
- "ATS",
- "AUD",
- "AWG",
- "AYM",
- "AZM",
- "AZN",
- "BAD",
- "BAM",
- "BBD",
- "BDT",
- "BEC",
- "BEF",
- "BEL",
- "BGL",
- "BGN",
- "BHD",
- "BIF",
- "BMD",
- "BND",
- "BOB",
- "BOV",
- "BRC",
- "BRE",
- "BRL",
- "BRN",
- "BRR",
- "BSD",
- "BTN",
- "BWP",
- "BYB",
- "BYR",
- "BZD",
- "CAD",
- "CDF",
- "CHC",
- "CHE",
- "CHF",
- "CHW",
- "CLF",
- "CLP",
- "CNY",
- "COP",
- "COU",
- "CRC",
- "CSD",
- "CSK",
- "CUC",
- "CUP",
- "CVE",
- "CYP",
- "CZK",
- "DDM",
- "DEM",
- "DJF",
- "DKK",
- "DOP",
- "DZD",
- "ECS",
- "ECV",
- "EEK",
- "EGP",
- "ERN",
- "ESA",
- "ESB",
- "ESP",
- "ETB",
- "EUR",
- "FIM",
- "FJD",
- "FKP",
- "FRF",
- "GBP",
- "GEK",
- "GEL",
- "GHC",
- "GHP",
- "GHS",
- "GIP",
- "GMD",
- "GNF",
- "GQE",
- "GRD",
- "GTQ",
- "GWP",
- "GYD",
- "HKD",
- "HNL",
- "HRD",
- "HRK",
- "HTG",
- "HUF",
- "IDR",
- "IEP",
- "ILS",
- "INR",
- "IQD",
- "IRR",
- "ISK",
- "ITL",
- "JMD",
- "JOD",
- "JPY",
- "KES",
- "KGS",
- "KHR",
- "KMF",
- "KPW",
- "KRW",
- "KWD",
- "KYD",
- "KZT",
- "LAK",
- "LBP",
- "LKR",
- "LRD",
- "LSL",
- "LTL",
- "LTT",
- "LUC",
- "LUF",
- "LUL",
- "LVL",
- "LVR",
- "LYD",
- "MAD",
- "MDL",
- "MGA",
- "MGF",
- "MKD",
- "MLF",
- "MMK",
- "MNT",
- "MOP",
- "MRO",
- "MTL",
- "MUR",
- "MVR",
- "MWK",
- "MXN",
- "MXV",
- "MYR",
- "MZM",
- "MZN",
- "NAD",
- "NGN",
- "NIO",
- "NLG",
- "NOK",
- "NPR",
- "NZD",
- "OMR",
- "PAB",
- "PEI",
- "PEN",
- "PES",
- "PGK",
- "PHP",
- "PKR",
- "PLN",
- "PLZ",
- "PTE",
- "PYG",
- "QAR",
- "ROL",
- "RON",
- "RSD",
- "RUB",
- "RUR",
- "RWF",
- "SAR",
- "SBD",
- "SCR",
- "SDD",
- "SDG",
- "SEK",
- "SGD",
- "SHP",
- "SIT",
- "SKK",
- "SLL",
- "SOS",
- "SRD",
- "SRG",
- "SSP",
- "STD",
- "SVC",
- "SYP",
- "SZL",
- "THB",
- "TJR",
- "TJS",
- "TMM",
- "TMT",
- "TND",
- "TOP",
- "TPE",
- "TRL",
- "TRY",
- "TTD",
- "TWD",
- "TZS",
- "UAH",
- "UAK",
- "UGX",
- "USD",
- "USN",
- "USS",
- "UYI",
- "UYU",
- "UZS",
- "VEB",
- "VEF",
- "VND",
- "VUV",
- "WST",
- "XAF",
- "XAG",
- "XAU",
- "XBA",
- "XBB",
- "XBC",
- "XBD",
- "XCD",
- "XDR",
- "XEU",
- "XOF",
- "XPD",
- "XPF",
- "XPT",
- "XSU",
- "XTS",
- "XUA",
- "XXX",
- "YDD",
- "YER",
- "YUM",
- "YUN",
- "ZAL",
- "ZAR",
- "ZMK",
- "ZMW",
- "ZRN",
- "ZRZ",
- "ZWD",
- "ZWL",
- "ZWN",
- "ZWR",
- "bit",
- "byte",
- "gigabit",
- "gigabyte",
- "kilobit",
- "kilobyte",
- "megabit",
- "megabyte",
- "terabit",
- "terabyte",
- "century",
- "day",
- "hour",
- "microsecond",
- "millisecond",
- "minute",
- "month",
- "nanosecond",
- "second",
- "week",
- "year",
- "ampere",
- "milliampere",
- "ohm",
- "volt",
- "calorie",
- "foodcalorie",
- "joule",
- "kilocalorie",
- "kilojoule",
- "kilowatt-hour",
- "gigahertz",
- "hertz",
- "kilohertz",
- "megahertz",
- "astronomical-unit",
- "centimeter",
- "decimeter",
- "fathom",
- "foot",
- "furlong",
- "inch",
- "kilometer",
- "light-year",
- "meter",
- "micrometer",
- "mile",
- "mile-scandinavian",
- "millimeter",
- "nanometer",
- "nautical-mile",
- "parsec",
- "picometer",
- "yard",
- "lux",
- "carat",
- "gram",
- "kilogram",
- "metric-ton",
- "microgram",
- "milligram",
- "ounce",
- "ounce-troy",
- "pound",
- "stone",
- "ton",
- "gigawatt",
- "horsepower",
- "kilowatt",
- "megawatt",
- "milliwatt",
- "watt",
- "hectopascal",
- "inch-hg",
- "millibar",
- "millimeter-of-mercury",
- "pound-per-square-inch",
- "kilometer-per-hour",
- "knot",
- "meter-per-second",
- "mile-per-hour",
- "celsius",
- "fahrenheit",
- "generic",
- "kelvin",
- "acre-foot",
- "bushel",
- "centiliter",
- "cubic-centimeter",
- "cubic-foot",
- "cubic-inch",
- "cubic-kilometer",
- "cubic-meter",
- "cubic-mile",
- "cubic-yard",
- "cup",
- "cup-metric",
- "deciliter",
- "fluid-ounce",
- "gallon",
- "gallon-imperial",
- "hectoliter",
- "liter",
- "megaliter",
- "milliliter",
- "pint",
- "pint-metric",
- "quart",
- "tablespoon",
- "teaspoon"
- };
- // Must be sorted by first value and then second value.
- static int32_t unitPerUnitToSingleUnit[][4] = {
- {330, 300, 17, 0},
- {332, 306, 17, 2},
- {334, 300, 17, 3},
- {334, 387, 4, 2},
- {334, 388, 4, 3},
- {348, 385, 3, 1},
- {351, 11, 16, 4},
- {390, 330, 4, 1}
- };
- MeasureUnit *MeasureUnit::createGForce(UErrorCode &status) {
- return MeasureUnit::create(0, 0, status);
- }
- MeasureUnit *MeasureUnit::createMeterPerSecondSquared(UErrorCode &status) {
- return MeasureUnit::create(0, 1, status);
- }
- MeasureUnit *MeasureUnit::createArcMinute(UErrorCode &status) {
- return MeasureUnit::create(1, 0, status);
- }
- MeasureUnit *MeasureUnit::createArcSecond(UErrorCode &status) {
- return MeasureUnit::create(1, 1, status);
- }
- MeasureUnit *MeasureUnit::createDegree(UErrorCode &status) {
- return MeasureUnit::create(1, 2, status);
- }
- MeasureUnit *MeasureUnit::createRadian(UErrorCode &status) {
- return MeasureUnit::create(1, 3, status);
- }
- MeasureUnit *MeasureUnit::createRevolutionAngle(UErrorCode &status) {
- return MeasureUnit::create(1, 4, status);
- }
- MeasureUnit *MeasureUnit::createAcre(UErrorCode &status) {
- return MeasureUnit::create(2, 0, status);
- }
- MeasureUnit *MeasureUnit::createHectare(UErrorCode &status) {
- return MeasureUnit::create(2, 1, status);
- }
- MeasureUnit *MeasureUnit::createSquareCentimeter(UErrorCode &status) {
- return MeasureUnit::create(2, 2, status);
- }
- MeasureUnit *MeasureUnit::createSquareFoot(UErrorCode &status) {
- return MeasureUnit::create(2, 3, status);
- }
- MeasureUnit *MeasureUnit::createSquareInch(UErrorCode &status) {
- return MeasureUnit::create(2, 4, status);
- }
- MeasureUnit *MeasureUnit::createSquareKilometer(UErrorCode &status) {
- return MeasureUnit::create(2, 5, status);
- }
- MeasureUnit *MeasureUnit::createSquareMeter(UErrorCode &status) {
- return MeasureUnit::create(2, 6, status);
- }
- MeasureUnit *MeasureUnit::createSquareMile(UErrorCode &status) {
- return MeasureUnit::create(2, 7, status);
- }
- MeasureUnit *MeasureUnit::createSquareYard(UErrorCode &status) {
- return MeasureUnit::create(2, 8, status);
- }
- MeasureUnit *MeasureUnit::createKarat(UErrorCode &status) {
- return MeasureUnit::create(3, 0, status);
- }
- MeasureUnit *MeasureUnit::createMilligramPerDeciliter(UErrorCode &status) {
- return MeasureUnit::create(3, 1, status);
- }
- MeasureUnit *MeasureUnit::createMillimolePerLiter(UErrorCode &status) {
- return MeasureUnit::create(3, 2, status);
- }
- MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
- return MeasureUnit::create(3, 3, status);
- }
- MeasureUnit *MeasureUnit::createLiterPer100Kilometers(UErrorCode &status) {
- return MeasureUnit::create(4, 0, status);
- }
- MeasureUnit *MeasureUnit::createLiterPerKilometer(UErrorCode &status) {
- return MeasureUnit::create(4, 1, status);
- }
- MeasureUnit *MeasureUnit::createMilePerGallon(UErrorCode &status) {
- return MeasureUnit::create(4, 2, status);
- }
- MeasureUnit *MeasureUnit::createMilePerGallonImperial(UErrorCode &status) {
- return MeasureUnit::create(4, 3, status);
- }
- MeasureUnit *MeasureUnit::createEast(UErrorCode &status) {
- return MeasureUnit::create(5, 0, status);
- }
- MeasureUnit *MeasureUnit::createNorth(UErrorCode &status) {
- return MeasureUnit::create(5, 1, status);
- }
- MeasureUnit *MeasureUnit::createSouth(UErrorCode &status) {
- return MeasureUnit::create(5, 2, status);
- }
- MeasureUnit *MeasureUnit::createWest(UErrorCode &status) {
- return MeasureUnit::create(5, 3, status);
- }
- MeasureUnit *MeasureUnit::createBit(UErrorCode &status) {
- return MeasureUnit::create(7, 0, status);
- }
- MeasureUnit *MeasureUnit::createByte(UErrorCode &status) {
- return MeasureUnit::create(7, 1, status);
- }
- MeasureUnit *MeasureUnit::createGigabit(UErrorCode &status) {
- return MeasureUnit::create(7, 2, status);
- }
- MeasureUnit *MeasureUnit::createGigabyte(UErrorCode &status) {
- return MeasureUnit::create(7, 3, status);
- }
- MeasureUnit *MeasureUnit::createKilobit(UErrorCode &status) {
- return MeasureUnit::create(7, 4, status);
- }
- MeasureUnit *MeasureUnit::createKilobyte(UErrorCode &status) {
- return MeasureUnit::create(7, 5, status);
- }
- MeasureUnit *MeasureUnit::createMegabit(UErrorCode &status) {
- return MeasureUnit::create(7, 6, status);
- }
- MeasureUnit *MeasureUnit::createMegabyte(UErrorCode &status) {
- return MeasureUnit::create(7, 7, status);
- }
- MeasureUnit *MeasureUnit::createTerabit(UErrorCode &status) {
- return MeasureUnit::create(7, 8, status);
- }
- MeasureUnit *MeasureUnit::createTerabyte(UErrorCode &status) {
- return MeasureUnit::create(7, 9, status);
- }
- MeasureUnit *MeasureUnit::createCentury(UErrorCode &status) {
- return MeasureUnit::create(8, 0, status);
- }
- MeasureUnit *MeasureUnit::createDay(UErrorCode &status) {
- return MeasureUnit::create(8, 1, status);
- }
- MeasureUnit *MeasureUnit::createHour(UErrorCode &status) {
- return MeasureUnit::create(8, 2, status);
- }
- MeasureUnit *MeasureUnit::createMicrosecond(UErrorCode &status) {
- return MeasureUnit::create(8, 3, status);
- }
- MeasureUnit *MeasureUnit::createMillisecond(UErrorCode &status) {
- return MeasureUnit::create(8, 4, status);
- }
- MeasureUnit *MeasureUnit::createMinute(UErrorCode &status) {
- return MeasureUnit::create(8, 5, status);
- }
- MeasureUnit *MeasureUnit::createMonth(UErrorCode &status) {
- return MeasureUnit::create(8, 6, status);
- }
- MeasureUnit *MeasureUnit::createNanosecond(UErrorCode &status) {
- return MeasureUnit::create(8, 7, status);
- }
- MeasureUnit *MeasureUnit::createSecond(UErrorCode &status) {
- return MeasureUnit::create(8, 8, status);
- }
- MeasureUnit *MeasureUnit::createWeek(UErrorCode &status) {
- return MeasureUnit::create(8, 9, status);
- }
- MeasureUnit *MeasureUnit::createYear(UErrorCode &status) {
- return MeasureUnit::create(8, 10, status);
- }
- MeasureUnit *MeasureUnit::createAmpere(UErrorCode &status) {
- return MeasureUnit::create(9, 0, status);
- }
- MeasureUnit *MeasureUnit::createMilliampere(UErrorCode &status) {
- return MeasureUnit::create(9, 1, status);
- }
- MeasureUnit *MeasureUnit::createOhm(UErrorCode &status) {
- return MeasureUnit::create(9, 2, status);
- }
- MeasureUnit *MeasureUnit::createVolt(UErrorCode &status) {
- return MeasureUnit::create(9, 3, status);
- }
- MeasureUnit *MeasureUnit::createCalorie(UErrorCode &status) {
- return MeasureUnit::create(10, 0, status);
- }
- MeasureUnit *MeasureUnit::createFoodcalorie(UErrorCode &status) {
- return MeasureUnit::create(10, 1, status);
- }
- MeasureUnit *MeasureUnit::createJoule(UErrorCode &status) {
- return MeasureUnit::create(10, 2, status);
- }
- MeasureUnit *MeasureUnit::createKilocalorie(UErrorCode &status) {
- return MeasureUnit::create(10, 3, status);
- }
- MeasureUnit *MeasureUnit::createKilojoule(UErrorCode &status) {
- return MeasureUnit::create(10, 4, status);
- }
- MeasureUnit *MeasureUnit::createKilowattHour(UErrorCode &status) {
- return MeasureUnit::create(10, 5, status);
- }
- MeasureUnit *MeasureUnit::createGigahertz(UErrorCode &status) {
- return MeasureUnit::create(11, 0, status);
- }
- MeasureUnit *MeasureUnit::createHertz(UErrorCode &status) {
- return MeasureUnit::create(11, 1, status);
- }
- MeasureUnit *MeasureUnit::createKilohertz(UErrorCode &status) {
- return MeasureUnit::create(11, 2, status);
- }
- MeasureUnit *MeasureUnit::createMegahertz(UErrorCode &status) {
- return MeasureUnit::create(11, 3, status);
- }
- MeasureUnit *MeasureUnit::createAstronomicalUnit(UErrorCode &status) {
- return MeasureUnit::create(12, 0, status);
- }
- MeasureUnit *MeasureUnit::createCentimeter(UErrorCode &status) {
- return MeasureUnit::create(12, 1, status);
- }
- MeasureUnit *MeasureUnit::createDecimeter(UErrorCode &status) {
- return MeasureUnit::create(12, 2, status);
- }
- MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) {
- return MeasureUnit::create(12, 3, status);
- }
- MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) {
- return MeasureUnit::create(12, 4, status);
- }
- MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) {
- return MeasureUnit::create(12, 5, status);
- }
- MeasureUnit *MeasureUnit::createInch(UErrorCode &status) {
- return MeasureUnit::create(12, 6, status);
- }
- MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) {
- return MeasureUnit::create(12, 7, status);
- }
- MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) {
- return MeasureUnit::create(12, 8, status);
- }
- MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) {
- return MeasureUnit::create(12, 9, status);
- }
- MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) {
- return MeasureUnit::create(12, 10, status);
- }
- MeasureUnit *MeasureUnit::createMile(UErrorCode &status) {
- return MeasureUnit::create(12, 11, status);
- }
- MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) {
- return MeasureUnit::create(12, 12, status);
- }
- MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) {
- return MeasureUnit::create(12, 13, status);
- }
- MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) {
- return MeasureUnit::create(12, 14, status);
- }
- MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) {
- return MeasureUnit::create(12, 15, status);
- }
- MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) {
- return MeasureUnit::create(12, 16, status);
- }
- MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) {
- return MeasureUnit::create(12, 17, status);
- }
- MeasureUnit *MeasureUnit::createYard(UErrorCode &status) {
- return MeasureUnit::create(12, 18, status);
- }
- MeasureUnit *MeasureUnit::createLux(UErrorCode &status) {
- return MeasureUnit::create(13, 0, status);
- }
- MeasureUnit *MeasureUnit::createCarat(UErrorCode &status) {
- return MeasureUnit::create(14, 0, status);
- }
- MeasureUnit *MeasureUnit::createGram(UErrorCode &status) {
- return MeasureUnit::create(14, 1, status);
- }
- MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) {
- return MeasureUnit::create(14, 2, status);
- }
- MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) {
- return MeasureUnit::create(14, 3, status);
- }
- MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) {
- return MeasureUnit::create(14, 4, status);
- }
- MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) {
- return MeasureUnit::create(14, 5, status);
- }
- MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) {
- return MeasureUnit::create(14, 6, status);
- }
- MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) {
- return MeasureUnit::create(14, 7, status);
- }
- MeasureUnit *MeasureUnit::createPound(UErrorCode &status) {
- return MeasureUnit::create(14, 8, status);
- }
- MeasureUnit *MeasureUnit::createStone(UErrorCode &status) {
- return MeasureUnit::create(14, 9, status);
- }
- MeasureUnit *MeasureUnit::createTon(UErrorCode &status) {
- return MeasureUnit::create(14, 10, status);
- }
- MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) {
- return MeasureUnit::create(15, 0, status);
- }
- MeasureUnit *MeasureUnit::createHorsepower(UErrorCode &status) {
- return MeasureUnit::create(15, 1, status);
- }
- MeasureUnit *MeasureUnit::createKilowatt(UErrorCode &status) {
- return MeasureUnit::create(15, 2, status);
- }
- MeasureUnit *MeasureUnit::createMegawatt(UErrorCode &status) {
- return MeasureUnit::create(15, 3, status);
- }
- MeasureUnit *MeasureUnit::createMilliwatt(UErrorCode &status) {
- return MeasureUnit::create(15, 4, status);
- }
- MeasureUnit *MeasureUnit::createWatt(UErrorCode &status) {
- return MeasureUnit::create(15, 5, status);
- }
- MeasureUnit *MeasureUnit::createHectopascal(UErrorCode &status) {
- return MeasureUnit::create(16, 0, status);
- }
- MeasureUnit *MeasureUnit::createInchHg(UErrorCode &status) {
- return MeasureUnit::create(16, 1, status);
- }
- MeasureUnit *MeasureUnit::createMillibar(UErrorCode &status) {
- return MeasureUnit::create(16, 2, status);
- }
- MeasureUnit *MeasureUnit::createMillimeterOfMercury(UErrorCode &status) {
- return MeasureUnit::create(16, 3, status);
- }
- MeasureUnit *MeasureUnit::createPoundPerSquareInch(UErrorCode &status) {
- return MeasureUnit::create(16, 4, status);
- }
- MeasureUnit *MeasureUnit::createKilometerPerHour(UErrorCode &status) {
- return MeasureUnit::create(17, 0, status);
- }
- MeasureUnit *MeasureUnit::createKnot(UErrorCode &status) {
- return MeasureUnit::create(17, 1, status);
- }
- MeasureUnit *MeasureUnit::createMeterPerSecond(UErrorCode &status) {
- return MeasureUnit::create(17, 2, status);
- }
- MeasureUnit *MeasureUnit::createMilePerHour(UErrorCode &status) {
- return MeasureUnit::create(17, 3, status);
- }
- MeasureUnit *MeasureUnit::createCelsius(UErrorCode &status) {
- return MeasureUnit::create(18, 0, status);
- }
- MeasureUnit *MeasureUnit::createFahrenheit(UErrorCode &status) {
- return MeasureUnit::create(18, 1, status);
- }
- MeasureUnit *MeasureUnit::createGenericTemperature(UErrorCode &status) {
- return MeasureUnit::create(18, 2, status);
- }
- MeasureUnit *MeasureUnit::createKelvin(UErrorCode &status) {
- return MeasureUnit::create(18, 3, status);
- }
- MeasureUnit *MeasureUnit::createAcreFoot(UErrorCode &status) {
- return MeasureUnit::create(19, 0, status);
- }
- MeasureUnit *MeasureUnit::createBushel(UErrorCode &status) {
- return MeasureUnit::create(19, 1, status);
- }
- MeasureUnit *MeasureUnit::createCentiliter(UErrorCode &status) {
- return MeasureUnit::create(19, 2, status);
- }
- MeasureUnit *MeasureUnit::createCubicCentimeter(UErrorCode &status) {
- return MeasureUnit::create(19, 3, status);
- }
- MeasureUnit *MeasureUnit::createCubicFoot(UErrorCode &status) {
- return MeasureUnit::create(19, 4, status);
- }
- MeasureUnit *MeasureUnit::createCubicInch(UErrorCode &status) {
- return MeasureUnit::create(19, 5, status);
- }
- MeasureUnit *MeasureUnit::createCubicKilometer(UErrorCode &status) {
- return MeasureUnit::create(19, 6, status);
- }
- MeasureUnit *MeasureUnit::createCubicMeter(UErrorCode &status) {
- return MeasureUnit::create(19, 7, status);
- }
- MeasureUnit *MeasureUnit::createCubicMile(UErrorCode &status) {
- return MeasureUnit::create(19, 8, status);
- }
- MeasureUnit *MeasureUnit::createCubicYard(UErrorCode &status) {
- return MeasureUnit::create(19, 9, status);
- }
- MeasureUnit *MeasureUnit::createCup(UErrorCode &status) {
- return MeasureUnit::create(19, 10, status);
- }
- MeasureUnit *MeasureUnit::createCupMetric(UErrorCode &status) {
- return MeasureUnit::create(19, 11, status);
- }
- MeasureUnit *MeasureUnit::createDeciliter(UErrorCode &status) {
- return MeasureUnit::create(19, 12, status);
- }
- MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) {
- return MeasureUnit::create(19, 13, status);
- }
- MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) {
- return MeasureUnit::create(19, 14, status);
- }
- MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) {
- return MeasureUnit::create(19, 15, status);
- }
- MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) {
- return MeasureUnit::create(19, 16, status);
- }
- MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) {
- return MeasureUnit::create(19, 17, status);
- }
- MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) {
- return MeasureUnit::create(19, 18, status);
- }
- MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) {
- return MeasureUnit::create(19, 19, status);
- }
- MeasureUnit *MeasureUnit::createPint(UErrorCode &status) {
- return MeasureUnit::create(19, 20, status);
- }
- MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) {
- return MeasureUnit::create(19, 21, status);
- }
- MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) {
- return MeasureUnit::create(19, 22, status);
- }
- MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) {
- return MeasureUnit::create(19, 23, status);
- }
- MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) {
- return MeasureUnit::create(19, 24, status);
- }
- // End generated code
- static int32_t binarySearch(
- const char * const * array, int32_t start, int32_t end, const char * key) {
- while (start < end) {
- int32_t mid = (start + end) / 2;
- int32_t cmp = uprv_strcmp(array[mid], key);
- if (cmp < 0) {
- start = mid + 1;
- continue;
- }
- if (cmp == 0) {
- return mid;
- }
- end = mid;
- }
- return -1;
- }
-
- MeasureUnit::MeasureUnit(const MeasureUnit &other)
- : fTypeId(other.fTypeId), fSubTypeId(other.fSubTypeId) {
- uprv_strcpy(fCurrency, other.fCurrency);
- }
- MeasureUnit &MeasureUnit::operator=(const MeasureUnit &other) {
- if (this == &other) {
- return *this;
- }
- fTypeId = other.fTypeId;
- fSubTypeId = other.fSubTypeId;
- uprv_strcpy(fCurrency, other.fCurrency);
- return *this;
- }
- UObject *MeasureUnit::clone() const {
- return new MeasureUnit(*this);
- }
- MeasureUnit::~MeasureUnit() {
- }
- const char *MeasureUnit::getType() const {
- return gTypes[fTypeId];
- }
- const char *MeasureUnit::getSubtype() const {
- return fCurrency[0] == 0 ? gSubTypes[getOffset()] : fCurrency;
- }
- UBool MeasureUnit::operator==(const UObject& other) const {
- if (this == &other) { // Same object, equal
- return TRUE;
- }
- if (typeid(*this) != typeid(other)) { // Different types, not equal
- return FALSE;
- }
- const MeasureUnit &rhs = static_cast<const MeasureUnit&>(other);
- return (
- fTypeId == rhs.fTypeId
- && fSubTypeId == rhs.fSubTypeId
- && uprv_strcmp(fCurrency, rhs.fCurrency) == 0);
- }
- int32_t MeasureUnit::getIndex() const {
- return gIndexes[fTypeId] + fSubTypeId;
- }
- int32_t MeasureUnit::getAvailable(
- MeasureUnit *dest,
- int32_t destCapacity,
- UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) {
- return 0;
- }
- if (destCapacity < UPRV_LENGTHOF(gSubTypes)) {
- errorCode = U_BUFFER_OVERFLOW_ERROR;
- return UPRV_LENGTHOF(gSubTypes);
- }
- int32_t idx = 0;
- for (int32_t typeIdx = 0; typeIdx < UPRV_LENGTHOF(gTypes); ++typeIdx) {
- int32_t len = gOffsets[typeIdx + 1] - gOffsets[typeIdx];
- for (int32_t subTypeIdx = 0; subTypeIdx < len; ++subTypeIdx) {
- dest[idx].setTo(typeIdx, subTypeIdx);
- ++idx;
- }
- }
- U_ASSERT(idx == UPRV_LENGTHOF(gSubTypes));
- return UPRV_LENGTHOF(gSubTypes);
- }
- int32_t MeasureUnit::getAvailable(
- const char *type,
- MeasureUnit *dest,
- int32_t destCapacity,
- UErrorCode &errorCode) {
- if (U_FAILURE(errorCode)) {
- return 0;
- }
- int32_t typeIdx = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
- if (typeIdx == -1) {
- return 0;
- }
- int32_t len = gOffsets[typeIdx + 1] - gOffsets[typeIdx];
- if (destCapacity < len) {
- errorCode = U_BUFFER_OVERFLOW_ERROR;
- return len;
- }
- for (int subTypeIdx = 0; subTypeIdx < len; ++subTypeIdx) {
- dest[subTypeIdx].setTo(typeIdx, subTypeIdx);
- }
- return len;
- }
- StringEnumeration* MeasureUnit::getAvailableTypes(UErrorCode &errorCode) {
- UEnumeration *uenum = uenum_openCharStringsEnumeration(
- gTypes, UPRV_LENGTHOF(gTypes), &errorCode);
- if (U_FAILURE(errorCode)) {
- uenum_close(uenum);
- return NULL;
- }
- StringEnumeration *result = new UStringEnumeration(uenum);
- if (result == NULL) {
- errorCode = U_MEMORY_ALLOCATION_ERROR;
- uenum_close(uenum);
- return NULL;
- }
- return result;
- }
- int32_t MeasureUnit::getIndexCount() {
- return gIndexes[UPRV_LENGTHOF(gIndexes) - 1];
- }
- int32_t MeasureUnit::internalGetIndexForTypeAndSubtype(const char *type, const char *subtype) {
- int32_t t = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
- if (t < 0) {
- return t;
- }
- int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subtype);
- if (st < 0) {
- return st;
- }
- return gIndexes[t] + st - gOffsets[t];
- }
- MeasureUnit *MeasureUnit::resolveUnitPerUnit(
- const MeasureUnit &unit, const MeasureUnit &perUnit) {
- int32_t unitOffset = unit.getOffset();
- int32_t perUnitOffset = perUnit.getOffset();
- // binary search for (unitOffset, perUnitOffset)
- int32_t start = 0;
- int32_t end = UPRV_LENGTHOF(unitPerUnitToSingleUnit);
- while (start < end) {
- int32_t mid = (start + end) / 2;
- int32_t *midRow = unitPerUnitToSingleUnit[mid];
- if (unitOffset < midRow[0]) {
- end = mid;
- } else if (unitOffset > midRow[0]) {
- start = mid + 1;
- } else if (perUnitOffset < midRow[1]) {
- end = mid;
- } else if (perUnitOffset > midRow[1]) {
- start = mid + 1;
- } else {
- // We found a resolution for our unit / per-unit combo
- // return it.
- return new MeasureUnit(midRow[2], midRow[3]);
- }
- }
- return NULL;
- }
- MeasureUnit *MeasureUnit::create(int typeId, int subTypeId, UErrorCode &status) {
- if (U_FAILURE(status)) {
- return NULL;
- }
- MeasureUnit *result = new MeasureUnit(typeId, subTypeId);
- if (result == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
- }
- return result;
- }
- void MeasureUnit::initTime(const char *timeId) {
- int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "duration");
- U_ASSERT(result != -1);
- fTypeId = result;
- result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], timeId);
- U_ASSERT(result != -1);
- fSubTypeId = result - gOffsets[fTypeId];
- }
- void MeasureUnit::initCurrency(const char *isoCurrency) {
- int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "currency");
- U_ASSERT(result != -1);
- fTypeId = result;
- result = binarySearch(
- gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], isoCurrency);
- if (result != -1) {
- fSubTypeId = result - gOffsets[fTypeId];
- } else {
- uprv_strncpy(fCurrency, isoCurrency, UPRV_LENGTHOF(fCurrency));
- fCurrency[3] = 0;
- }
- }
- void MeasureUnit::setTo(int32_t typeId, int32_t subTypeId) {
- fTypeId = typeId;
- fSubTypeId = subTypeId;
- fCurrency[0] = 0;
- }
- int32_t MeasureUnit::getOffset() const {
- return gOffsets[fTypeId] + fSubTypeId;
- }
- U_NAMESPACE_END
- #endif /* !UNCONFIG_NO_FORMATTING */
|