]>
Commit | Line | Data |
---|---|---|
374ca955 A |
1 | /* |
2 | ********************************************************************** | |
57a6839d | 3 | * Copyright (c) 2004-2014, International Business Machines |
374ca955 A |
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 | #ifndef __MEASUREUNIT_H__ | |
12 | #define __MEASUREUNIT_H__ | |
13 | ||
14 | #include "unicode/utypes.h" | |
15 | ||
16 | #if !UCONFIG_NO_FORMATTING | |
17 | ||
57a6839d | 18 | #include "unicode/unistr.h" |
374ca955 | 19 | |
73c04bcf A |
20 | /** |
21 | * \file | |
22 | * \brief C++ API: A unit for measuring a quantity. | |
23 | */ | |
24 | ||
374ca955 A |
25 | U_NAMESPACE_BEGIN |
26 | ||
57a6839d A |
27 | class StringEnumeration; |
28 | ||
374ca955 A |
29 | /** |
30 | * A unit such as length, mass, volume, currency, etc. A unit is | |
31 | * coupled with a numeric amount to produce a Measure. | |
32 | * | |
374ca955 | 33 | * @author Alan Liu |
73c04bcf | 34 | * @stable ICU 3.0 |
374ca955 A |
35 | */ |
36 | class U_I18N_API MeasureUnit: public UObject { | |
37 | public: | |
57a6839d A |
38 | |
39 | /** | |
40 | * Default constructor. | |
41 | * @stable ICU 3.0 | |
42 | */ | |
43 | MeasureUnit() : fTypeId(0), fSubTypeId(0) { | |
44 | fCurrency[0] = 0; | |
45 | } | |
46 | ||
47 | /** | |
48 | * Copy constructor. | |
49 | * @draft ICU 53 | |
50 | */ | |
51 | MeasureUnit(const MeasureUnit &other); | |
52 | ||
53 | /** | |
54 | * Assignment operator. | |
55 | * @draft ICU 53 | |
56 | */ | |
57 | MeasureUnit &operator=(const MeasureUnit &other); | |
58 | ||
374ca955 | 59 | /** |
57a6839d | 60 | * Returns a polymorphic clone of this object. The result will |
374ca955 | 61 | * have the same class as returned by getDynamicClassID(). |
73c04bcf | 62 | * @stable ICU 3.0 |
374ca955 | 63 | */ |
57a6839d | 64 | virtual UObject* clone() const; |
374ca955 A |
65 | |
66 | /** | |
67 | * Destructor | |
73c04bcf | 68 | * @stable ICU 3.0 |
374ca955 A |
69 | */ |
70 | virtual ~MeasureUnit(); | |
57a6839d | 71 | |
374ca955 A |
72 | /** |
73 | * Equality operator. Return true if this object is equal | |
74 | * to the given object. | |
73c04bcf | 75 | * @stable ICU 3.0 |
374ca955 | 76 | */ |
57a6839d A |
77 | virtual UBool operator==(const UObject& other) const; |
78 | ||
79 | #ifndef U_HIDE_DRAFT_API | |
80 | /** | |
81 | * Inequality operator. Return true if this object is not equal | |
82 | * to the given object. | |
83 | * @draft ICU 53 | |
84 | */ | |
85 | UBool operator!=(const UObject& other) const { | |
86 | return !(*this == other); | |
87 | } | |
88 | ||
89 | /** | |
90 | * Get the type. | |
91 | * @draft ICU 53 | |
92 | */ | |
93 | const char *getType() const; | |
94 | ||
95 | /** | |
96 | * Get the sub type. | |
97 | * @draft ICU 53 | |
98 | */ | |
99 | const char *getSubtype() const; | |
100 | ||
101 | /** | |
102 | * getAvailable gets all of the available units. | |
103 | * If there are too many units to fit into destCapacity then the | |
104 | * error code is set to U_BUFFER_OVERFLOW_ERROR. | |
105 | * | |
106 | * @param destArray destination buffer. | |
107 | * @param destCapacity number of MeasureUnit instances available at dest. | |
108 | * @param errorCode ICU error code. | |
109 | * @return number of available units. | |
110 | * @draft ICU 53 | |
111 | */ | |
112 | static int32_t getAvailable( | |
113 | MeasureUnit *destArray, | |
114 | int32_t destCapacity, | |
115 | UErrorCode &errorCode); | |
116 | ||
117 | /** | |
118 | * getAvailable gets all of the available units for a specific type. | |
119 | * If there are too many units to fit into destCapacity then the | |
120 | * error code is set to U_BUFFER_OVERFLOW_ERROR. | |
121 | * | |
122 | * @param type the type | |
123 | * @param destArray destination buffer. | |
124 | * @param destCapacity number of MeasureUnit instances available at dest. | |
125 | * @param errorCode ICU error code. | |
126 | * @return number of available units for type. | |
127 | * @draft ICU 53 | |
128 | */ | |
129 | static int32_t getAvailable( | |
130 | const char *type, | |
131 | MeasureUnit *destArray, | |
132 | int32_t destCapacity, | |
133 | UErrorCode &errorCode); | |
134 | ||
135 | /** | |
136 | * getAvailableTypes gets all of the available types. Caller owns the | |
137 | * returned StringEnumeration and must delete it when finished using it. | |
138 | * | |
139 | * @param errorCode ICU error code. | |
140 | * @return the types. | |
141 | * @draft ICU 53 | |
142 | */ | |
143 | static StringEnumeration* getAvailableTypes(UErrorCode &errorCode); | |
144 | #endif /* U_HIDE_DRAFT_API */ | |
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 | * @draft 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 | * @draft 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 | #endif /* U_HIDE_INTERNAL_API */ | |
188 | ||
189 | // Start generated createXXX methods | |
190 | ||
191 | #ifndef U_HIDE_DRAFT_API | |
192 | /** | |
193 | * Creates a unit of acceleration: g-force. | |
194 | * Caller owns returned value and must free it. | |
195 | * @param status ICU error code. | |
196 | * @draft ICU 53 | |
197 | */ | |
198 | static MeasureUnit *createGForce(UErrorCode &status); | |
199 | ||
200 | /** | |
201 | * Creates a unit of angle: arc-minute. | |
202 | * Caller owns returned value and must free it. | |
203 | * @param status ICU error code. | |
204 | * @draft ICU 53 | |
205 | */ | |
206 | static MeasureUnit *createArcMinute(UErrorCode &status); | |
207 | ||
208 | /** | |
209 | * Creates a unit of angle: arc-second. | |
210 | * Caller owns returned value and must free it. | |
211 | * @param status ICU error code. | |
212 | * @draft ICU 53 | |
213 | */ | |
214 | static MeasureUnit *createArcSecond(UErrorCode &status); | |
215 | ||
216 | /** | |
217 | * Creates a unit of angle: degree. | |
218 | * Caller owns returned value and must free it. | |
219 | * @param status ICU error code. | |
220 | * @draft ICU 53 | |
221 | */ | |
222 | static MeasureUnit *createDegree(UErrorCode &status); | |
223 | ||
224 | /** | |
225 | * Creates a unit of area: acre. | |
226 | * Caller owns returned value and must free it. | |
227 | * @param status ICU error code. | |
228 | * @draft ICU 53 | |
229 | */ | |
230 | static MeasureUnit *createAcre(UErrorCode &status); | |
231 | ||
232 | /** | |
233 | * Creates a unit of area: hectare. | |
234 | * Caller owns returned value and must free it. | |
235 | * @param status ICU error code. | |
236 | * @draft ICU 53 | |
237 | */ | |
238 | static MeasureUnit *createHectare(UErrorCode &status); | |
239 | ||
240 | /** | |
241 | * Creates a unit of area: square-foot. | |
242 | * Caller owns returned value and must free it. | |
243 | * @param status ICU error code. | |
244 | * @draft ICU 53 | |
245 | */ | |
246 | static MeasureUnit *createSquareFoot(UErrorCode &status); | |
247 | ||
248 | /** | |
249 | * Creates a unit of area: square-kilometer. | |
250 | * Caller owns returned value and must free it. | |
251 | * @param status ICU error code. | |
252 | * @draft ICU 53 | |
253 | */ | |
254 | static MeasureUnit *createSquareKilometer(UErrorCode &status); | |
255 | ||
256 | /** | |
257 | * Creates a unit of area: square-meter. | |
258 | * Caller owns returned value and must free it. | |
259 | * @param status ICU error code. | |
260 | * @draft ICU 53 | |
261 | */ | |
262 | static MeasureUnit *createSquareMeter(UErrorCode &status); | |
263 | ||
264 | /** | |
265 | * Creates a unit of area: square-mile. | |
266 | * Caller owns returned value and must free it. | |
267 | * @param status ICU error code. | |
268 | * @draft ICU 53 | |
269 | */ | |
270 | static MeasureUnit *createSquareMile(UErrorCode &status); | |
271 | ||
272 | /** | |
273 | * Creates a unit of duration: day. | |
274 | * Caller owns returned value and must free it. | |
275 | * @param status ICU error code. | |
276 | * @draft ICU 53 | |
277 | */ | |
278 | static MeasureUnit *createDay(UErrorCode &status); | |
279 | ||
280 | /** | |
281 | * Creates a unit of duration: hour. | |
282 | * Caller owns returned value and must free it. | |
283 | * @param status ICU error code. | |
284 | * @draft ICU 53 | |
285 | */ | |
286 | static MeasureUnit *createHour(UErrorCode &status); | |
287 | ||
288 | /** | |
289 | * Creates a unit of duration: millisecond. | |
290 | * Caller owns returned value and must free it. | |
291 | * @param status ICU error code. | |
292 | * @draft ICU 53 | |
293 | */ | |
294 | static MeasureUnit *createMillisecond(UErrorCode &status); | |
295 | ||
296 | /** | |
297 | * Creates a unit of duration: minute. | |
298 | * Caller owns returned value and must free it. | |
299 | * @param status ICU error code. | |
300 | * @draft ICU 53 | |
301 | */ | |
302 | static MeasureUnit *createMinute(UErrorCode &status); | |
303 | ||
304 | /** | |
305 | * Creates a unit of duration: month. | |
306 | * Caller owns returned value and must free it. | |
307 | * @param status ICU error code. | |
308 | * @draft ICU 53 | |
309 | */ | |
310 | static MeasureUnit *createMonth(UErrorCode &status); | |
311 | ||
312 | /** | |
313 | * Creates a unit of duration: second. | |
314 | * Caller owns returned value and must free it. | |
315 | * @param status ICU error code. | |
316 | * @draft ICU 53 | |
317 | */ | |
318 | static MeasureUnit *createSecond(UErrorCode &status); | |
319 | ||
320 | /** | |
321 | * Creates a unit of duration: week. | |
322 | * Caller owns returned value and must free it. | |
323 | * @param status ICU error code. | |
324 | * @draft ICU 53 | |
325 | */ | |
326 | static MeasureUnit *createWeek(UErrorCode &status); | |
327 | ||
328 | /** | |
329 | * Creates a unit of duration: year. | |
330 | * Caller owns returned value and must free it. | |
331 | * @param status ICU error code. | |
332 | * @draft ICU 53 | |
333 | */ | |
334 | static MeasureUnit *createYear(UErrorCode &status); | |
335 | ||
336 | /** | |
337 | * Creates a unit of length: centimeter. | |
338 | * Caller owns returned value and must free it. | |
339 | * @param status ICU error code. | |
340 | * @draft ICU 53 | |
341 | */ | |
342 | static MeasureUnit *createCentimeter(UErrorCode &status); | |
343 | ||
344 | /** | |
345 | * Creates a unit of length: foot. | |
346 | * Caller owns returned value and must free it. | |
347 | * @param status ICU error code. | |
348 | * @draft ICU 53 | |
349 | */ | |
350 | static MeasureUnit *createFoot(UErrorCode &status); | |
351 | ||
352 | /** | |
353 | * Creates a unit of length: inch. | |
354 | * Caller owns returned value and must free it. | |
355 | * @param status ICU error code. | |
356 | * @draft ICU 53 | |
357 | */ | |
358 | static MeasureUnit *createInch(UErrorCode &status); | |
359 | ||
360 | /** | |
361 | * Creates a unit of length: kilometer. | |
362 | * Caller owns returned value and must free it. | |
363 | * @param status ICU error code. | |
364 | * @draft ICU 53 | |
365 | */ | |
366 | static MeasureUnit *createKilometer(UErrorCode &status); | |
367 | ||
368 | /** | |
369 | * Creates a unit of length: light-year. | |
370 | * Caller owns returned value and must free it. | |
371 | * @param status ICU error code. | |
372 | * @draft ICU 53 | |
373 | */ | |
374 | static MeasureUnit *createLightYear(UErrorCode &status); | |
375 | ||
376 | /** | |
377 | * Creates a unit of length: meter. | |
378 | * Caller owns returned value and must free it. | |
379 | * @param status ICU error code. | |
380 | * @draft ICU 53 | |
381 | */ | |
382 | static MeasureUnit *createMeter(UErrorCode &status); | |
383 | ||
384 | /** | |
385 | * Creates a unit of length: mile. | |
386 | * Caller owns returned value and must free it. | |
387 | * @param status ICU error code. | |
388 | * @draft ICU 53 | |
389 | */ | |
390 | static MeasureUnit *createMile(UErrorCode &status); | |
391 | ||
392 | /** | |
393 | * Creates a unit of length: millimeter. | |
394 | * Caller owns returned value and must free it. | |
395 | * @param status ICU error code. | |
396 | * @draft ICU 53 | |
397 | */ | |
398 | static MeasureUnit *createMillimeter(UErrorCode &status); | |
399 | ||
400 | /** | |
401 | * Creates a unit of length: picometer. | |
402 | * Caller owns returned value and must free it. | |
403 | * @param status ICU error code. | |
404 | * @draft ICU 53 | |
405 | */ | |
406 | static MeasureUnit *createPicometer(UErrorCode &status); | |
407 | ||
408 | /** | |
409 | * Creates a unit of length: yard. | |
410 | * Caller owns returned value and must free it. | |
411 | * @param status ICU error code. | |
412 | * @draft ICU 53 | |
413 | */ | |
414 | static MeasureUnit *createYard(UErrorCode &status); | |
415 | ||
416 | /** | |
417 | * Creates a unit of mass: gram. | |
418 | * Caller owns returned value and must free it. | |
419 | * @param status ICU error code. | |
420 | * @draft ICU 53 | |
421 | */ | |
422 | static MeasureUnit *createGram(UErrorCode &status); | |
423 | ||
424 | /** | |
425 | * Creates a unit of mass: kilogram. | |
426 | * Caller owns returned value and must free it. | |
427 | * @param status ICU error code. | |
428 | * @draft ICU 53 | |
429 | */ | |
430 | static MeasureUnit *createKilogram(UErrorCode &status); | |
431 | ||
432 | /** | |
433 | * Creates a unit of mass: ounce. | |
434 | * Caller owns returned value and must free it. | |
435 | * @param status ICU error code. | |
436 | * @draft ICU 53 | |
437 | */ | |
438 | static MeasureUnit *createOunce(UErrorCode &status); | |
439 | ||
440 | /** | |
441 | * Creates a unit of mass: pound. | |
442 | * Caller owns returned value and must free it. | |
443 | * @param status ICU error code. | |
444 | * @draft ICU 53 | |
445 | */ | |
446 | static MeasureUnit *createPound(UErrorCode &status); | |
447 | ||
448 | /** | |
449 | * Creates a unit of mass: stone. (for now, Apple-specific addition) | |
450 | * Caller owns returned value and must free it. | |
451 | * @param status ICU error code. | |
452 | * @internal | |
453 | */ | |
454 | static MeasureUnit *createStone(UErrorCode &status); | |
455 | ||
456 | /** | |
457 | * Creates a unit of power: horsepower. | |
458 | * Caller owns returned value and must free it. | |
459 | * @param status ICU error code. | |
460 | * @draft ICU 53 | |
461 | */ | |
462 | static MeasureUnit *createHorsepower(UErrorCode &status); | |
463 | ||
464 | /** | |
465 | * Creates a unit of power: kilowatt. | |
466 | * Caller owns returned value and must free it. | |
467 | * @param status ICU error code. | |
468 | * @draft ICU 53 | |
469 | */ | |
470 | static MeasureUnit *createKilowatt(UErrorCode &status); | |
471 | ||
472 | /** | |
473 | * Creates a unit of power: watt. | |
474 | * Caller owns returned value and must free it. | |
475 | * @param status ICU error code. | |
476 | * @draft ICU 53 | |
477 | */ | |
478 | static MeasureUnit *createWatt(UErrorCode &status); | |
479 | ||
480 | /** | |
481 | * Creates a unit of pressure: hectopascal. | |
482 | * Caller owns returned value and must free it. | |
483 | * @param status ICU error code. | |
484 | * @draft ICU 53 | |
485 | */ | |
486 | static MeasureUnit *createHectopascal(UErrorCode &status); | |
487 | ||
488 | /** | |
489 | * Creates a unit of pressure: inch-hg. | |
490 | * Caller owns returned value and must free it. | |
491 | * @param status ICU error code. | |
492 | * @draft ICU 53 | |
493 | */ | |
494 | static MeasureUnit *createInchHg(UErrorCode &status); | |
495 | ||
496 | /** | |
497 | * Creates a unit of pressure: millibar. | |
498 | * Caller owns returned value and must free it. | |
499 | * @param status ICU error code. | |
500 | * @draft ICU 53 | |
501 | */ | |
502 | static MeasureUnit *createMillibar(UErrorCode &status); | |
503 | ||
504 | /** | |
505 | * Creates a unit of speed: kilometer-per-hour. | |
506 | * Caller owns returned value and must free it. | |
507 | * @param status ICU error code. | |
508 | * @draft ICU 53 | |
509 | */ | |
510 | static MeasureUnit *createKilometerPerHour(UErrorCode &status); | |
511 | ||
512 | /** | |
513 | * Creates a unit of speed: meter-per-second. | |
514 | * Caller owns returned value and must free it. | |
515 | * @param status ICU error code. | |
516 | * @draft ICU 53 | |
517 | */ | |
518 | static MeasureUnit *createMeterPerSecond(UErrorCode &status); | |
519 | ||
520 | /** | |
521 | * Creates a unit of speed: mile-per-hour. | |
522 | * Caller owns returned value and must free it. | |
523 | * @param status ICU error code. | |
524 | * @draft ICU 53 | |
525 | */ | |
526 | static MeasureUnit *createMilePerHour(UErrorCode &status); | |
527 | ||
528 | /** | |
529 | * Creates a unit of temperature: celsius. | |
530 | * Caller owns returned value and must free it. | |
531 | * @param status ICU error code. | |
532 | * @draft ICU 53 | |
533 | */ | |
534 | static MeasureUnit *createCelsius(UErrorCode &status); | |
535 | ||
536 | /** | |
537 | * Creates a unit of temperature: fahrenheit. | |
538 | * Caller owns returned value and must free it. | |
539 | * @param status ICU error code. | |
540 | * @draft ICU 53 | |
541 | */ | |
542 | static MeasureUnit *createFahrenheit(UErrorCode &status); | |
543 | ||
544 | /** | |
545 | * Creates a unit of volume: cubic-kilometer. | |
546 | * Caller owns returned value and must free it. | |
547 | * @param status ICU error code. | |
548 | * @draft ICU 53 | |
549 | */ | |
550 | static MeasureUnit *createCubicKilometer(UErrorCode &status); | |
551 | ||
552 | /** | |
553 | * Creates a unit of volume: cubic-mile. | |
554 | * Caller owns returned value and must free it. | |
555 | * @param status ICU error code. | |
556 | * @draft ICU 53 | |
557 | */ | |
558 | static MeasureUnit *createCubicMile(UErrorCode &status); | |
559 | ||
560 | /** | |
561 | * Creates a unit of volume: liter. | |
562 | * Caller owns returned value and must free it. | |
563 | * @param status ICU error code. | |
564 | * @draft ICU 53 | |
565 | */ | |
566 | static MeasureUnit *createLiter(UErrorCode &status); | |
567 | ||
568 | /** | |
569 | * Creates a unit of energy: as listed. (for now, Apple-specific addition) | |
570 | * Caller owns returned value and must free it. | |
571 | * @param status ICU error code. | |
572 | * @internal | |
573 | */ | |
574 | static MeasureUnit *createCalorie(UErrorCode &status); | |
575 | static MeasureUnit *createFoodcalorie(UErrorCode &status); | |
576 | static MeasureUnit *createJoule(UErrorCode &status); | |
577 | static MeasureUnit *createKilocalorie(UErrorCode &status); | |
578 | static MeasureUnit *createKilojoule(UErrorCode &status); | |
579 | ||
580 | #endif /* U_HIDE_DRAFT_API */ | |
374ca955 A |
581 | |
582 | protected: | |
57a6839d A |
583 | |
584 | #ifndef U_HIDE_INTERNAL_API | |
374ca955 | 585 | /** |
57a6839d A |
586 | * For ICU use only. |
587 | * @internal | |
588 | */ | |
589 | void initTime(const char *timeId); | |
590 | ||
591 | /** | |
592 | * For ICU use only. | |
593 | * @internal | |
374ca955 | 594 | */ |
57a6839d A |
595 | void initCurrency(const char *isoCurrency); |
596 | ||
597 | #endif | |
598 | ||
599 | private: | |
600 | int32_t fTypeId; | |
601 | int32_t fSubTypeId; | |
602 | char fCurrency[4]; | |
603 | ||
604 | MeasureUnit(int32_t typeId, int32_t subTypeId) : fTypeId(typeId), fSubTypeId(subTypeId) { | |
605 | fCurrency[0] = 0; | |
606 | } | |
607 | void setTo(int32_t typeId, int32_t subTypeId); | |
608 | int32_t getOffset() const; | |
609 | static MeasureUnit *create(int typeId, int subTypeId, UErrorCode &status); | |
374ca955 A |
610 | }; |
611 | ||
612 | U_NAMESPACE_END | |
613 | ||
57a6839d | 614 | #endif // !UNCONFIG_NO_FORMATTING |
374ca955 | 615 | #endif // __MEASUREUNIT_H__ |