Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/intl/icu/source/i18n/unicode/currpinf.h
Line
Count
Source (jump to first uncovered line)
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-2015, International Business Machines Corporation and         *
6
 * others. All Rights Reserved.                                                *
7
 *******************************************************************************
8
 */
9
#ifndef CURRPINF_H
10
#define CURRPINF_H
11
12
#include "unicode/utypes.h"
13
14
/**
15
 * \file
16
 * \brief C++ API: Currency Plural Information used by Decimal Format
17
 */
18
19
#if !UCONFIG_NO_FORMATTING
20
21
#include "unicode/unistr.h"
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
    friend class DecimalFormatImpl;
197
198
    void initialize(const Locale& loc, UErrorCode& status);
199
   
200
    void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status);
201
202
    /*
203
     * delete hash table
204
     *
205
     * @param hTable  hash table to be deleted
206
     */
207
    void deleteHash(Hashtable* hTable);
208
209
210
    /*
211
     * initialize hash table
212
     *
213
     * @param status   output param set to success/failure code on exit
214
     * @return         hash table initialized
215
     */
216
    Hashtable* initHash(UErrorCode& status);
217
218
219
220
    /**
221
     * copy hash table
222
     *
223
     * @param source   the source to copy from
224
     * @param target   the target to copy to
225
     * @param status   error code
226
     */
227
    void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
228
229
    //-------------------- private data member ---------------------
230
    // map from plural count to currency plural pattern, for example
231
    // a plural pattern defined in "CurrencyUnitPatterns" is
232
    // "one{{0} {1}}", in which "one" is a plural count
233
    // and "{0} {1}" is a currency plural pattern".
234
    // The currency plural pattern saved in this mapping is the pattern
235
    // defined in "CurrencyUnitPattern" by replacing
236
    // {0} with the number format pattern,
237
    // and {1} with 3 currency sign.
238
    Hashtable* fPluralCountToCurrencyUnitPattern;
239
240
    /*
241
     * The plural rule is used to format currency plural name,
242
     * for example: "3.00 US Dollars".
243
     * If there are 3 currency signs in the currency patttern,
244
     * the 3 currency signs will be replaced by currency plural name.
245
     */
246
    PluralRules* fPluralRules;
247
248
    // locale
249
    Locale* fLocale;
250
};
251
252
253
inline UBool
254
0
CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {              return !operator==(info);                                                   }  
255
256
U_NAMESPACE_END
257
258
#endif /* #if !UCONFIG_NO_FORMATTING */
259
260
#endif // _CURRPINFO
261
//eof