LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - measunit.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 410 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 158 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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 "ustrenum.h"
      21             : #include "cstring.h"
      22             : #include "uassert.h"
      23             : 
      24             : U_NAMESPACE_BEGIN
      25             : 
      26           0 : UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit)
      27             : 
      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
      33             : //
      34             : // Start generated code
      35             : 
      36             : static const int32_t gOffsets[] = {
      37             :     0,
      38             :     2,
      39             :     7,
      40             :     16,
      41             :     20,
      42             :     24,
      43             :     285,
      44             :     295,
      45             :     306,
      46             :     310,
      47             :     316,
      48             :     320,
      49             :     340,
      50             :     341,
      51             :     352,
      52             :     358,
      53             :     363,
      54             :     367,
      55             :     371,
      56             :     396
      57             : };
      58             : 
      59             : static const int32_t gIndexes[] = {
      60             :     0,
      61             :     2,
      62             :     7,
      63             :     16,
      64             :     20,
      65             :     24,
      66             :     24,
      67             :     34,
      68             :     45,
      69             :     49,
      70             :     55,
      71             :     59,
      72             :     79,
      73             :     80,
      74             :     91,
      75             :     97,
      76             :     102,
      77             :     106,
      78             :     110,
      79             :     135
      80             : };
      81             : 
      82             : // Must be sorted alphabetically.
      83             : static const char * const gTypes[] = {
      84             :     "acceleration",
      85             :     "angle",
      86             :     "area",
      87             :     "concentr",
      88             :     "consumption",
      89             :     "currency",
      90             :     "digital",
      91             :     "duration",
      92             :     "electric",
      93             :     "energy",
      94             :     "frequency",
      95             :     "length",
      96             :     "light",
      97             :     "mass",
      98             :     "power",
      99             :     "pressure",
     100             :     "speed",
     101             :     "temperature",
     102             :     "volume"
     103             : };
     104             : 
     105             : // Must be grouped by type and sorted alphabetically within each type.
     106             : static const char * const gSubTypes[] = {
     107             :     "g-force",
     108             :     "meter-per-second-squared",
     109             :     "arc-minute",
     110             :     "arc-second",
     111             :     "degree",
     112             :     "radian",
     113             :     "revolution",
     114             :     "acre",
     115             :     "hectare",
     116             :     "square-centimeter",
     117             :     "square-foot",
     118             :     "square-inch",
     119             :     "square-kilometer",
     120             :     "square-meter",
     121             :     "square-mile",
     122             :     "square-yard",
     123             :     "karat",
     124             :     "milligram-per-deciliter",
     125             :     "millimole-per-liter",
     126             :     "part-per-million",
     127             :     "liter-per-100kilometers",
     128             :     "liter-per-kilometer",
     129             :     "mile-per-gallon",
     130             :     "mile-per-gallon-imperial",
     131             :     "ADP",
     132             :     "AED",
     133             :     "AFA",
     134             :     "AFN",
     135             :     "ALL",
     136             :     "AMD",
     137             :     "ANG",
     138             :     "AOA",
     139             :     "AON",
     140             :     "AOR",
     141             :     "ARA",
     142             :     "ARP",
     143             :     "ARS",
     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             :     "BGL",
     158             :     "BGN",
     159             :     "BHD",
     160             :     "BIF",
     161             :     "BMD",
     162             :     "BND",
     163             :     "BOB",
     164             :     "BOV",
     165             :     "BRC",
     166             :     "BRE",
     167             :     "BRL",
     168             :     "BRN",
     169             :     "BRR",
     170             :     "BSD",
     171             :     "BTN",
     172             :     "BWP",
     173             :     "BYB",
     174             :     "BYN",
     175             :     "BYR",
     176             :     "BZD",
     177             :     "CAD",
     178             :     "CDF",
     179             :     "CHC",
     180             :     "CHE",
     181             :     "CHF",
     182             :     "CHW",
     183             :     "CLF",
     184             :     "CLP",
     185             :     "CNY",
     186             :     "COP",
     187             :     "COU",
     188             :     "CRC",
     189             :     "CSD",
     190             :     "CSK",
     191             :     "CUC",
     192             :     "CUP",
     193             :     "CVE",
     194             :     "CYP",
     195             :     "CZK",
     196             :     "DDM",
     197             :     "DEM",
     198             :     "DJF",
     199             :     "DKK",
     200             :     "DOP",
     201             :     "DZD",
     202             :     "ECS",
     203             :     "ECV",
     204             :     "EEK",
     205             :     "EGP",
     206             :     "ERN",
     207             :     "ESA",
     208             :     "ESB",
     209             :     "ESP",
     210             :     "ETB",
     211             :     "EUR",
     212             :     "FIM",
     213             :     "FJD",
     214             :     "FKP",
     215             :     "FRF",
     216             :     "GBP",
     217             :     "GEK",
     218             :     "GEL",
     219             :     "GHC",
     220             :     "GHP",
     221             :     "GHS",
     222             :     "GIP",
     223             :     "GMD",
     224             :     "GNF",
     225             :     "GQE",
     226             :     "GRD",
     227             :     "GTQ",
     228             :     "GWP",
     229             :     "GYD",
     230             :     "HKD",
     231             :     "HNL",
     232             :     "HRD",
     233             :     "HRK",
     234             :     "HTG",
     235             :     "HUF",
     236             :     "IDR",
     237             :     "IEP",
     238             :     "ILS",
     239             :     "INR",
     240             :     "IQD",
     241             :     "IRR",
     242             :     "ISK",
     243             :     "ITL",
     244             :     "JMD",
     245             :     "JOD",
     246             :     "JPY",
     247             :     "KES",
     248             :     "KGS",
     249             :     "KHR",
     250             :     "KMF",
     251             :     "KPW",
     252             :     "KRW",
     253             :     "KWD",
     254             :     "KYD",
     255             :     "KZT",
     256             :     "LAK",
     257             :     "LBP",
     258             :     "LKR",
     259             :     "LRD",
     260             :     "LSL",
     261             :     "LTL",
     262             :     "LTT",
     263             :     "LUC",
     264             :     "LUF",
     265             :     "LUL",
     266             :     "LVL",
     267             :     "LVR",
     268             :     "LYD",
     269             :     "MAD",
     270             :     "MDL",
     271             :     "MGA",
     272             :     "MGF",
     273             :     "MKD",
     274             :     "MLF",
     275             :     "MMK",
     276             :     "MNT",
     277             :     "MOP",
     278             :     "MRO",
     279             :     "MTL",
     280             :     "MUR",
     281             :     "MVR",
     282             :     "MWK",
     283             :     "MXN",
     284             :     "MXV",
     285             :     "MYR",
     286             :     "MZM",
     287             :     "MZN",
     288             :     "NAD",
     289             :     "NGN",
     290             :     "NIO",
     291             :     "NLG",
     292             :     "NOK",
     293             :     "NPR",
     294             :     "NZD",
     295             :     "OMR",
     296             :     "PAB",
     297             :     "PEI",
     298             :     "PEN",
     299             :     "PES",
     300             :     "PGK",
     301             :     "PHP",
     302             :     "PKR",
     303             :     "PLN",
     304             :     "PLZ",
     305             :     "PTE",
     306             :     "PYG",
     307             :     "QAR",
     308             :     "ROL",
     309             :     "RON",
     310             :     "RSD",
     311             :     "RUB",
     312             :     "RUR",
     313             :     "RWF",
     314             :     "SAR",
     315             :     "SBD",
     316             :     "SCR",
     317             :     "SDD",
     318             :     "SDG",
     319             :     "SEK",
     320             :     "SGD",
     321             :     "SHP",
     322             :     "SIT",
     323             :     "SKK",
     324             :     "SLL",
     325             :     "SOS",
     326             :     "SRD",
     327             :     "SRG",
     328             :     "SSP",
     329             :     "STD",
     330             :     "SVC",
     331             :     "SYP",
     332             :     "SZL",
     333             :     "THB",
     334             :     "TJR",
     335             :     "TJS",
     336             :     "TMM",
     337             :     "TMT",
     338             :     "TND",
     339             :     "TOP",
     340             :     "TPE",
     341             :     "TRL",
     342             :     "TRY",
     343             :     "TTD",
     344             :     "TWD",
     345             :     "TZS",
     346             :     "UAH",
     347             :     "UAK",
     348             :     "UGX",
     349             :     "USD",
     350             :     "USN",
     351             :     "USS",
     352             :     "UYI",
     353             :     "UYU",
     354             :     "UZS",
     355             :     "VEB",
     356             :     "VEF",
     357             :     "VND",
     358             :     "VUV",
     359             :     "WST",
     360             :     "XAF",
     361             :     "XAG",
     362             :     "XAU",
     363             :     "XBA",
     364             :     "XBB",
     365             :     "XBC",
     366             :     "XBD",
     367             :     "XCD",
     368             :     "XDR",
     369             :     "XEU",
     370             :     "XOF",
     371             :     "XPD",
     372             :     "XPF",
     373             :     "XPT",
     374             :     "XSU",
     375             :     "XTS",
     376             :     "XUA",
     377             :     "XXX",
     378             :     "YDD",
     379             :     "YER",
     380             :     "YUM",
     381             :     "YUN",
     382             :     "ZAL",
     383             :     "ZAR",
     384             :     "ZMK",
     385             :     "ZMW",
     386             :     "ZRN",
     387             :     "ZRZ",
     388             :     "ZWD",
     389             :     "ZWL",
     390             :     "ZWN",
     391             :     "ZWR",
     392             :     "bit",
     393             :     "byte",
     394             :     "gigabit",
     395             :     "gigabyte",
     396             :     "kilobit",
     397             :     "kilobyte",
     398             :     "megabit",
     399             :     "megabyte",
     400             :     "terabit",
     401             :     "terabyte",
     402             :     "century",
     403             :     "day",
     404             :     "hour",
     405             :     "microsecond",
     406             :     "millisecond",
     407             :     "minute",
     408             :     "month",
     409             :     "nanosecond",
     410             :     "second",
     411             :     "week",
     412             :     "year",
     413             :     "ampere",
     414             :     "milliampere",
     415             :     "ohm",
     416             :     "volt",
     417             :     "calorie",
     418             :     "foodcalorie",
     419             :     "joule",
     420             :     "kilocalorie",
     421             :     "kilojoule",
     422             :     "kilowatt-hour",
     423             :     "gigahertz",
     424             :     "hertz",
     425             :     "kilohertz",
     426             :     "megahertz",
     427             :     "astronomical-unit",
     428             :     "centimeter",
     429             :     "decimeter",
     430             :     "fathom",
     431             :     "foot",
     432             :     "furlong",
     433             :     "inch",
     434             :     "kilometer",
     435             :     "light-year",
     436             :     "meter",
     437             :     "micrometer",
     438             :     "mile",
     439             :     "mile-scandinavian",
     440             :     "millimeter",
     441             :     "nanometer",
     442             :     "nautical-mile",
     443             :     "parsec",
     444             :     "picometer",
     445             :     "point",
     446             :     "yard",
     447             :     "lux",
     448             :     "carat",
     449             :     "gram",
     450             :     "kilogram",
     451             :     "metric-ton",
     452             :     "microgram",
     453             :     "milligram",
     454             :     "ounce",
     455             :     "ounce-troy",
     456             :     "pound",
     457             :     "stone",
     458             :     "ton",
     459             :     "gigawatt",
     460             :     "horsepower",
     461             :     "kilowatt",
     462             :     "megawatt",
     463             :     "milliwatt",
     464             :     "watt",
     465             :     "hectopascal",
     466             :     "inch-hg",
     467             :     "millibar",
     468             :     "millimeter-of-mercury",
     469             :     "pound-per-square-inch",
     470             :     "kilometer-per-hour",
     471             :     "knot",
     472             :     "meter-per-second",
     473             :     "mile-per-hour",
     474             :     "celsius",
     475             :     "fahrenheit",
     476             :     "generic",
     477             :     "kelvin",
     478             :     "acre-foot",
     479             :     "bushel",
     480             :     "centiliter",
     481             :     "cubic-centimeter",
     482             :     "cubic-foot",
     483             :     "cubic-inch",
     484             :     "cubic-kilometer",
     485             :     "cubic-meter",
     486             :     "cubic-mile",
     487             :     "cubic-yard",
     488             :     "cup",
     489             :     "cup-metric",
     490             :     "deciliter",
     491             :     "fluid-ounce",
     492             :     "gallon",
     493             :     "gallon-imperial",
     494             :     "hectoliter",
     495             :     "liter",
     496             :     "megaliter",
     497             :     "milliliter",
     498             :     "pint",
     499             :     "pint-metric",
     500             :     "quart",
     501             :     "tablespoon",
     502             :     "teaspoon"
     503             : };
     504             : 
     505             : // Must be sorted by first value and then second value.
     506             : static int32_t unitPerUnitToSingleUnit[][4] = {
     507             :         {327, 297, 16, 0},
     508             :         {329, 303, 16, 2},
     509             :         {331, 297, 16, 3},
     510             :         {331, 385, 4, 2},
     511             :         {331, 386, 4, 3},
     512             :         {346, 383, 3, 1},
     513             :         {349, 11, 15, 4},
     514             :         {388, 327, 4, 1}
     515             : };
     516             : 
     517           0 : MeasureUnit *MeasureUnit::createGForce(UErrorCode &status) {
     518           0 :     return MeasureUnit::create(0, 0, status);
     519             : }
     520             : 
     521           0 : MeasureUnit *MeasureUnit::createMeterPerSecondSquared(UErrorCode &status) {
     522           0 :     return MeasureUnit::create(0, 1, status);
     523             : }
     524             : 
     525           0 : MeasureUnit *MeasureUnit::createArcMinute(UErrorCode &status) {
     526           0 :     return MeasureUnit::create(1, 0, status);
     527             : }
     528             : 
     529           0 : MeasureUnit *MeasureUnit::createArcSecond(UErrorCode &status) {
     530           0 :     return MeasureUnit::create(1, 1, status);
     531             : }
     532             : 
     533           0 : MeasureUnit *MeasureUnit::createDegree(UErrorCode &status) {
     534           0 :     return MeasureUnit::create(1, 2, status);
     535             : }
     536             : 
     537           0 : MeasureUnit *MeasureUnit::createRadian(UErrorCode &status) {
     538           0 :     return MeasureUnit::create(1, 3, status);
     539             : }
     540             : 
     541           0 : MeasureUnit *MeasureUnit::createRevolutionAngle(UErrorCode &status) {
     542           0 :     return MeasureUnit::create(1, 4, status);
     543             : }
     544             : 
     545           0 : MeasureUnit *MeasureUnit::createAcre(UErrorCode &status) {
     546           0 :     return MeasureUnit::create(2, 0, status);
     547             : }
     548             : 
     549           0 : MeasureUnit *MeasureUnit::createHectare(UErrorCode &status) {
     550           0 :     return MeasureUnit::create(2, 1, status);
     551             : }
     552             : 
     553           0 : MeasureUnit *MeasureUnit::createSquareCentimeter(UErrorCode &status) {
     554           0 :     return MeasureUnit::create(2, 2, status);
     555             : }
     556             : 
     557           0 : MeasureUnit *MeasureUnit::createSquareFoot(UErrorCode &status) {
     558           0 :     return MeasureUnit::create(2, 3, status);
     559             : }
     560             : 
     561           0 : MeasureUnit *MeasureUnit::createSquareInch(UErrorCode &status) {
     562           0 :     return MeasureUnit::create(2, 4, status);
     563             : }
     564             : 
     565           0 : MeasureUnit *MeasureUnit::createSquareKilometer(UErrorCode &status) {
     566           0 :     return MeasureUnit::create(2, 5, status);
     567             : }
     568             : 
     569           0 : MeasureUnit *MeasureUnit::createSquareMeter(UErrorCode &status) {
     570           0 :     return MeasureUnit::create(2, 6, status);
     571             : }
     572             : 
     573           0 : MeasureUnit *MeasureUnit::createSquareMile(UErrorCode &status) {
     574           0 :     return MeasureUnit::create(2, 7, status);
     575             : }
     576             : 
     577           0 : MeasureUnit *MeasureUnit::createSquareYard(UErrorCode &status) {
     578           0 :     return MeasureUnit::create(2, 8, status);
     579             : }
     580             : 
     581           0 : MeasureUnit *MeasureUnit::createKarat(UErrorCode &status) {
     582           0 :     return MeasureUnit::create(3, 0, status);
     583             : }
     584             : 
     585           0 : MeasureUnit *MeasureUnit::createMilligramPerDeciliter(UErrorCode &status) {
     586           0 :     return MeasureUnit::create(3, 1, status);
     587             : }
     588             : 
     589           0 : MeasureUnit *MeasureUnit::createMillimolePerLiter(UErrorCode &status) {
     590           0 :     return MeasureUnit::create(3, 2, status);
     591             : }
     592             : 
     593           0 : MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
     594           0 :     return MeasureUnit::create(3, 3, status);
     595             : }
     596             : 
     597           0 : MeasureUnit *MeasureUnit::createLiterPer100Kilometers(UErrorCode &status) {
     598           0 :     return MeasureUnit::create(4, 0, status);
     599             : }
     600             : 
     601           0 : MeasureUnit *MeasureUnit::createLiterPerKilometer(UErrorCode &status) {
     602           0 :     return MeasureUnit::create(4, 1, status);
     603             : }
     604             : 
     605           0 : MeasureUnit *MeasureUnit::createMilePerGallon(UErrorCode &status) {
     606           0 :     return MeasureUnit::create(4, 2, status);
     607             : }
     608             : 
     609           0 : MeasureUnit *MeasureUnit::createMilePerGallonImperial(UErrorCode &status) {
     610           0 :     return MeasureUnit::create(4, 3, status);
     611             : }
     612             : 
     613             : // MeasureUnit *MeasureUnit::createEast(UErrorCode &status) {...}
     614             : 
     615             : // MeasureUnit *MeasureUnit::createNorth(UErrorCode &status) {...}
     616             : 
     617             : // MeasureUnit *MeasureUnit::createSouth(UErrorCode &status) {...}
     618             : 
     619             : // MeasureUnit *MeasureUnit::createWest(UErrorCode &status) {...}
     620             : 
     621           0 : MeasureUnit *MeasureUnit::createBit(UErrorCode &status) {
     622           0 :     return MeasureUnit::create(6, 0, status);
     623             : }
     624             : 
     625           0 : MeasureUnit *MeasureUnit::createByte(UErrorCode &status) {
     626           0 :     return MeasureUnit::create(6, 1, status);
     627             : }
     628             : 
     629           0 : MeasureUnit *MeasureUnit::createGigabit(UErrorCode &status) {
     630           0 :     return MeasureUnit::create(6, 2, status);
     631             : }
     632             : 
     633           0 : MeasureUnit *MeasureUnit::createGigabyte(UErrorCode &status) {
     634           0 :     return MeasureUnit::create(6, 3, status);
     635             : }
     636             : 
     637           0 : MeasureUnit *MeasureUnit::createKilobit(UErrorCode &status) {
     638           0 :     return MeasureUnit::create(6, 4, status);
     639             : }
     640             : 
     641           0 : MeasureUnit *MeasureUnit::createKilobyte(UErrorCode &status) {
     642           0 :     return MeasureUnit::create(6, 5, status);
     643             : }
     644             : 
     645           0 : MeasureUnit *MeasureUnit::createMegabit(UErrorCode &status) {
     646           0 :     return MeasureUnit::create(6, 6, status);
     647             : }
     648             : 
     649           0 : MeasureUnit *MeasureUnit::createMegabyte(UErrorCode &status) {
     650           0 :     return MeasureUnit::create(6, 7, status);
     651             : }
     652             : 
     653           0 : MeasureUnit *MeasureUnit::createTerabit(UErrorCode &status) {
     654           0 :     return MeasureUnit::create(6, 8, status);
     655             : }
     656             : 
     657           0 : MeasureUnit *MeasureUnit::createTerabyte(UErrorCode &status) {
     658           0 :     return MeasureUnit::create(6, 9, status);
     659             : }
     660             : 
     661           0 : MeasureUnit *MeasureUnit::createCentury(UErrorCode &status) {
     662           0 :     return MeasureUnit::create(7, 0, status);
     663             : }
     664             : 
     665           0 : MeasureUnit *MeasureUnit::createDay(UErrorCode &status) {
     666           0 :     return MeasureUnit::create(7, 1, status);
     667             : }
     668             : 
     669           0 : MeasureUnit *MeasureUnit::createHour(UErrorCode &status) {
     670           0 :     return MeasureUnit::create(7, 2, status);
     671             : }
     672             : 
     673           0 : MeasureUnit *MeasureUnit::createMicrosecond(UErrorCode &status) {
     674           0 :     return MeasureUnit::create(7, 3, status);
     675             : }
     676             : 
     677           0 : MeasureUnit *MeasureUnit::createMillisecond(UErrorCode &status) {
     678           0 :     return MeasureUnit::create(7, 4, status);
     679             : }
     680             : 
     681           0 : MeasureUnit *MeasureUnit::createMinute(UErrorCode &status) {
     682           0 :     return MeasureUnit::create(7, 5, status);
     683             : }
     684             : 
     685           0 : MeasureUnit *MeasureUnit::createMonth(UErrorCode &status) {
     686           0 :     return MeasureUnit::create(7, 6, status);
     687             : }
     688             : 
     689           0 : MeasureUnit *MeasureUnit::createNanosecond(UErrorCode &status) {
     690           0 :     return MeasureUnit::create(7, 7, status);
     691             : }
     692             : 
     693           0 : MeasureUnit *MeasureUnit::createSecond(UErrorCode &status) {
     694           0 :     return MeasureUnit::create(7, 8, status);
     695             : }
     696             : 
     697           0 : MeasureUnit *MeasureUnit::createWeek(UErrorCode &status) {
     698           0 :     return MeasureUnit::create(7, 9, status);
     699             : }
     700             : 
     701           0 : MeasureUnit *MeasureUnit::createYear(UErrorCode &status) {
     702           0 :     return MeasureUnit::create(7, 10, status);
     703             : }
     704             : 
     705           0 : MeasureUnit *MeasureUnit::createAmpere(UErrorCode &status) {
     706           0 :     return MeasureUnit::create(8, 0, status);
     707             : }
     708             : 
     709           0 : MeasureUnit *MeasureUnit::createMilliampere(UErrorCode &status) {
     710           0 :     return MeasureUnit::create(8, 1, status);
     711             : }
     712             : 
     713           0 : MeasureUnit *MeasureUnit::createOhm(UErrorCode &status) {
     714           0 :     return MeasureUnit::create(8, 2, status);
     715             : }
     716             : 
     717           0 : MeasureUnit *MeasureUnit::createVolt(UErrorCode &status) {
     718           0 :     return MeasureUnit::create(8, 3, status);
     719             : }
     720             : 
     721           0 : MeasureUnit *MeasureUnit::createCalorie(UErrorCode &status) {
     722           0 :     return MeasureUnit::create(9, 0, status);
     723             : }
     724             : 
     725           0 : MeasureUnit *MeasureUnit::createFoodcalorie(UErrorCode &status) {
     726           0 :     return MeasureUnit::create(9, 1, status);
     727             : }
     728             : 
     729           0 : MeasureUnit *MeasureUnit::createJoule(UErrorCode &status) {
     730           0 :     return MeasureUnit::create(9, 2, status);
     731             : }
     732             : 
     733           0 : MeasureUnit *MeasureUnit::createKilocalorie(UErrorCode &status) {
     734           0 :     return MeasureUnit::create(9, 3, status);
     735             : }
     736             : 
     737           0 : MeasureUnit *MeasureUnit::createKilojoule(UErrorCode &status) {
     738           0 :     return MeasureUnit::create(9, 4, status);
     739             : }
     740             : 
     741           0 : MeasureUnit *MeasureUnit::createKilowattHour(UErrorCode &status) {
     742           0 :     return MeasureUnit::create(9, 5, status);
     743             : }
     744             : 
     745           0 : MeasureUnit *MeasureUnit::createGigahertz(UErrorCode &status) {
     746           0 :     return MeasureUnit::create(10, 0, status);
     747             : }
     748             : 
     749           0 : MeasureUnit *MeasureUnit::createHertz(UErrorCode &status) {
     750           0 :     return MeasureUnit::create(10, 1, status);
     751             : }
     752             : 
     753           0 : MeasureUnit *MeasureUnit::createKilohertz(UErrorCode &status) {
     754           0 :     return MeasureUnit::create(10, 2, status);
     755             : }
     756             : 
     757           0 : MeasureUnit *MeasureUnit::createMegahertz(UErrorCode &status) {
     758           0 :     return MeasureUnit::create(10, 3, status);
     759             : }
     760             : 
     761           0 : MeasureUnit *MeasureUnit::createAstronomicalUnit(UErrorCode &status) {
     762           0 :     return MeasureUnit::create(11, 0, status);
     763             : }
     764             : 
     765           0 : MeasureUnit *MeasureUnit::createCentimeter(UErrorCode &status) {
     766           0 :     return MeasureUnit::create(11, 1, status);
     767             : }
     768             : 
     769           0 : MeasureUnit *MeasureUnit::createDecimeter(UErrorCode &status) {
     770           0 :     return MeasureUnit::create(11, 2, status);
     771             : }
     772             : 
     773           0 : MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) {
     774           0 :     return MeasureUnit::create(11, 3, status);
     775             : }
     776             : 
     777           0 : MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) {
     778           0 :     return MeasureUnit::create(11, 4, status);
     779             : }
     780             : 
     781           0 : MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) {
     782           0 :     return MeasureUnit::create(11, 5, status);
     783             : }
     784             : 
     785           0 : MeasureUnit *MeasureUnit::createInch(UErrorCode &status) {
     786           0 :     return MeasureUnit::create(11, 6, status);
     787             : }
     788             : 
     789           0 : MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) {
     790           0 :     return MeasureUnit::create(11, 7, status);
     791             : }
     792             : 
     793           0 : MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) {
     794           0 :     return MeasureUnit::create(11, 8, status);
     795             : }
     796             : 
     797           0 : MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) {
     798           0 :     return MeasureUnit::create(11, 9, status);
     799             : }
     800             : 
     801           0 : MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) {
     802           0 :     return MeasureUnit::create(11, 10, status);
     803             : }
     804             : 
     805           0 : MeasureUnit *MeasureUnit::createMile(UErrorCode &status) {
     806           0 :     return MeasureUnit::create(11, 11, status);
     807             : }
     808             : 
     809           0 : MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) {
     810           0 :     return MeasureUnit::create(11, 12, status);
     811             : }
     812             : 
     813           0 : MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) {
     814           0 :     return MeasureUnit::create(11, 13, status);
     815             : }
     816             : 
     817           0 : MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) {
     818           0 :     return MeasureUnit::create(11, 14, status);
     819             : }
     820             : 
     821           0 : MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) {
     822           0 :     return MeasureUnit::create(11, 15, status);
     823             : }
     824             : 
     825           0 : MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) {
     826           0 :     return MeasureUnit::create(11, 16, status);
     827             : }
     828             : 
     829           0 : MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) {
     830           0 :     return MeasureUnit::create(11, 17, status);
     831             : }
     832             : 
     833           0 : MeasureUnit *MeasureUnit::createPoint(UErrorCode &status) {
     834           0 :     return MeasureUnit::create(11, 18, status);
     835             : }
     836             : 
     837           0 : MeasureUnit *MeasureUnit::createYard(UErrorCode &status) {
     838           0 :     return MeasureUnit::create(11, 19, status);
     839             : }
     840             : 
     841           0 : MeasureUnit *MeasureUnit::createLux(UErrorCode &status) {
     842           0 :     return MeasureUnit::create(12, 0, status);
     843             : }
     844             : 
     845           0 : MeasureUnit *MeasureUnit::createCarat(UErrorCode &status) {
     846           0 :     return MeasureUnit::create(13, 0, status);
     847             : }
     848             : 
     849           0 : MeasureUnit *MeasureUnit::createGram(UErrorCode &status) {
     850           0 :     return MeasureUnit::create(13, 1, status);
     851             : }
     852             : 
     853           0 : MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) {
     854           0 :     return MeasureUnit::create(13, 2, status);
     855             : }
     856             : 
     857           0 : MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) {
     858           0 :     return MeasureUnit::create(13, 3, status);
     859             : }
     860             : 
     861           0 : MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) {
     862           0 :     return MeasureUnit::create(13, 4, status);
     863             : }
     864             : 
     865           0 : MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) {
     866           0 :     return MeasureUnit::create(13, 5, status);
     867             : }
     868             : 
     869           0 : MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) {
     870           0 :     return MeasureUnit::create(13, 6, status);
     871             : }
     872             : 
     873           0 : MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) {
     874           0 :     return MeasureUnit::create(13, 7, status);
     875             : }
     876             : 
     877           0 : MeasureUnit *MeasureUnit::createPound(UErrorCode &status) {
     878           0 :     return MeasureUnit::create(13, 8, status);
     879             : }
     880             : 
     881           0 : MeasureUnit *MeasureUnit::createStone(UErrorCode &status) {
     882           0 :     return MeasureUnit::create(13, 9, status);
     883             : }
     884             : 
     885           0 : MeasureUnit *MeasureUnit::createTon(UErrorCode &status) {
     886           0 :     return MeasureUnit::create(13, 10, status);
     887             : }
     888             : 
     889           0 : MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) {
     890           0 :     return MeasureUnit::create(14, 0, status);
     891             : }
     892             : 
     893           0 : MeasureUnit *MeasureUnit::createHorsepower(UErrorCode &status) {
     894           0 :     return MeasureUnit::create(14, 1, status);
     895             : }
     896             : 
     897           0 : MeasureUnit *MeasureUnit::createKilowatt(UErrorCode &status) {
     898           0 :     return MeasureUnit::create(14, 2, status);
     899             : }
     900             : 
     901           0 : MeasureUnit *MeasureUnit::createMegawatt(UErrorCode &status) {
     902           0 :     return MeasureUnit::create(14, 3, status);
     903             : }
     904             : 
     905           0 : MeasureUnit *MeasureUnit::createMilliwatt(UErrorCode &status) {
     906           0 :     return MeasureUnit::create(14, 4, status);
     907             : }
     908             : 
     909           0 : MeasureUnit *MeasureUnit::createWatt(UErrorCode &status) {
     910           0 :     return MeasureUnit::create(14, 5, status);
     911             : }
     912             : 
     913           0 : MeasureUnit *MeasureUnit::createHectopascal(UErrorCode &status) {
     914           0 :     return MeasureUnit::create(15, 0, status);
     915             : }
     916             : 
     917           0 : MeasureUnit *MeasureUnit::createInchHg(UErrorCode &status) {
     918           0 :     return MeasureUnit::create(15, 1, status);
     919             : }
     920             : 
     921           0 : MeasureUnit *MeasureUnit::createMillibar(UErrorCode &status) {
     922           0 :     return MeasureUnit::create(15, 2, status);
     923             : }
     924             : 
     925           0 : MeasureUnit *MeasureUnit::createMillimeterOfMercury(UErrorCode &status) {
     926           0 :     return MeasureUnit::create(15, 3, status);
     927             : }
     928             : 
     929           0 : MeasureUnit *MeasureUnit::createPoundPerSquareInch(UErrorCode &status) {
     930           0 :     return MeasureUnit::create(15, 4, status);
     931             : }
     932             : 
     933           0 : MeasureUnit *MeasureUnit::createKilometerPerHour(UErrorCode &status) {
     934           0 :     return MeasureUnit::create(16, 0, status);
     935             : }
     936             : 
     937           0 : MeasureUnit *MeasureUnit::createKnot(UErrorCode &status) {
     938           0 :     return MeasureUnit::create(16, 1, status);
     939             : }
     940             : 
     941           0 : MeasureUnit *MeasureUnit::createMeterPerSecond(UErrorCode &status) {
     942           0 :     return MeasureUnit::create(16, 2, status);
     943             : }
     944             : 
     945           0 : MeasureUnit *MeasureUnit::createMilePerHour(UErrorCode &status) {
     946           0 :     return MeasureUnit::create(16, 3, status);
     947             : }
     948             : 
     949           0 : MeasureUnit *MeasureUnit::createCelsius(UErrorCode &status) {
     950           0 :     return MeasureUnit::create(17, 0, status);
     951             : }
     952             : 
     953           0 : MeasureUnit *MeasureUnit::createFahrenheit(UErrorCode &status) {
     954           0 :     return MeasureUnit::create(17, 1, status);
     955             : }
     956             : 
     957           0 : MeasureUnit *MeasureUnit::createGenericTemperature(UErrorCode &status) {
     958           0 :     return MeasureUnit::create(17, 2, status);
     959             : }
     960             : 
     961           0 : MeasureUnit *MeasureUnit::createKelvin(UErrorCode &status) {
     962           0 :     return MeasureUnit::create(17, 3, status);
     963             : }
     964             : 
     965           0 : MeasureUnit *MeasureUnit::createAcreFoot(UErrorCode &status) {
     966           0 :     return MeasureUnit::create(18, 0, status);
     967             : }
     968             : 
     969           0 : MeasureUnit *MeasureUnit::createBushel(UErrorCode &status) {
     970           0 :     return MeasureUnit::create(18, 1, status);
     971             : }
     972             : 
     973           0 : MeasureUnit *MeasureUnit::createCentiliter(UErrorCode &status) {
     974           0 :     return MeasureUnit::create(18, 2, status);
     975             : }
     976             : 
     977           0 : MeasureUnit *MeasureUnit::createCubicCentimeter(UErrorCode &status) {
     978           0 :     return MeasureUnit::create(18, 3, status);
     979             : }
     980             : 
     981           0 : MeasureUnit *MeasureUnit::createCubicFoot(UErrorCode &status) {
     982           0 :     return MeasureUnit::create(18, 4, status);
     983             : }
     984             : 
     985           0 : MeasureUnit *MeasureUnit::createCubicInch(UErrorCode &status) {
     986           0 :     return MeasureUnit::create(18, 5, status);
     987             : }
     988             : 
     989           0 : MeasureUnit *MeasureUnit::createCubicKilometer(UErrorCode &status) {
     990           0 :     return MeasureUnit::create(18, 6, status);
     991             : }
     992             : 
     993           0 : MeasureUnit *MeasureUnit::createCubicMeter(UErrorCode &status) {
     994           0 :     return MeasureUnit::create(18, 7, status);
     995             : }
     996             : 
     997           0 : MeasureUnit *MeasureUnit::createCubicMile(UErrorCode &status) {
     998           0 :     return MeasureUnit::create(18, 8, status);
     999             : }
    1000             : 
    1001           0 : MeasureUnit *MeasureUnit::createCubicYard(UErrorCode &status) {
    1002           0 :     return MeasureUnit::create(18, 9, status);
    1003             : }
    1004             : 
    1005           0 : MeasureUnit *MeasureUnit::createCup(UErrorCode &status) {
    1006           0 :     return MeasureUnit::create(18, 10, status);
    1007             : }
    1008             : 
    1009           0 : MeasureUnit *MeasureUnit::createCupMetric(UErrorCode &status) {
    1010           0 :     return MeasureUnit::create(18, 11, status);
    1011             : }
    1012             : 
    1013           0 : MeasureUnit *MeasureUnit::createDeciliter(UErrorCode &status) {
    1014           0 :     return MeasureUnit::create(18, 12, status);
    1015             : }
    1016             : 
    1017           0 : MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) {
    1018           0 :     return MeasureUnit::create(18, 13, status);
    1019             : }
    1020             : 
    1021           0 : MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) {
    1022           0 :     return MeasureUnit::create(18, 14, status);
    1023             : }
    1024             : 
    1025           0 : MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) {
    1026           0 :     return MeasureUnit::create(18, 15, status);
    1027             : }
    1028             : 
    1029           0 : MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) {
    1030           0 :     return MeasureUnit::create(18, 16, status);
    1031             : }
    1032             : 
    1033           0 : MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) {
    1034           0 :     return MeasureUnit::create(18, 17, status);
    1035             : }
    1036             : 
    1037           0 : MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) {
    1038           0 :     return MeasureUnit::create(18, 18, status);
    1039             : }
    1040             : 
    1041           0 : MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) {
    1042           0 :     return MeasureUnit::create(18, 19, status);
    1043             : }
    1044             : 
    1045           0 : MeasureUnit *MeasureUnit::createPint(UErrorCode &status) {
    1046           0 :     return MeasureUnit::create(18, 20, status);
    1047             : }
    1048             : 
    1049           0 : MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) {
    1050           0 :     return MeasureUnit::create(18, 21, status);
    1051             : }
    1052             : 
    1053           0 : MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) {
    1054           0 :     return MeasureUnit::create(18, 22, status);
    1055             : }
    1056             : 
    1057           0 : MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) {
    1058           0 :     return MeasureUnit::create(18, 23, status);
    1059             : }
    1060             : 
    1061           0 : MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) {
    1062           0 :     return MeasureUnit::create(18, 24, status);
    1063             : }
    1064             : 
    1065             : // End generated code
    1066             : 
    1067           0 : static int32_t binarySearch(
    1068             :         const char * const * array, int32_t start, int32_t end, const char * key) {
    1069           0 :     while (start < end) {
    1070           0 :         int32_t mid = (start + end) / 2;
    1071           0 :         int32_t cmp = uprv_strcmp(array[mid], key);
    1072           0 :         if (cmp < 0) {
    1073           0 :             start = mid + 1;
    1074           0 :             continue;
    1075             :         }
    1076           0 :         if (cmp == 0) {
    1077           0 :             return mid;
    1078             :         }
    1079           0 :         end = mid;
    1080             :     }
    1081           0 :     return -1;
    1082             : }
    1083             :     
    1084           0 : MeasureUnit::MeasureUnit(const MeasureUnit &other)
    1085           0 :         : fTypeId(other.fTypeId), fSubTypeId(other.fSubTypeId) {
    1086           0 :     uprv_strcpy(fCurrency, other.fCurrency);
    1087           0 : }
    1088             : 
    1089           0 : MeasureUnit &MeasureUnit::operator=(const MeasureUnit &other) {
    1090           0 :     if (this == &other) {
    1091           0 :         return *this;
    1092             :     }
    1093           0 :     fTypeId = other.fTypeId;
    1094           0 :     fSubTypeId = other.fSubTypeId;
    1095           0 :     uprv_strcpy(fCurrency, other.fCurrency);
    1096           0 :     return *this;
    1097             : }
    1098             : 
    1099           0 : UObject *MeasureUnit::clone() const {
    1100           0 :     return new MeasureUnit(*this);
    1101             : }
    1102             : 
    1103           0 : MeasureUnit::~MeasureUnit() {
    1104           0 : }
    1105             : 
    1106           0 : const char *MeasureUnit::getType() const {
    1107           0 :     return gTypes[fTypeId];
    1108             : }
    1109             : 
    1110           0 : const char *MeasureUnit::getSubtype() const {
    1111           0 :     return fCurrency[0] == 0 ? gSubTypes[getOffset()] : fCurrency;
    1112             : }
    1113             : 
    1114           0 : UBool MeasureUnit::operator==(const UObject& other) const {
    1115           0 :     if (this == &other) {  // Same object, equal
    1116           0 :         return TRUE;
    1117             :     }
    1118           0 :     if (typeid(*this) != typeid(other)) { // Different types, not equal
    1119           0 :         return FALSE;
    1120             :     }
    1121           0 :     const MeasureUnit &rhs = static_cast<const MeasureUnit&>(other);
    1122             :     return (
    1123           0 :             fTypeId == rhs.fTypeId
    1124           0 :             && fSubTypeId == rhs.fSubTypeId
    1125           0 :             && uprv_strcmp(fCurrency, rhs.fCurrency) == 0);
    1126             : }
    1127             : 
    1128           0 : int32_t MeasureUnit::getIndex() const {
    1129           0 :     return gIndexes[fTypeId] + fSubTypeId;
    1130             : }
    1131             : 
    1132           0 : int32_t MeasureUnit::getAvailable(
    1133             :         MeasureUnit *dest,
    1134             :         int32_t destCapacity,
    1135             :         UErrorCode &errorCode) {
    1136           0 :     if (U_FAILURE(errorCode)) {
    1137           0 :         return 0;
    1138             :     }
    1139           0 :     if (destCapacity < UPRV_LENGTHOF(gSubTypes)) {
    1140           0 :         errorCode = U_BUFFER_OVERFLOW_ERROR;
    1141           0 :         return UPRV_LENGTHOF(gSubTypes);
    1142             :     }
    1143           0 :     int32_t idx = 0;
    1144           0 :     for (int32_t typeIdx = 0; typeIdx < UPRV_LENGTHOF(gTypes); ++typeIdx) {
    1145           0 :         int32_t len = gOffsets[typeIdx + 1] - gOffsets[typeIdx];
    1146           0 :         for (int32_t subTypeIdx = 0; subTypeIdx < len; ++subTypeIdx) {
    1147           0 :             dest[idx].setTo(typeIdx, subTypeIdx);
    1148           0 :             ++idx;
    1149             :         }
    1150             :     }
    1151           0 :     U_ASSERT(idx == UPRV_LENGTHOF(gSubTypes));
    1152           0 :     return UPRV_LENGTHOF(gSubTypes);
    1153             : }
    1154             : 
    1155           0 : int32_t MeasureUnit::getAvailable(
    1156             :         const char *type,
    1157             :         MeasureUnit *dest,
    1158             :         int32_t destCapacity,
    1159             :         UErrorCode &errorCode) {
    1160           0 :     if (U_FAILURE(errorCode)) {
    1161           0 :         return 0;
    1162             :     }
    1163           0 :     int32_t typeIdx = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
    1164           0 :     if (typeIdx == -1) {
    1165           0 :         return 0;
    1166             :     }
    1167           0 :     int32_t len = gOffsets[typeIdx + 1] - gOffsets[typeIdx];
    1168           0 :     if (destCapacity < len) {
    1169           0 :         errorCode = U_BUFFER_OVERFLOW_ERROR;
    1170           0 :         return len;
    1171             :     }
    1172           0 :     for (int subTypeIdx = 0; subTypeIdx < len; ++subTypeIdx) {
    1173           0 :         dest[subTypeIdx].setTo(typeIdx, subTypeIdx);
    1174             :     }
    1175           0 :     return len;
    1176             : }
    1177             : 
    1178           0 : StringEnumeration* MeasureUnit::getAvailableTypes(UErrorCode &errorCode) {
    1179             :     UEnumeration *uenum = uenum_openCharStringsEnumeration(
    1180           0 :             gTypes, UPRV_LENGTHOF(gTypes), &errorCode);
    1181           0 :     if (U_FAILURE(errorCode)) {
    1182           0 :         uenum_close(uenum);
    1183           0 :         return NULL;
    1184             :     }
    1185           0 :     StringEnumeration *result = new UStringEnumeration(uenum);
    1186           0 :     if (result == NULL) {
    1187           0 :         errorCode = U_MEMORY_ALLOCATION_ERROR;
    1188           0 :         uenum_close(uenum);
    1189           0 :         return NULL;
    1190             :     }
    1191           0 :     return result;
    1192             : }
    1193             : 
    1194           0 : int32_t MeasureUnit::getIndexCount() {
    1195           0 :     return gIndexes[UPRV_LENGTHOF(gIndexes) - 1];
    1196             : }
    1197             : 
    1198           0 : int32_t MeasureUnit::internalGetIndexForTypeAndSubtype(const char *type, const char *subtype) {
    1199           0 :     int32_t t = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), type);
    1200           0 :     if (t < 0) {
    1201           0 :         return t;
    1202             :     }
    1203           0 :     int32_t st = binarySearch(gSubTypes, gOffsets[t], gOffsets[t + 1], subtype);
    1204           0 :     if (st < 0) {
    1205           0 :         return st;
    1206             :     }
    1207           0 :     return gIndexes[t] + st - gOffsets[t];
    1208             : }
    1209             : 
    1210           0 : MeasureUnit *MeasureUnit::resolveUnitPerUnit(
    1211             :         const MeasureUnit &unit, const MeasureUnit &perUnit) {
    1212           0 :     int32_t unitOffset = unit.getOffset();
    1213           0 :     int32_t perUnitOffset = perUnit.getOffset();
    1214             : 
    1215             :     // binary search for (unitOffset, perUnitOffset)
    1216           0 :     int32_t start = 0;
    1217           0 :     int32_t end = UPRV_LENGTHOF(unitPerUnitToSingleUnit);
    1218           0 :     while (start < end) {
    1219           0 :         int32_t mid = (start + end) / 2;
    1220           0 :         int32_t *midRow = unitPerUnitToSingleUnit[mid];
    1221           0 :         if (unitOffset < midRow[0]) {
    1222           0 :             end = mid;
    1223           0 :         } else if (unitOffset > midRow[0]) {
    1224           0 :             start = mid + 1;
    1225           0 :         } else if (perUnitOffset < midRow[1]) {
    1226           0 :             end = mid;
    1227           0 :         } else if (perUnitOffset > midRow[1]) {
    1228           0 :             start = mid + 1;
    1229             :         } else {
    1230             :             // We found a resolution for our unit / per-unit combo
    1231             :             // return it.
    1232           0 :             return new MeasureUnit(midRow[2], midRow[3]);
    1233             :         }
    1234             :     }
    1235           0 :     return NULL;
    1236             : }
    1237             : 
    1238           0 : MeasureUnit *MeasureUnit::create(int typeId, int subTypeId, UErrorCode &status) {
    1239           0 :     if (U_FAILURE(status)) {
    1240           0 :         return NULL;
    1241             :     }
    1242           0 :     MeasureUnit *result = new MeasureUnit(typeId, subTypeId);
    1243           0 :     if (result == NULL) {
    1244           0 :         status = U_MEMORY_ALLOCATION_ERROR;
    1245             :     }
    1246           0 :     return result;
    1247             : }
    1248             : 
    1249           0 : void MeasureUnit::initTime(const char *timeId) {
    1250           0 :     int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "duration");
    1251           0 :     U_ASSERT(result != -1);
    1252           0 :     fTypeId = result;
    1253           0 :     result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], timeId);
    1254           0 :     U_ASSERT(result != -1);
    1255           0 :     fSubTypeId = result - gOffsets[fTypeId]; 
    1256           0 : }
    1257             : 
    1258           0 : void MeasureUnit::initCurrency(const char *isoCurrency) {
    1259           0 :     int32_t result = binarySearch(gTypes, 0, UPRV_LENGTHOF(gTypes), "currency");
    1260           0 :     U_ASSERT(result != -1);
    1261           0 :     fTypeId = result;
    1262             :     result = binarySearch(
    1263           0 :             gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], isoCurrency);
    1264           0 :     if (result != -1) {
    1265           0 :         fSubTypeId = result - gOffsets[fTypeId];
    1266             :     } else {
    1267           0 :         uprv_strncpy(fCurrency, isoCurrency, UPRV_LENGTHOF(fCurrency));
    1268           0 :         fCurrency[3] = 0;
    1269             :     }
    1270           0 : }
    1271             : 
    1272           0 : void MeasureUnit::setTo(int32_t typeId, int32_t subTypeId) {
    1273           0 :     fTypeId = typeId;
    1274           0 :     fSubTypeId = subTypeId;
    1275           0 :     fCurrency[0] = 0;
    1276           0 : }
    1277             : 
    1278           0 : int32_t MeasureUnit::getOffset() const {
    1279           0 :     return gOffsets[fTypeId] + fSubTypeId;
    1280             : }
    1281             : 
    1282             : U_NAMESPACE_END
    1283             : 
    1284             : #endif /* !UNCONFIG_NO_FORMATTING */

Generated by: LCOV version 1.13