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