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 22 U_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 */ 31 class U_I18N_API TimeUnitAmount: public Measure { 32 public: 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 157 inline UBool 158 TimeUnitAmount::operator!=(const UObject& other) const { 159 return !operator==(other); 160 } 161 162 U_NAMESPACE_END 163 164 #endif /* #if !UCONFIG_NO_FORMATTING */ 165 166 #endif // __TMUTAMT_H__ 167 //eof 168 // 169