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