tmutamt.h revision c73f511526464f8e56c242df80552e9b0d94ae3d
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//
169