]> git.saurik.com Git - apple/icu.git/blame - icuSources/i18n/unicode/tmutamt.h
ICU-511.35.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / tmutamt.h
CommitLineData
729e4ab9
A
1/*
2 *******************************************************************************
3 * Copyright (C) 2009-2010, Google, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
6 */
7
8#ifndef __TMUTAMT_H__
9#define __TMUTAMT_H__
10
11
12/**
13 * \file
14 * \brief C++ API: time unit amount object.
15 */
16
17#include "unicode/measure.h"
18#include "unicode/tmunit.h"
19
20#if !UCONFIG_NO_FORMATTING
21
22U_NAMESPACE_BEGIN
23
24
25/**
26 * Express a duration as a time unit and number. Patterned after Currency.
27 * @see TimeUnitAmount
28 * @see TimeUnitFormat
29 * @stable ICU 4.2
30 */
31class U_I18N_API TimeUnitAmount: public Measure {
32public:
33 /**
34 * Construct TimeUnitAmount object with the given number and the
35 * given time unit.
36 * @param number a numeric object; number.isNumeric() must be TRUE
37 * @param timeUnitField the time unit field of a time unit
38 * @param status the input-output error code.
39 * If the number is not numeric or the timeUnitField
40 * is not valid,
41 * then this will be set to a failing value:
42 * U_ILLEGAL_ARGUMENT_ERROR.
43 * @stable ICU 4.2
44 */
45 TimeUnitAmount(const Formattable& number,
46 TimeUnit::UTimeUnitFields timeUnitField,
47 UErrorCode& status);
48
49 /**
50 * Construct TimeUnitAmount object with the given numeric amount and the
51 * given time unit.
52 * @param amount a numeric amount.
53 * @param timeUnitField the time unit field on which a time unit amount
54 * object will be created.
55 * @param status the input-output error code.
56 * If the timeUnitField is not valid,
57 * then this will be set to a failing value:
58 * U_ILLEGAL_ARGUMENT_ERROR.
59 * @stable ICU 4.2
60 */
61 TimeUnitAmount(double amount, TimeUnit::UTimeUnitFields timeUnitField,
62 UErrorCode& status);
63
64
65 /**
66 * Copy constructor
67 * @stable ICU 4.2
68 */
69 TimeUnitAmount(const TimeUnitAmount& other);
70
71
72 /**
73 * Assignment operator
74 * @stable ICU 4.2
75 */
76 TimeUnitAmount& operator=(const TimeUnitAmount& other);
77
78
79 /**
80 * Clone.
81 * @return a polymorphic clone of this object. The result will have the same class as returned by getDynamicClassID().
82 * @stable ICU 4.2
83 */
84 virtual UObject* clone() const;
85
86
87 /**
88 * Destructor
89 * @stable ICU 4.2
90 */
91 virtual ~TimeUnitAmount();
92
93
94 /**
95 * Equality operator.
96 * @param other the object to compare to.
97 * @return true if this object is equal to the given object.
98 * @stable ICU 4.2
99 */
100 virtual UBool operator==(const UObject& other) const;
101
102
103 /**
104 * Not-equality operator.
105 * @param other the object to compare to.
106 * @return true if this object is not equal to the given object.
107 * @stable ICU 4.2
108 */
109 UBool operator!=(const UObject& other) const;
110
111
112 /**
113 * Return the class ID for this class. This is useful only for comparing to
114 * a return value from getDynamicClassID(). For example:
115 * <pre>
116 * . Base* polymorphic_pointer = createPolymorphicObject();
117 * . if (polymorphic_pointer->getDynamicClassID() ==
118 * . erived::getStaticClassID()) ...
119 * </pre>
120 * @return The class ID for all objects of this class.
121 * @stable ICU 4.2
122 */
123 static UClassID U_EXPORT2 getStaticClassID(void);
124
125
126 /**
127 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
128 * method is to implement a simple version of RTTI, since not all C++
129 * compilers support genuine RTTI. Polymorphic operator==() and clone()
130 * methods call this method.
131 *
132 * @return The class ID for this object. All objects of a
133 * given class have the same class ID. Objects of
134 * other classes have different class IDs.
135 * @stable ICU 4.2
136 */
137 virtual UClassID getDynamicClassID(void) const;
138
139
140 /**
141 * Get the time unit.
142 * @return time unit object.
143 * @stable ICU 4.2
144 */
145 const TimeUnit& getTimeUnit() const;
146
147 /**
148 * Get the time unit field value.
149 * @return time unit field value.
150 * @stable ICU 4.2
151 */
152 TimeUnit::UTimeUnitFields getTimeUnitField() const;
153};
154
155
156
157inline UBool
158TimeUnitAmount::operator!=(const UObject& other) const {
159 return !operator==(other);
160}
161
162U_NAMESPACE_END
163
164#endif /* #if !UCONFIG_NO_FORMATTING */
165
166#endif // __TMUTAMT_H__
167//eof
168//