1 // Copyright (C) 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 #ifndef __MEASUREUNIT_H__ 14 #define __MEASUREUNIT_H__ 15 16 #include "unicode/utypes.h" 17 18 #if !UCONFIG_NO_FORMATTING 19 20 #include "unicode/unistr.h" 21 22 /** 23 * \file 24 * \brief C++ API: A unit for measuring a quantity. 25 */ 26 27 U_NAMESPACE_BEGIN 28 29 class StringEnumeration; 30 31 /** 32 * A unit such as length, mass, volume, currency, etc. A unit is 33 * coupled with a numeric amount to produce a Measure. 34 * 35 * @author Alan Liu 36 * @stable ICU 3.0 37 */ 38 class U_I18N_API MeasureUnit: public UObject { 39 public: 40 41 /** 42 * Default constructor. 43 * @stable ICU 3.0 44 */ 45 MeasureUnit() : fTypeId(0), fSubTypeId(0) { 46 fCurrency[0] = 0; 47 } 48 49 /** 50 * Copy constructor. 51 * @stable ICU 3.0 52 */ 53 MeasureUnit(const MeasureUnit &other); 54 55 /** 56 * Assignment operator. 57 * @stable ICU 3.0 58 */ 59 MeasureUnit &operator=(const MeasureUnit &other); 60 61 /** 62 * Returns a polymorphic clone of this object. The result will 63 * have the same class as returned by getDynamicClassID(). 64 * @stable ICU 3.0 65 */ 66 virtual UObject* clone() const; 67 68 /** 69 * Destructor 70 * @stable ICU 3.0 71 */ 72 virtual ~MeasureUnit(); 73 74 /** 75 * Equality operator. Return true if this object is equal 76 * to the given object. 77 * @stable ICU 3.0 78 */ 79 virtual UBool operator==(const UObject& other) const; 80 81 /** 82 * Inequality operator. Return true if this object is not equal 83 * to the given object. 84 * @stable ICU 53 85 */ 86 UBool operator!=(const UObject& other) const { 87 return !(*this == other); 88 } 89 90 /** 91 * Get the type. 92 * @stable ICU 53 93 */ 94 const char *getType() const; 95 96 /** 97 * Get the sub type. 98 * @stable ICU 53 99 */ 100 const char *getSubtype() const; 101 102 /** 103 * getAvailable gets all of the available units. 104 * If there are too many units to fit into destCapacity then the 105 * error code is set to U_BUFFER_OVERFLOW_ERROR. 106 * 107 * @param destArray destination buffer. 108 * @param destCapacity number of MeasureUnit instances available at dest. 109 * @param errorCode ICU error code. 110 * @return number of available units. 111 * @stable ICU 53 112 */ 113 static int32_t getAvailable( 114 MeasureUnit *destArray, 115 int32_t destCapacity, 116 UErrorCode &errorCode); 117 118 /** 119 * getAvailable gets all of the available units for a specific type. 120 * If there are too many units to fit into destCapacity then the 121 * error code is set to U_BUFFER_OVERFLOW_ERROR. 122 * 123 * @param type the type 124 * @param destArray destination buffer. 125 * @param destCapacity number of MeasureUnit instances available at dest. 126 * @param errorCode ICU error code. 127 * @return number of available units for type. 128 * @stable ICU 53 129 */ 130 static int32_t getAvailable( 131 const char *type, 132 MeasureUnit *destArray, 133 int32_t destCapacity, 134 UErrorCode &errorCode); 135 136 /** 137 * getAvailableTypes gets all of the available types. Caller owns the 138 * returned StringEnumeration and must delete it when finished using it. 139 * 140 * @param errorCode ICU error code. 141 * @return the types. 142 * @stable ICU 53 143 */ 144 static StringEnumeration* getAvailableTypes(UErrorCode &errorCode); 145 146 /** 147 * Return the class ID for this class. This is useful only for comparing to 148 * a return value from getDynamicClassID(). For example: 149 * <pre> 150 * . Base* polymorphic_pointer = createPolymorphicObject(); 151 * . if (polymorphic_pointer->getDynamicClassID() == 152 * . erived::getStaticClassID()) ... 153 * </pre> 154 * @return The class ID for all objects of this class. 155 * @stable ICU 53 156 */ 157 static UClassID U_EXPORT2 getStaticClassID(void); 158 159 /** 160 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 161 * method is to implement a simple version of RTTI, since not all C++ 162 * compilers support genuine RTTI. Polymorphic operator==() and clone() 163 * methods call this method. 164 * 165 * @return The class ID for this object. All objects of a 166 * given class have the same class ID. Objects of 167 * other classes have different class IDs. 168 * @stable ICU 53 169 */ 170 virtual UClassID getDynamicClassID(void) const; 171 172 #ifndef U_HIDE_INTERNAL_API 173 /** 174 * ICU use only. 175 * Returns associated array index for this measure unit. Only valid for 176 * non-currency measure units. 177 * @internal 178 */ 179 int32_t getIndex() const; 180 181 /** 182 * ICU use only. 183 * Returns maximum value from getIndex plus 1. 184 * @internal 185 */ 186 static int32_t getIndexCount(); 187 188 /** 189 * ICU use only. 190 * @return the unit.getIndex() of the unit which has this unit.getType() and unit.getSubtype(), 191 * or a negative value if there is no such unit 192 * @internal 193 */ 194 static int32_t internalGetIndexForTypeAndSubtype(const char *type, const char *subtype); 195 196 /** 197 * ICU use only. 198 * @internal 199 */ 200 static MeasureUnit *resolveUnitPerUnit( 201 const MeasureUnit &unit, const MeasureUnit &perUnit); 202 #endif /* U_HIDE_INTERNAL_API */ 203 204 // All code between the "Start generated createXXX methods" comment and 205 // the "End generated createXXX methods" comment is auto generated code 206 // and must not be edited manually. For instructions on how to correctly 207 // update this code, refer to: 208 // http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit 209 // 210 // Start generated createXXX methods 211 212 /** 213 * Returns unit of acceleration: g-force. 214 * Caller owns returned value and must free it. 215 * @param status ICU error code. 216 * @stable ICU 53 217 */ 218 static MeasureUnit *createGForce(UErrorCode &status); 219 220 /** 221 * Returns unit of acceleration: meter-per-second-squared. 222 * Caller owns returned value and must free it. 223 * @param status ICU error code. 224 * @stable ICU 54 225 */ 226 static MeasureUnit *createMeterPerSecondSquared(UErrorCode &status); 227 228 /** 229 * Returns unit of angle: arc-minute. 230 * Caller owns returned value and must free it. 231 * @param status ICU error code. 232 * @stable ICU 53 233 */ 234 static MeasureUnit *createArcMinute(UErrorCode &status); 235 236 /** 237 * Returns unit of angle: arc-second. 238 * Caller owns returned value and must free it. 239 * @param status ICU error code. 240 * @stable ICU 53 241 */ 242 static MeasureUnit *createArcSecond(UErrorCode &status); 243 244 /** 245 * Returns unit of angle: degree. 246 * Caller owns returned value and must free it. 247 * @param status ICU error code. 248 * @stable ICU 53 249 */ 250 static MeasureUnit *createDegree(UErrorCode &status); 251 252 /** 253 * Returns unit of angle: radian. 254 * Caller owns returned value and must free it. 255 * @param status ICU error code. 256 * @stable ICU 54 257 */ 258 static MeasureUnit *createRadian(UErrorCode &status); 259 260 /** 261 * Returns unit of angle: revolution. 262 * Caller owns returned value and must free it. 263 * @param status ICU error code. 264 * @stable ICU 56 265 */ 266 static MeasureUnit *createRevolutionAngle(UErrorCode &status); 267 268 /** 269 * Returns unit of area: acre. 270 * Caller owns returned value and must free it. 271 * @param status ICU error code. 272 * @stable ICU 53 273 */ 274 static MeasureUnit *createAcre(UErrorCode &status); 275 276 /** 277 * Returns unit of area: hectare. 278 * Caller owns returned value and must free it. 279 * @param status ICU error code. 280 * @stable ICU 53 281 */ 282 static MeasureUnit *createHectare(UErrorCode &status); 283 284 /** 285 * Returns unit of area: square-centimeter. 286 * Caller owns returned value and must free it. 287 * @param status ICU error code. 288 * @stable ICU 54 289 */ 290 static MeasureUnit *createSquareCentimeter(UErrorCode &status); 291 292 /** 293 * Returns unit of area: square-foot. 294 * Caller owns returned value and must free it. 295 * @param status ICU error code. 296 * @stable ICU 53 297 */ 298 static MeasureUnit *createSquareFoot(UErrorCode &status); 299 300 /** 301 * Returns unit of area: square-inch. 302 * Caller owns returned value and must free it. 303 * @param status ICU error code. 304 * @stable ICU 54 305 */ 306 static MeasureUnit *createSquareInch(UErrorCode &status); 307 308 /** 309 * Returns unit of area: square-kilometer. 310 * Caller owns returned value and must free it. 311 * @param status ICU error code. 312 * @stable ICU 53 313 */ 314 static MeasureUnit *createSquareKilometer(UErrorCode &status); 315 316 /** 317 * Returns unit of area: square-meter. 318 * Caller owns returned value and must free it. 319 * @param status ICU error code. 320 * @stable ICU 53 321 */ 322 static MeasureUnit *createSquareMeter(UErrorCode &status); 323 324 /** 325 * Returns unit of area: square-mile. 326 * Caller owns returned value and must free it. 327 * @param status ICU error code. 328 * @stable ICU 53 329 */ 330 static MeasureUnit *createSquareMile(UErrorCode &status); 331 332 /** 333 * Returns unit of area: square-yard. 334 * Caller owns returned value and must free it. 335 * @param status ICU error code. 336 * @stable ICU 54 337 */ 338 static MeasureUnit *createSquareYard(UErrorCode &status); 339 340 /** 341 * Returns unit of concentr: karat. 342 * Caller owns returned value and must free it. 343 * @param status ICU error code. 344 * @stable ICU 54 345 */ 346 static MeasureUnit *createKarat(UErrorCode &status); 347 348 #ifndef U_HIDE_DRAFT_API 349 /** 350 * Returns unit of concentr: milligram-per-deciliter. 351 * Caller owns returned value and must free it. 352 * @param status ICU error code. 353 * @draft ICU 57 354 */ 355 static MeasureUnit *createMilligramPerDeciliter(UErrorCode &status); 356 #endif /* U_HIDE_DRAFT_API */ 357 358 #ifndef U_HIDE_DRAFT_API 359 /** 360 * Returns unit of concentr: millimole-per-liter. 361 * Caller owns returned value and must free it. 362 * @param status ICU error code. 363 * @draft ICU 57 364 */ 365 static MeasureUnit *createMillimolePerLiter(UErrorCode &status); 366 #endif /* U_HIDE_DRAFT_API */ 367 368 #ifndef U_HIDE_DRAFT_API 369 /** 370 * Returns unit of concentr: part-per-million. 371 * Caller owns returned value and must free it. 372 * @param status ICU error code. 373 * @draft ICU 57 374 */ 375 static MeasureUnit *createPartPerMillion(UErrorCode &status); 376 #endif /* U_HIDE_DRAFT_API */ 377 378 /** 379 * Returns unit of consumption: liter-per-100kilometers. 380 * Caller owns returned value and must free it. 381 * @param status ICU error code. 382 * @stable ICU 56 383 */ 384 static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status); 385 386 /** 387 * Returns unit of consumption: liter-per-kilometer. 388 * Caller owns returned value and must free it. 389 * @param status ICU error code. 390 * @stable ICU 54 391 */ 392 static MeasureUnit *createLiterPerKilometer(UErrorCode &status); 393 394 /** 395 * Returns unit of consumption: mile-per-gallon. 396 * Caller owns returned value and must free it. 397 * @param status ICU error code. 398 * @stable ICU 54 399 */ 400 static MeasureUnit *createMilePerGallon(UErrorCode &status); 401 402 #ifndef U_HIDE_DRAFT_API 403 /** 404 * Returns unit of consumption: mile-per-gallon-imperial. 405 * Caller owns returned value and must free it. 406 * @param status ICU error code. 407 * @draft ICU 57 408 */ 409 static MeasureUnit *createMilePerGallonImperial(UErrorCode &status); 410 #endif /* U_HIDE_DRAFT_API */ 411 412 #ifndef U_HIDE_DRAFT_API 413 /** 414 * Returns unit of coordinate: east. 415 * Caller owns returned value and must free it. 416 * @param status ICU error code. 417 * @draft ICU 58 418 */ 419 static MeasureUnit *createEast(UErrorCode &status); 420 #endif /* U_HIDE_DRAFT_API */ 421 422 #ifndef U_HIDE_DRAFT_API 423 /** 424 * Returns unit of coordinate: north. 425 * Caller owns returned value and must free it. 426 * @param status ICU error code. 427 * @draft ICU 58 428 */ 429 static MeasureUnit *createNorth(UErrorCode &status); 430 #endif /* U_HIDE_DRAFT_API */ 431 432 #ifndef U_HIDE_DRAFT_API 433 /** 434 * Returns unit of coordinate: south. 435 * Caller owns returned value and must free it. 436 * @param status ICU error code. 437 * @draft ICU 58 438 */ 439 static MeasureUnit *createSouth(UErrorCode &status); 440 #endif /* U_HIDE_DRAFT_API */ 441 442 #ifndef U_HIDE_DRAFT_API 443 /** 444 * Returns unit of coordinate: west. 445 * Caller owns returned value and must free it. 446 * @param status ICU error code. 447 * @draft ICU 58 448 */ 449 static MeasureUnit *createWest(UErrorCode &status); 450 #endif /* U_HIDE_DRAFT_API */ 451 452 /** 453 * Returns unit of digital: bit. 454 * Caller owns returned value and must free it. 455 * @param status ICU error code. 456 * @stable ICU 54 457 */ 458 static MeasureUnit *createBit(UErrorCode &status); 459 460 /** 461 * Returns unit of digital: byte. 462 * Caller owns returned value and must free it. 463 * @param status ICU error code. 464 * @stable ICU 54 465 */ 466 static MeasureUnit *createByte(UErrorCode &status); 467 468 /** 469 * Returns unit of digital: gigabit. 470 * Caller owns returned value and must free it. 471 * @param status ICU error code. 472 * @stable ICU 54 473 */ 474 static MeasureUnit *createGigabit(UErrorCode &status); 475 476 /** 477 * Returns unit of digital: gigabyte. 478 * Caller owns returned value and must free it. 479 * @param status ICU error code. 480 * @stable ICU 54 481 */ 482 static MeasureUnit *createGigabyte(UErrorCode &status); 483 484 /** 485 * Returns unit of digital: kilobit. 486 * Caller owns returned value and must free it. 487 * @param status ICU error code. 488 * @stable ICU 54 489 */ 490 static MeasureUnit *createKilobit(UErrorCode &status); 491 492 /** 493 * Returns unit of digital: kilobyte. 494 * Caller owns returned value and must free it. 495 * @param status ICU error code. 496 * @stable ICU 54 497 */ 498 static MeasureUnit *createKilobyte(UErrorCode &status); 499 500 /** 501 * Returns unit of digital: megabit. 502 * Caller owns returned value and must free it. 503 * @param status ICU error code. 504 * @stable ICU 54 505 */ 506 static MeasureUnit *createMegabit(UErrorCode &status); 507 508 /** 509 * Returns unit of digital: megabyte. 510 * Caller owns returned value and must free it. 511 * @param status ICU error code. 512 * @stable ICU 54 513 */ 514 static MeasureUnit *createMegabyte(UErrorCode &status); 515 516 /** 517 * Returns unit of digital: terabit. 518 * Caller owns returned value and must free it. 519 * @param status ICU error code. 520 * @stable ICU 54 521 */ 522 static MeasureUnit *createTerabit(UErrorCode &status); 523 524 /** 525 * Returns unit of digital: terabyte. 526 * Caller owns returned value and must free it. 527 * @param status ICU error code. 528 * @stable ICU 54 529 */ 530 static MeasureUnit *createTerabyte(UErrorCode &status); 531 532 /** 533 * Returns unit of duration: century. 534 * Caller owns returned value and must free it. 535 * @param status ICU error code. 536 * @stable ICU 56 537 */ 538 static MeasureUnit *createCentury(UErrorCode &status); 539 540 /** 541 * Returns unit of duration: day. 542 * Caller owns returned value and must free it. 543 * @param status ICU error code. 544 * @stable ICU 53 545 */ 546 static MeasureUnit *createDay(UErrorCode &status); 547 548 /** 549 * Returns unit of duration: hour. 550 * Caller owns returned value and must free it. 551 * @param status ICU error code. 552 * @stable ICU 53 553 */ 554 static MeasureUnit *createHour(UErrorCode &status); 555 556 /** 557 * Returns unit of duration: microsecond. 558 * Caller owns returned value and must free it. 559 * @param status ICU error code. 560 * @stable ICU 54 561 */ 562 static MeasureUnit *createMicrosecond(UErrorCode &status); 563 564 /** 565 * Returns unit of duration: millisecond. 566 * Caller owns returned value and must free it. 567 * @param status ICU error code. 568 * @stable ICU 53 569 */ 570 static MeasureUnit *createMillisecond(UErrorCode &status); 571 572 /** 573 * Returns unit of duration: minute. 574 * Caller owns returned value and must free it. 575 * @param status ICU error code. 576 * @stable ICU 53 577 */ 578 static MeasureUnit *createMinute(UErrorCode &status); 579 580 /** 581 * Returns unit of duration: month. 582 * Caller owns returned value and must free it. 583 * @param status ICU error code. 584 * @stable ICU 53 585 */ 586 static MeasureUnit *createMonth(UErrorCode &status); 587 588 /** 589 * Returns unit of duration: nanosecond. 590 * Caller owns returned value and must free it. 591 * @param status ICU error code. 592 * @stable ICU 54 593 */ 594 static MeasureUnit *createNanosecond(UErrorCode &status); 595 596 /** 597 * Returns unit of duration: second. 598 * Caller owns returned value and must free it. 599 * @param status ICU error code. 600 * @stable ICU 53 601 */ 602 static MeasureUnit *createSecond(UErrorCode &status); 603 604 /** 605 * Returns unit of duration: week. 606 * Caller owns returned value and must free it. 607 * @param status ICU error code. 608 * @stable ICU 53 609 */ 610 static MeasureUnit *createWeek(UErrorCode &status); 611 612 /** 613 * Returns unit of duration: year. 614 * Caller owns returned value and must free it. 615 * @param status ICU error code. 616 * @stable ICU 53 617 */ 618 static MeasureUnit *createYear(UErrorCode &status); 619 620 /** 621 * Returns unit of electric: ampere. 622 * Caller owns returned value and must free it. 623 * @param status ICU error code. 624 * @stable ICU 54 625 */ 626 static MeasureUnit *createAmpere(UErrorCode &status); 627 628 /** 629 * Returns unit of electric: milliampere. 630 * Caller owns returned value and must free it. 631 * @param status ICU error code. 632 * @stable ICU 54 633 */ 634 static MeasureUnit *createMilliampere(UErrorCode &status); 635 636 /** 637 * Returns unit of electric: ohm. 638 * Caller owns returned value and must free it. 639 * @param status ICU error code. 640 * @stable ICU 54 641 */ 642 static MeasureUnit *createOhm(UErrorCode &status); 643 644 /** 645 * Returns unit of electric: volt. 646 * Caller owns returned value and must free it. 647 * @param status ICU error code. 648 * @stable ICU 54 649 */ 650 static MeasureUnit *createVolt(UErrorCode &status); 651 652 /** 653 * Returns unit of energy: calorie. 654 * Caller owns returned value and must free it. 655 * @param status ICU error code. 656 * @stable ICU 54 657 */ 658 static MeasureUnit *createCalorie(UErrorCode &status); 659 660 /** 661 * Returns unit of energy: foodcalorie. 662 * Caller owns returned value and must free it. 663 * @param status ICU error code. 664 * @stable ICU 54 665 */ 666 static MeasureUnit *createFoodcalorie(UErrorCode &status); 667 668 /** 669 * Returns unit of energy: joule. 670 * Caller owns returned value and must free it. 671 * @param status ICU error code. 672 * @stable ICU 54 673 */ 674 static MeasureUnit *createJoule(UErrorCode &status); 675 676 /** 677 * Returns unit of energy: kilocalorie. 678 * Caller owns returned value and must free it. 679 * @param status ICU error code. 680 * @stable ICU 54 681 */ 682 static MeasureUnit *createKilocalorie(UErrorCode &status); 683 684 /** 685 * Returns unit of energy: kilojoule. 686 * Caller owns returned value and must free it. 687 * @param status ICU error code. 688 * @stable ICU 54 689 */ 690 static MeasureUnit *createKilojoule(UErrorCode &status); 691 692 /** 693 * Returns unit of energy: kilowatt-hour. 694 * Caller owns returned value and must free it. 695 * @param status ICU error code. 696 * @stable ICU 54 697 */ 698 static MeasureUnit *createKilowattHour(UErrorCode &status); 699 700 /** 701 * Returns unit of frequency: gigahertz. 702 * Caller owns returned value and must free it. 703 * @param status ICU error code. 704 * @stable ICU 54 705 */ 706 static MeasureUnit *createGigahertz(UErrorCode &status); 707 708 /** 709 * Returns unit of frequency: hertz. 710 * Caller owns returned value and must free it. 711 * @param status ICU error code. 712 * @stable ICU 54 713 */ 714 static MeasureUnit *createHertz(UErrorCode &status); 715 716 /** 717 * Returns unit of frequency: kilohertz. 718 * Caller owns returned value and must free it. 719 * @param status ICU error code. 720 * @stable ICU 54 721 */ 722 static MeasureUnit *createKilohertz(UErrorCode &status); 723 724 /** 725 * Returns unit of frequency: megahertz. 726 * Caller owns returned value and must free it. 727 * @param status ICU error code. 728 * @stable ICU 54 729 */ 730 static MeasureUnit *createMegahertz(UErrorCode &status); 731 732 /** 733 * Returns unit of length: astronomical-unit. 734 * Caller owns returned value and must free it. 735 * @param status ICU error code. 736 * @stable ICU 54 737 */ 738 static MeasureUnit *createAstronomicalUnit(UErrorCode &status); 739 740 /** 741 * Returns unit of length: centimeter. 742 * Caller owns returned value and must free it. 743 * @param status ICU error code. 744 * @stable ICU 53 745 */ 746 static MeasureUnit *createCentimeter(UErrorCode &status); 747 748 /** 749 * Returns unit of length: decimeter. 750 * Caller owns returned value and must free it. 751 * @param status ICU error code. 752 * @stable ICU 54 753 */ 754 static MeasureUnit *createDecimeter(UErrorCode &status); 755 756 /** 757 * Returns unit of length: fathom. 758 * Caller owns returned value and must free it. 759 * @param status ICU error code. 760 * @stable ICU 54 761 */ 762 static MeasureUnit *createFathom(UErrorCode &status); 763 764 /** 765 * Returns unit of length: foot. 766 * Caller owns returned value and must free it. 767 * @param status ICU error code. 768 * @stable ICU 53 769 */ 770 static MeasureUnit *createFoot(UErrorCode &status); 771 772 /** 773 * Returns unit of length: furlong. 774 * Caller owns returned value and must free it. 775 * @param status ICU error code. 776 * @stable ICU 54 777 */ 778 static MeasureUnit *createFurlong(UErrorCode &status); 779 780 /** 781 * Returns unit of length: inch. 782 * Caller owns returned value and must free it. 783 * @param status ICU error code. 784 * @stable ICU 53 785 */ 786 static MeasureUnit *createInch(UErrorCode &status); 787 788 /** 789 * Returns unit of length: kilometer. 790 * Caller owns returned value and must free it. 791 * @param status ICU error code. 792 * @stable ICU 53 793 */ 794 static MeasureUnit *createKilometer(UErrorCode &status); 795 796 /** 797 * Returns unit of length: light-year. 798 * Caller owns returned value and must free it. 799 * @param status ICU error code. 800 * @stable ICU 53 801 */ 802 static MeasureUnit *createLightYear(UErrorCode &status); 803 804 /** 805 * Returns unit of length: meter. 806 * Caller owns returned value and must free it. 807 * @param status ICU error code. 808 * @stable ICU 53 809 */ 810 static MeasureUnit *createMeter(UErrorCode &status); 811 812 /** 813 * Returns unit of length: micrometer. 814 * Caller owns returned value and must free it. 815 * @param status ICU error code. 816 * @stable ICU 54 817 */ 818 static MeasureUnit *createMicrometer(UErrorCode &status); 819 820 /** 821 * Returns unit of length: mile. 822 * Caller owns returned value and must free it. 823 * @param status ICU error code. 824 * @stable ICU 53 825 */ 826 static MeasureUnit *createMile(UErrorCode &status); 827 828 /** 829 * Returns unit of length: mile-scandinavian. 830 * Caller owns returned value and must free it. 831 * @param status ICU error code. 832 * @stable ICU 56 833 */ 834 static MeasureUnit *createMileScandinavian(UErrorCode &status); 835 836 /** 837 * Returns unit of length: millimeter. 838 * Caller owns returned value and must free it. 839 * @param status ICU error code. 840 * @stable ICU 53 841 */ 842 static MeasureUnit *createMillimeter(UErrorCode &status); 843 844 /** 845 * Returns unit of length: nanometer. 846 * Caller owns returned value and must free it. 847 * @param status ICU error code. 848 * @stable ICU 54 849 */ 850 static MeasureUnit *createNanometer(UErrorCode &status); 851 852 /** 853 * Returns unit of length: nautical-mile. 854 * Caller owns returned value and must free it. 855 * @param status ICU error code. 856 * @stable ICU 54 857 */ 858 static MeasureUnit *createNauticalMile(UErrorCode &status); 859 860 /** 861 * Returns unit of length: parsec. 862 * Caller owns returned value and must free it. 863 * @param status ICU error code. 864 * @stable ICU 54 865 */ 866 static MeasureUnit *createParsec(UErrorCode &status); 867 868 /** 869 * Returns unit of length: picometer. 870 * Caller owns returned value and must free it. 871 * @param status ICU error code. 872 * @stable ICU 53 873 */ 874 static MeasureUnit *createPicometer(UErrorCode &status); 875 876 /** 877 * Returns unit of length: yard. 878 * Caller owns returned value and must free it. 879 * @param status ICU error code. 880 * @stable ICU 53 881 */ 882 static MeasureUnit *createYard(UErrorCode &status); 883 884 /** 885 * Returns unit of light: lux. 886 * Caller owns returned value and must free it. 887 * @param status ICU error code. 888 * @stable ICU 54 889 */ 890 static MeasureUnit *createLux(UErrorCode &status); 891 892 /** 893 * Returns unit of mass: carat. 894 * Caller owns returned value and must free it. 895 * @param status ICU error code. 896 * @stable ICU 54 897 */ 898 static MeasureUnit *createCarat(UErrorCode &status); 899 900 /** 901 * Returns unit of mass: gram. 902 * Caller owns returned value and must free it. 903 * @param status ICU error code. 904 * @stable ICU 53 905 */ 906 static MeasureUnit *createGram(UErrorCode &status); 907 908 /** 909 * Returns unit of mass: kilogram. 910 * Caller owns returned value and must free it. 911 * @param status ICU error code. 912 * @stable ICU 53 913 */ 914 static MeasureUnit *createKilogram(UErrorCode &status); 915 916 /** 917 * Returns unit of mass: metric-ton. 918 * Caller owns returned value and must free it. 919 * @param status ICU error code. 920 * @stable ICU 54 921 */ 922 static MeasureUnit *createMetricTon(UErrorCode &status); 923 924 /** 925 * Returns unit of mass: microgram. 926 * Caller owns returned value and must free it. 927 * @param status ICU error code. 928 * @stable ICU 54 929 */ 930 static MeasureUnit *createMicrogram(UErrorCode &status); 931 932 /** 933 * Returns unit of mass: milligram. 934 * Caller owns returned value and must free it. 935 * @param status ICU error code. 936 * @stable ICU 54 937 */ 938 static MeasureUnit *createMilligram(UErrorCode &status); 939 940 /** 941 * Returns unit of mass: ounce. 942 * Caller owns returned value and must free it. 943 * @param status ICU error code. 944 * @stable ICU 53 945 */ 946 static MeasureUnit *createOunce(UErrorCode &status); 947 948 /** 949 * Returns unit of mass: ounce-troy. 950 * Caller owns returned value and must free it. 951 * @param status ICU error code. 952 * @stable ICU 54 953 */ 954 static MeasureUnit *createOunceTroy(UErrorCode &status); 955 956 /** 957 * Returns unit of mass: pound. 958 * Caller owns returned value and must free it. 959 * @param status ICU error code. 960 * @stable ICU 53 961 */ 962 static MeasureUnit *createPound(UErrorCode &status); 963 964 /** 965 * Returns unit of mass: stone. 966 * Caller owns returned value and must free it. 967 * @param status ICU error code. 968 * @stable ICU 54 969 */ 970 static MeasureUnit *createStone(UErrorCode &status); 971 972 /** 973 * Returns unit of mass: ton. 974 * Caller owns returned value and must free it. 975 * @param status ICU error code. 976 * @stable ICU 54 977 */ 978 static MeasureUnit *createTon(UErrorCode &status); 979 980 /** 981 * Returns unit of power: gigawatt. 982 * Caller owns returned value and must free it. 983 * @param status ICU error code. 984 * @stable ICU 54 985 */ 986 static MeasureUnit *createGigawatt(UErrorCode &status); 987 988 /** 989 * Returns unit of power: horsepower. 990 * Caller owns returned value and must free it. 991 * @param status ICU error code. 992 * @stable ICU 53 993 */ 994 static MeasureUnit *createHorsepower(UErrorCode &status); 995 996 /** 997 * Returns unit of power: kilowatt. 998 * Caller owns returned value and must free it. 999 * @param status ICU error code. 1000 * @stable ICU 53 1001 */ 1002 static MeasureUnit *createKilowatt(UErrorCode &status); 1003 1004 /** 1005 * Returns unit of power: megawatt. 1006 * Caller owns returned value and must free it. 1007 * @param status ICU error code. 1008 * @stable ICU 54 1009 */ 1010 static MeasureUnit *createMegawatt(UErrorCode &status); 1011 1012 /** 1013 * Returns unit of power: milliwatt. 1014 * Caller owns returned value and must free it. 1015 * @param status ICU error code. 1016 * @stable ICU 54 1017 */ 1018 static MeasureUnit *createMilliwatt(UErrorCode &status); 1019 1020 /** 1021 * Returns unit of power: watt. 1022 * Caller owns returned value and must free it. 1023 * @param status ICU error code. 1024 * @stable ICU 53 1025 */ 1026 static MeasureUnit *createWatt(UErrorCode &status); 1027 1028 /** 1029 * Returns unit of pressure: hectopascal. 1030 * Caller owns returned value and must free it. 1031 * @param status ICU error code. 1032 * @stable ICU 53 1033 */ 1034 static MeasureUnit *createHectopascal(UErrorCode &status); 1035 1036 /** 1037 * Returns unit of pressure: inch-hg. 1038 * Caller owns returned value and must free it. 1039 * @param status ICU error code. 1040 * @stable ICU 53 1041 */ 1042 static MeasureUnit *createInchHg(UErrorCode &status); 1043 1044 /** 1045 * Returns unit of pressure: millibar. 1046 * Caller owns returned value and must free it. 1047 * @param status ICU error code. 1048 * @stable ICU 53 1049 */ 1050 static MeasureUnit *createMillibar(UErrorCode &status); 1051 1052 /** 1053 * Returns unit of pressure: millimeter-of-mercury. 1054 * Caller owns returned value and must free it. 1055 * @param status ICU error code. 1056 * @stable ICU 54 1057 */ 1058 static MeasureUnit *createMillimeterOfMercury(UErrorCode &status); 1059 1060 /** 1061 * Returns unit of pressure: pound-per-square-inch. 1062 * Caller owns returned value and must free it. 1063 * @param status ICU error code. 1064 * @stable ICU 54 1065 */ 1066 static MeasureUnit *createPoundPerSquareInch(UErrorCode &status); 1067 1068 /** 1069 * Returns unit of speed: kilometer-per-hour. 1070 * Caller owns returned value and must free it. 1071 * @param status ICU error code. 1072 * @stable ICU 53 1073 */ 1074 static MeasureUnit *createKilometerPerHour(UErrorCode &status); 1075 1076 /** 1077 * Returns unit of speed: knot. 1078 * Caller owns returned value and must free it. 1079 * @param status ICU error code. 1080 * @stable ICU 56 1081 */ 1082 static MeasureUnit *createKnot(UErrorCode &status); 1083 1084 /** 1085 * Returns unit of speed: meter-per-second. 1086 * Caller owns returned value and must free it. 1087 * @param status ICU error code. 1088 * @stable ICU 53 1089 */ 1090 static MeasureUnit *createMeterPerSecond(UErrorCode &status); 1091 1092 /** 1093 * Returns unit of speed: mile-per-hour. 1094 * Caller owns returned value and must free it. 1095 * @param status ICU error code. 1096 * @stable ICU 53 1097 */ 1098 static MeasureUnit *createMilePerHour(UErrorCode &status); 1099 1100 /** 1101 * Returns unit of temperature: celsius. 1102 * Caller owns returned value and must free it. 1103 * @param status ICU error code. 1104 * @stable ICU 53 1105 */ 1106 static MeasureUnit *createCelsius(UErrorCode &status); 1107 1108 /** 1109 * Returns unit of temperature: fahrenheit. 1110 * Caller owns returned value and must free it. 1111 * @param status ICU error code. 1112 * @stable ICU 53 1113 */ 1114 static MeasureUnit *createFahrenheit(UErrorCode &status); 1115 1116 /** 1117 * Returns unit of temperature: generic. 1118 * Caller owns returned value and must free it. 1119 * @param status ICU error code. 1120 * @stable ICU 56 1121 */ 1122 static MeasureUnit *createGenericTemperature(UErrorCode &status); 1123 1124 /** 1125 * Returns unit of temperature: kelvin. 1126 * Caller owns returned value and must free it. 1127 * @param status ICU error code. 1128 * @stable ICU 54 1129 */ 1130 static MeasureUnit *createKelvin(UErrorCode &status); 1131 1132 /** 1133 * Returns unit of volume: acre-foot. 1134 * Caller owns returned value and must free it. 1135 * @param status ICU error code. 1136 * @stable ICU 54 1137 */ 1138 static MeasureUnit *createAcreFoot(UErrorCode &status); 1139 1140 /** 1141 * Returns unit of volume: bushel. 1142 * Caller owns returned value and must free it. 1143 * @param status ICU error code. 1144 * @stable ICU 54 1145 */ 1146 static MeasureUnit *createBushel(UErrorCode &status); 1147 1148 /** 1149 * Returns unit of volume: centiliter. 1150 * Caller owns returned value and must free it. 1151 * @param status ICU error code. 1152 * @stable ICU 54 1153 */ 1154 static MeasureUnit *createCentiliter(UErrorCode &status); 1155 1156 /** 1157 * Returns unit of volume: cubic-centimeter. 1158 * Caller owns returned value and must free it. 1159 * @param status ICU error code. 1160 * @stable ICU 54 1161 */ 1162 static MeasureUnit *createCubicCentimeter(UErrorCode &status); 1163 1164 /** 1165 * Returns unit of volume: cubic-foot. 1166 * Caller owns returned value and must free it. 1167 * @param status ICU error code. 1168 * @stable ICU 54 1169 */ 1170 static MeasureUnit *createCubicFoot(UErrorCode &status); 1171 1172 /** 1173 * Returns unit of volume: cubic-inch. 1174 * Caller owns returned value and must free it. 1175 * @param status ICU error code. 1176 * @stable ICU 54 1177 */ 1178 static MeasureUnit *createCubicInch(UErrorCode &status); 1179 1180 /** 1181 * Returns unit of volume: cubic-kilometer. 1182 * Caller owns returned value and must free it. 1183 * @param status ICU error code. 1184 * @stable ICU 53 1185 */ 1186 static MeasureUnit *createCubicKilometer(UErrorCode &status); 1187 1188 /** 1189 * Returns unit of volume: cubic-meter. 1190 * Caller owns returned value and must free it. 1191 * @param status ICU error code. 1192 * @stable ICU 54 1193 */ 1194 static MeasureUnit *createCubicMeter(UErrorCode &status); 1195 1196 /** 1197 * Returns unit of volume: cubic-mile. 1198 * Caller owns returned value and must free it. 1199 * @param status ICU error code. 1200 * @stable ICU 53 1201 */ 1202 static MeasureUnit *createCubicMile(UErrorCode &status); 1203 1204 /** 1205 * Returns unit of volume: cubic-yard. 1206 * Caller owns returned value and must free it. 1207 * @param status ICU error code. 1208 * @stable ICU 54 1209 */ 1210 static MeasureUnit *createCubicYard(UErrorCode &status); 1211 1212 /** 1213 * Returns unit of volume: cup. 1214 * Caller owns returned value and must free it. 1215 * @param status ICU error code. 1216 * @stable ICU 54 1217 */ 1218 static MeasureUnit *createCup(UErrorCode &status); 1219 1220 /** 1221 * Returns unit of volume: cup-metric. 1222 * Caller owns returned value and must free it. 1223 * @param status ICU error code. 1224 * @stable ICU 56 1225 */ 1226 static MeasureUnit *createCupMetric(UErrorCode &status); 1227 1228 /** 1229 * Returns unit of volume: deciliter. 1230 * Caller owns returned value and must free it. 1231 * @param status ICU error code. 1232 * @stable ICU 54 1233 */ 1234 static MeasureUnit *createDeciliter(UErrorCode &status); 1235 1236 /** 1237 * Returns unit of volume: fluid-ounce. 1238 * Caller owns returned value and must free it. 1239 * @param status ICU error code. 1240 * @stable ICU 54 1241 */ 1242 static MeasureUnit *createFluidOunce(UErrorCode &status); 1243 1244 /** 1245 * Returns unit of volume: gallon. 1246 * Caller owns returned value and must free it. 1247 * @param status ICU error code. 1248 * @stable ICU 54 1249 */ 1250 static MeasureUnit *createGallon(UErrorCode &status); 1251 1252 #ifndef U_HIDE_DRAFT_API 1253 /** 1254 * Returns unit of volume: gallon-imperial. 1255 * Caller owns returned value and must free it. 1256 * @param status ICU error code. 1257 * @draft ICU 57 1258 */ 1259 static MeasureUnit *createGallonImperial(UErrorCode &status); 1260 #endif /* U_HIDE_DRAFT_API */ 1261 1262 /** 1263 * Returns unit of volume: hectoliter. 1264 * Caller owns returned value and must free it. 1265 * @param status ICU error code. 1266 * @stable ICU 54 1267 */ 1268 static MeasureUnit *createHectoliter(UErrorCode &status); 1269 1270 /** 1271 * Returns unit of volume: liter. 1272 * Caller owns returned value and must free it. 1273 * @param status ICU error code. 1274 * @stable ICU 53 1275 */ 1276 static MeasureUnit *createLiter(UErrorCode &status); 1277 1278 /** 1279 * Returns unit of volume: megaliter. 1280 * Caller owns returned value and must free it. 1281 * @param status ICU error code. 1282 * @stable ICU 54 1283 */ 1284 static MeasureUnit *createMegaliter(UErrorCode &status); 1285 1286 /** 1287 * Returns unit of volume: milliliter. 1288 * Caller owns returned value and must free it. 1289 * @param status ICU error code. 1290 * @stable ICU 54 1291 */ 1292 static MeasureUnit *createMilliliter(UErrorCode &status); 1293 1294 /** 1295 * Returns unit of volume: pint. 1296 * Caller owns returned value and must free it. 1297 * @param status ICU error code. 1298 * @stable ICU 54 1299 */ 1300 static MeasureUnit *createPint(UErrorCode &status); 1301 1302 /** 1303 * Returns unit of volume: pint-metric. 1304 * Caller owns returned value and must free it. 1305 * @param status ICU error code. 1306 * @stable ICU 56 1307 */ 1308 static MeasureUnit *createPintMetric(UErrorCode &status); 1309 1310 /** 1311 * Returns unit of volume: quart. 1312 * Caller owns returned value and must free it. 1313 * @param status ICU error code. 1314 * @stable ICU 54 1315 */ 1316 static MeasureUnit *createQuart(UErrorCode &status); 1317 1318 /** 1319 * Returns unit of volume: tablespoon. 1320 * Caller owns returned value and must free it. 1321 * @param status ICU error code. 1322 * @stable ICU 54 1323 */ 1324 static MeasureUnit *createTablespoon(UErrorCode &status); 1325 1326 /** 1327 * Returns unit of volume: teaspoon. 1328 * Caller owns returned value and must free it. 1329 * @param status ICU error code. 1330 * @stable ICU 54 1331 */ 1332 static MeasureUnit *createTeaspoon(UErrorCode &status); 1333 1334 1335 // End generated createXXX methods 1336 1337 protected: 1338 1339 #ifndef U_HIDE_INTERNAL_API 1340 /** 1341 * For ICU use only. 1342 * @internal 1343 */ 1344 void initTime(const char *timeId); 1345 1346 /** 1347 * For ICU use only. 1348 * @internal 1349 */ 1350 void initCurrency(const char *isoCurrency); 1351 1352 #endif /* U_HIDE_INTERNAL_API */ 1353 1354 private: 1355 int32_t fTypeId; 1356 int32_t fSubTypeId; 1357 char fCurrency[4]; 1358 1359 MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) { 1360 fCurrency[0] = 0; 1361 } 1362 void setTo(int32_t typeId, int32_t subTypeId); 1363 int32_t getOffset() const; 1364 static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status); 1365 }; 1366 1367 U_NAMESPACE_END 1368 1369 #endif // !UNCONFIG_NO_FORMATTING 1370 #endif // __MEASUREUNIT_H__ 1371