• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      */
MeasureUnit()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 
MeasureUnit(int32_t typeId,int32_t subTypeId)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