]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/unicode/currpinf.h
ICU-57131.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / currpinf.h
1 /*
2 *******************************************************************************
3 * Copyright (C) 2009-2015, 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 U_NAMESPACE_BEGIN
22
23 class Locale;
24 class PluralRules;
25 class Hashtable;
26
27 /**
28 * This class represents the information needed by
29 * DecimalFormat to format currency plural,
30 * such as "3.00 US dollars" or "1.00 US dollar".
31 * DecimalFormat creates for itself an instance of
32 * CurrencyPluralInfo from its locale data.
33 * If you need to change any of these symbols, you can get the
34 * CurrencyPluralInfo object from your
35 * DecimalFormat and modify it.
36 *
37 * Following are the information needed for currency plural format and parse:
38 * locale information,
39 * plural rule of the locale,
40 * currency plural pattern of the locale.
41 *
42 * @stable ICU 4.2
43 */
44 class U_I18N_API CurrencyPluralInfo : public UObject {
45 public:
46
47 /**
48 * Create a CurrencyPluralInfo object for the default locale.
49 * @param status output param set to success/failure code on exit
50 * @stable ICU 4.2
51 */
52 CurrencyPluralInfo(UErrorCode& status);
53
54 /**
55 * Create a CurrencyPluralInfo object for the given locale.
56 * @param locale the locale
57 * @param status output param set to success/failure code on exit
58 * @stable ICU 4.2
59 */
60 CurrencyPluralInfo(const Locale& locale, UErrorCode& status);
61
62 /**
63 * Copy constructor
64 *
65 * @stable ICU 4.2
66 */
67 CurrencyPluralInfo(const CurrencyPluralInfo& info);
68
69
70 /**
71 * Assignment operator
72 *
73 * @stable ICU 4.2
74 */
75 CurrencyPluralInfo& operator=(const CurrencyPluralInfo& info);
76
77
78 /**
79 * Destructor
80 *
81 * @stable ICU 4.2
82 */
83 virtual ~CurrencyPluralInfo();
84
85
86 /**
87 * Equal operator.
88 *
89 * @stable ICU 4.2
90 */
91 UBool operator==(const CurrencyPluralInfo& info) const;
92
93
94 /**
95 * Not equal operator
96 *
97 * @stable ICU 4.2
98 */
99 UBool operator!=(const CurrencyPluralInfo& info) const;
100
101
102 /**
103 * Clone
104 *
105 * @stable ICU 4.2
106 */
107 CurrencyPluralInfo* clone() const;
108
109
110 /**
111 * Gets plural rules of this locale, used for currency plural format
112 *
113 * @return plural rule
114 * @stable ICU 4.2
115 */
116 const PluralRules* getPluralRules() const;
117
118 /**
119 * Given a plural count, gets currency plural pattern of this locale,
120 * used for currency plural format
121 *
122 * @param pluralCount currency plural count
123 * @param result output param to receive the pattern
124 * @return a currency plural pattern based on plural count
125 * @stable ICU 4.2
126 */
127 UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount,
128 UnicodeString& result) const;
129
130 /**
131 * Get locale
132 *
133 * @return locale
134 * @stable ICU 4.2
135 */
136 const Locale& getLocale() const;
137
138 /**
139 * Set plural rules.
140 * The plural rule is set when CurrencyPluralInfo
141 * instance is created.
142 * You can call this method to reset plural rules only if you want
143 * to modify the default plural rule of the locale.
144 *
145 * @param ruleDescription new plural rule description
146 * @param status output param set to success/failure code on exit
147 * @stable ICU 4.2
148 */
149 void setPluralRules(const UnicodeString& ruleDescription,
150 UErrorCode& status);
151
152 /**
153 * Set currency plural pattern.
154 * The currency plural pattern is set when CurrencyPluralInfo
155 * instance is created.
156 * You can call this method to reset currency plural pattern only if
157 * you want to modify the default currency plural pattern of the locale.
158 *
159 * @param pluralCount the plural count for which the currency pattern will
160 * be overridden.
161 * @param pattern the new currency plural pattern
162 * @param status output param set to success/failure code on exit
163 * @stable ICU 4.2
164 */
165 void setCurrencyPluralPattern(const UnicodeString& pluralCount,
166 const UnicodeString& pattern,
167 UErrorCode& status);
168
169 /**
170 * Set locale
171 *
172 * @param loc the new locale to set
173 * @param status output param set to success/failure code on exit
174 * @stable ICU 4.2
175 */
176 void setLocale(const Locale& loc, UErrorCode& status);
177
178 /**
179 * ICU "poor man's RTTI", returns a UClassID for the actual class.
180 *
181 * @stable ICU 4.2
182 */
183 virtual UClassID getDynamicClassID() const;
184
185 /**
186 * ICU "poor man's RTTI", returns a UClassID for this class.
187 *
188 * @stable ICU 4.2
189 */
190 static UClassID U_EXPORT2 getStaticClassID();
191
192 private:
193 friend class DecimalFormat;
194 friend class DecimalFormatImpl;
195
196 void initialize(const Locale& loc, UErrorCode& status);
197
198 void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status);
199
200 /*
201 * delete hash table
202 *
203 * @param hTable hash table to be deleted
204 */
205 void deleteHash(Hashtable* hTable);
206
207
208 /*
209 * initialize hash table
210 *
211 * @param status output param set to success/failure code on exit
212 * @return hash table initialized
213 */
214 Hashtable* initHash(UErrorCode& status);
215
216
217
218 /**
219 * copy hash table
220 *
221 * @param source the source to copy from
222 * @param target the target to copy to
223 * @param status error code
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