• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *******************************************************************************
3  * Copyright (C) 2009-2011, 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      * @param status   error code
225      */
226     void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
227 
228     //-------------------- private data member ---------------------
229     // map from plural count to currency plural pattern, for example
230     // a plural pattern defined in "CurrencyUnitPatterns" is
231     // "one{{0} {1}}", in which "one" is a plural count
232     // and "{0} {1}" is a currency plural pattern".
233     // The currency plural pattern saved in this mapping is the pattern
234     // defined in "CurrencyUnitPattern" by replacing
235     // {0} with the number format pattern,
236     // and {1} with 3 currency sign.
237     Hashtable* fPluralCountToCurrencyUnitPattern;
238 
239     /*
240      * The plural rule is used to format currency plural name,
241      * for example: "3.00 US Dollars".
242      * If there are 3 currency signs in the currency patttern,
243      * the 3 currency signs will be replaced by currency plural name.
244      */
245     PluralRules* fPluralRules;
246 
247     // locale
248     Locale* fLocale;
249 };
250 
251 
252 inline UBool
253 CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {              return !operator==(info);                                                   }
254 
255 U_NAMESPACE_END
256 
257 #endif /* #if !UCONFIG_NO_FORMATTING */
258 
259 #endif // _CURRPINFO
260 //eof
261