1 /* 2 ******************************************************************************* 3 * Copyright (C) 2009-2010, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 */ 7 #ifndef CURRPINF_H 8 #define CURRPINF_H 9 10 #include "unicode/utypes.h" 11 12 /** 13 * \file 14 * \brief C++ API: Currency Plural Information used by Decimal Format 15 */ 16 17 #if !UCONFIG_NO_FORMATTING 18 19 #include "unicode/unistr.h" 20 21 union UHashTok; 22 23 U_NAMESPACE_BEGIN 24 25 class Locale; 26 class PluralRules; 27 class Hashtable; 28 29 /** 30 * This class represents the information needed by 31 * DecimalFormat to format currency plural, 32 * such as "3.00 US dollars" or "1.00 US dollar". 33 * DecimalFormat creates for itself an instance of 34 * CurrencyPluralInfo from its locale data. 35 * If you need to change any of these symbols, you can get the 36 * CurrencyPluralInfo object from your 37 * DecimalFormat and modify it. 38 * 39 * Following are the information needed for currency plural format and parse: 40 * locale information, 41 * plural rule of the locale, 42 * currency plural pattern of the locale. 43 * 44 * @stable ICU 4.2 45 */ 46 class U_I18N_API CurrencyPluralInfo : public UObject { 47 public: 48 49 /** 50 * Create a CurrencyPluralInfo object for the default locale. 51 * @param status output param set to success/failure code on exit 52 * @stable ICU 4.2 53 */ 54 CurrencyPluralInfo(UErrorCode& status); 55 56 /** 57 * Create a CurrencyPluralInfo object for the given locale. 58 * @param locale the locale 59 * @param status output param set to success/failure code on exit 60 * @stable ICU 4.2 61 */ 62 CurrencyPluralInfo(const Locale& locale, UErrorCode& status); 63 64 /** 65 * Copy constructor 66 * 67 * @stable ICU 4.2 68 */ 69 CurrencyPluralInfo(const CurrencyPluralInfo& info); 70 71 72 /** 73 * Assignment operator 74 * 75 * @stable ICU 4.2 76 */ 77 CurrencyPluralInfo& operator=(const CurrencyPluralInfo& info); 78 79 80 /** 81 * Destructor 82 * 83 * @stable ICU 4.2 84 */ 85 virtual ~CurrencyPluralInfo(); 86 87 88 /** 89 * Equal operator. 90 * 91 * @stable ICU 4.2 92 */ 93 UBool operator==(const CurrencyPluralInfo& info) const; 94 95 96 /** 97 * Not equal operator 98 * 99 * @stable ICU 4.2 100 */ 101 UBool operator!=(const CurrencyPluralInfo& info) const; 102 103 104 /** 105 * Clone 106 * 107 * @stable ICU 4.2 108 */ 109 CurrencyPluralInfo* clone() const; 110 111 112 /** 113 * Gets plural rules of this locale, used for currency plural format 114 * 115 * @return plural rule 116 * @stable ICU 4.2 117 */ 118 const PluralRules* getPluralRules() const; 119 120 /** 121 * Given a plural count, gets currency plural pattern of this locale, 122 * used for currency plural format 123 * 124 * @param pluralCount currency plural count 125 * @param result output param to receive the pattern 126 * @return a currency plural pattern based on plural count 127 * @stable ICU 4.2 128 */ 129 UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount, 130 UnicodeString& result) const; 131 132 /** 133 * Get locale 134 * 135 * @return locale 136 * @stable ICU 4.2 137 */ 138 const Locale& getLocale() const; 139 140 /** 141 * Set plural rules. 142 * The plural rule is set when CurrencyPluralInfo 143 * instance is created. 144 * You can call this method to reset plural rules only if you want 145 * to modify the default plural rule of the locale. 146 * 147 * @param ruleDescription new plural rule description 148 * @param status output param set to success/failure code on exit 149 * @stable ICU 4.2 150 */ 151 void setPluralRules(const UnicodeString& ruleDescription, 152 UErrorCode& status); 153 154 /** 155 * Set currency plural pattern. 156 * The currency plural pattern is set when CurrencyPluralInfo 157 * instance is created. 158 * You can call this method to reset currency plural pattern only if 159 * you want to modify the default currency plural pattern of the locale. 160 * 161 * @param pluralCount the plural count for which the currency pattern will 162 * be overridden. 163 * @param pattern the new currency plural pattern 164 * @param status output param set to success/failure code on exit 165 * @stable ICU 4.2 166 */ 167 void setCurrencyPluralPattern(const UnicodeString& pluralCount, 168 const UnicodeString& pattern, 169 UErrorCode& status); 170 171 /** 172 * Set locale 173 * 174 * @param loc the new locale to set 175 * @param status output param set to success/failure code on exit 176 * @stable ICU 4.2 177 */ 178 void setLocale(const Locale& loc, UErrorCode& status); 179 180 /** 181 * ICU "poor man's RTTI", returns a UClassID for the actual class. 182 * 183 * @stable ICU 4.2 184 */ 185 virtual UClassID getDynamicClassID() const; 186 187 /** 188 * ICU "poor man's RTTI", returns a UClassID for this class. 189 * 190 * @stable ICU 4.2 191 */ 192 static UClassID U_EXPORT2 getStaticClassID(); 193 194 private: 195 friend class DecimalFormat; 196 197 void initialize(const Locale& loc, UErrorCode& status); 198 199 void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status); 200 201 /* 202 * delete hash table 203 * 204 * @param hTable hash table to be deleted 205 */ 206 void deleteHash(Hashtable* hTable); 207 208 209 /* 210 * initialize hash table 211 * 212 * @param status output param set to success/failure code on exit 213 * @return hash table initialized 214 */ 215 Hashtable* initHash(UErrorCode& status); 216 217 218 219 /** 220 * copy hash table 221 * 222 * @param source the source to copy from 223 * @param target the target to copy to 224 */ 225 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status); 226 227 //-------------------- private data member --------------------- 228 // map from plural count to currency plural pattern, for example 229 // a plural pattern defined in "CurrencyUnitPatterns" is 230 // "one{{0} {1}}", in which "one" is a plural count 231 // and "{0} {1}" is a currency plural pattern". 232 // The currency plural pattern saved in this mapping is the pattern 233 // defined in "CurrencyUnitPattern" by replacing 234 // {0} with the number format pattern, 235 // and {1} with 3 currency sign. 236 Hashtable* fPluralCountToCurrencyUnitPattern; 237 238 /* 239 * The plural rule is used to format currency plural name, 240 * for example: "3.00 US Dollars". 241 * If there are 3 currency signs in the currency patttern, 242 * the 3 currency signs will be replaced by currency plural name. 243 */ 244 PluralRules* fPluralRules; 245 246 // locale 247 Locale* fLocale; 248 }; 249 250 251 inline UBool 252 CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const { return !operator==(info); } 253 254 U_NAMESPACE_END 255 256 #endif /* #if !UCONFIG_NO_FORMATTING */ 257 258 #endif // _CURRPINFO 259 //eof 260