Update readme.md
[openttd-joker.git] / lib / shared / include / unicode / currpinf.h
blob9ade99a09e59ada3ccb6aca811a4cbc3d955973f
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
10 #include "unicode/utypes.h"
12 /**
13 * \file
14 * \brief C++ API: Currency Plural Information used by Decimal Format
17 #if !UCONFIG_NO_FORMATTING
19 #include "unicode/unistr.h"
21 U_NAMESPACE_BEGIN
23 class Locale;
24 class PluralRules;
25 class Hashtable;
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.
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.
42 * @stable ICU 4.2
44 class U_I18N_API CurrencyPluralInfo : public UObject {
45 public:
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
52 CurrencyPluralInfo(UErrorCode& status);
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
60 CurrencyPluralInfo(const Locale& locale, UErrorCode& status);
62 /**
63 * Copy constructor
65 * @stable ICU 4.2
67 CurrencyPluralInfo(const CurrencyPluralInfo& info);
70 /**
71 * Assignment operator
73 * @stable ICU 4.2
75 CurrencyPluralInfo& operator=(const CurrencyPluralInfo& info);
78 /**
79 * Destructor
81 * @stable ICU 4.2
83 virtual ~CurrencyPluralInfo();
86 /**
87 * Equal operator.
89 * @stable ICU 4.2
91 UBool operator==(const CurrencyPluralInfo& info) const;
94 /**
95 * Not equal operator
97 * @stable ICU 4.2
99 UBool operator!=(const CurrencyPluralInfo& info) const;
103 * Clone
105 * @stable ICU 4.2
107 CurrencyPluralInfo* clone() const;
111 * Gets plural rules of this locale, used for currency plural format
113 * @return plural rule
114 * @stable ICU 4.2
116 const PluralRules* getPluralRules() const;
119 * Given a plural count, gets currency plural pattern of this locale,
120 * used for currency plural format
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
127 UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount,
128 UnicodeString& result) const;
131 * Get locale
133 * @return locale
134 * @stable ICU 4.2
136 const Locale& getLocale() const;
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.
145 * @param ruleDescription new plural rule description
146 * @param status output param set to success/failure code on exit
147 * @stable ICU 4.2
149 void setPluralRules(const UnicodeString& ruleDescription,
150 UErrorCode& status);
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.
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
165 void setCurrencyPluralPattern(const UnicodeString& pluralCount,
166 const UnicodeString& pattern,
167 UErrorCode& status);
170 * Set locale
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
176 void setLocale(const Locale& loc, UErrorCode& status);
179 * ICU "poor man's RTTI", returns a UClassID for the actual class.
181 * @stable ICU 4.2
183 virtual UClassID getDynamicClassID() const;
186 * ICU "poor man's RTTI", returns a UClassID for this class.
188 * @stable ICU 4.2
190 static UClassID U_EXPORT2 getStaticClassID();
192 private:
193 friend class DecimalFormat;
195 void initialize(const Locale& loc, UErrorCode& status);
197 void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status);
200 * delete hash table
202 * @param hTable hash table to be deleted
204 void deleteHash(Hashtable* hTable);
208 * initialize hash table
210 * @param status output param set to success/failure code on exit
211 * @return hash table initialized
213 Hashtable* initHash(UErrorCode& status);
218 * copy hash table
220 * @param source the source to copy from
221 * @param target the target to copy to
222 * @param status error code
224 void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
226 //-------------------- private data member ---------------------
227 // map from plural count to currency plural pattern, for example
228 // a plural pattern defined in "CurrencyUnitPatterns" is
229 // "one{{0} {1}}", in which "one" is a plural count
230 // and "{0} {1}" is a currency plural pattern".
231 // The currency plural pattern saved in this mapping is the pattern
232 // defined in "CurrencyUnitPattern" by replacing
233 // {0} with the number format pattern,
234 // and {1} with 3 currency sign.
235 Hashtable* fPluralCountToCurrencyUnitPattern;
238 * The plural rule is used to format currency plural name,
239 * for example: "3.00 US Dollars".
240 * If there are 3 currency signs in the currency patttern,
241 * the 3 currency signs will be replaced by currency plural name.
243 PluralRules* fPluralRules;
245 // locale
246 Locale* fLocale;
250 inline UBool
251 CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const { return !operator==(info); }
253 U_NAMESPACE_END
255 #endif /* #if !UCONFIG_NO_FORMATTING */
257 #endif // _CURRPINFO
258 //eof