1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
31b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert* Copyright (C) 1997-2015, International Business Machines Corporation and others.
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File NUMFMT.H
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History:
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   02/19/97    aliu        Converted from java.
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   03/18/97    clhuang     Updated per C++ implementation.
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   04/17/97    aliu        Changed DigitCount to int per code review.
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*    07/20/98    stephen        JDK 1.2 sync up. Added scientific support.
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                            Changed naming conventions to match C++ guidelines
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*                            Derecated Java style constants (eg, INTEGER_FIELD)
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef NUMFMT_H
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define NUMFMT_H
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \file
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C++ API: Abstract base class for all number formats.
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h"
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/format.h"
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unum.h" // UNumberFormatStyle
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h"
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/stringpiece.h"
39103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/curramt.h"
40fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#include "unicode/udisplaycontext.h"
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoclass NumberFormatTest;
43b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
46fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusclass SharedNumberFormat;
47fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass NumberFormatFactory;
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass StringEnumeration;
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Abstract base class for all number formats.  Provides interface for
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * formatting and parsing a number.  Also provides methods for
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * determining which locales have number formats, and what their names
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are.
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NumberFormat helps you to format and parse numbers for any locale.
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Your code can be completely independent of the locale conventions
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for decimal points, thousands-separators, or even the particular
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * decimal digits used, or whether the number format is even decimal.
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * To format a number for the current Locale, use one of the static
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * factory methods:
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    double myNumber = 7.0;
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UnicodeString myString;
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UErrorCode success = U_ZERO_ERROR;
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    NumberFormat* nf = NumberFormat::createInstance(success)
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    nf->format(myNumber, myString);
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    cout << " Example 1: " << myString << endl;
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Note that there are additional factory methods within subclasses of
788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * NumberFormat.
798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * <P>
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If you are formatting multiple numbers, it is more efficient to get
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the format and use it multiple times so that the system doesn't
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * have to fetch the information about the local language and country
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * conventions multiple times.
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     UnicodeString myString;
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     UErrorCode success = U_ZERO_ERROR;
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     nf = NumberFormat::createInstance( success );
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     int32_t a[] = { 123, 3333, -1234567 };
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     const int32_t a_len = sizeof(a) / sizeof(a[0]);
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     myString.remove();
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     for (int32_t i = 0; i < a_len; i++) {
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *         nf->format(a[i], myString);
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *         myString += " ; ";
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     }
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     cout << " Example 2: " << myString << endl;
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * To format a number for a different Locale, specify it in the
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * call to createInstance().
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     nf = NumberFormat::createInstance( Locale::FRENCH, success );
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can use a NumberFormat to parse also.
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UErrorCode success;
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    Formattable result(-999);  // initialized with error code
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    nf->parse(myString, result, success);
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Use createInstance to get the normal number format for that country.
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * There are other static factory methods available.  Use getCurrency
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to get the currency number format for that country.  Use getPercent
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to get a format for displaying percentages. With this format, a
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * fraction from 0.53 is displayed as 53%.
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Starting from ICU 4.2, you can use createInstance() by passing in a 'style'
12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * as parameter to get the correct instance.
12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For example,
123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * use createInstance(...kNumberStyle...) to get the normal number format,
12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * createInstance(...kPercentStyle...) to get a format for displaying
125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * percentage,
12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * createInstance(...kScientificStyle...) to get a format for displaying
127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * scientific number,
12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * createInstance(...kCurrencyStyle...) to get the currency number format,
129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * in which the currency is represented by its symbol, for example, "$3.00".
13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * createInstance(...kIsoCurrencyStyle...)  to get the currency number format,
131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * in which the currency is represented by its ISO code, for example "USD3.00".
132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * createInstance(...kPluralCurrencyStyle...) to get the currency number format,
133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * in which the currency is represented by its full name in plural format,
134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * for example, "3.00 US dollars" or "1.00 US dollar".
135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P>
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can also control the display of numbers with such methods as
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * getMinimumFractionDigits.  If you want even more control over the
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * format or parsing, or want to give your users more control, you can
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * try casting the NumberFormat you get from the factory methods to a
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * DecimalNumberFormat. This will work for the vast majority of
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * countries; just remember to put it in a try block in case you
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * encounter an unusual one.
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can also use forms of the parse and format methods with
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ParsePosition and FieldPosition to allow you to:
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <ul type=round>
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *   <li>(a) progressively parse through pieces of a string.
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *   <li>(b) align the decimal point and other areas.
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </ul>
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * For example, you can align numbers in two ways.
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If you are using a monospaced font with spacing for alignment, you
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * can pass the FieldPosition in your format call, with field =
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * INTEGER_FIELD. On output, getEndIndex will be set to the offset
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * between the last character of the integer and the decimal. Add
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (desiredSpaceCount - getEndIndex) spaces at the front of the
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string.
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If you are using proportional fonts, instead of padding with
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * spaces, measure the width of the string in pixels from the start to
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * getEndIndex.  Then move the pen by (desiredPixelWidth -
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * widthToAlignmentPoint) before drawing the text.  It also works
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * where there is no decimal, but possibly additional characters at
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the end, e.g. with parentheses in negative numbers: "(12)" for -12.
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <em>User subclasses are not supported.</em> While clients may write
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * subclasses, such code will not necessarily work and will not be
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * guaranteed to work stably from release to release.
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_I18N_API NumberFormat : public Format {
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    /**
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Alignment Field constants used to construct a FieldPosition object.
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Signifies that the position of the integer part or fraction part of
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * a formatted number should be returned.
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Note: as of ICU 4.4, the values in this enum have been extended to
18050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * support identification of all number format fields, not just those
18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * pertaining to alignment.
18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
183103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * These constants are provided for backwards compatibility only.
184103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * Please use the C style constants defined in the header file unum.h.
185103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     *
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see FieldPosition
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    enum EAlignmentFields {
190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kIntegerField = UNUM_INTEGER_FIELD,
192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
193103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kFractionField = UNUM_FRACTION_FIELD,
194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD,
196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD,
198103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kExponentSignField = UNUM_EXPONENT_SIGN_FIELD,
200103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
201103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kExponentField = UNUM_EXPONENT_FIELD,
202103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
203103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD,
204103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
205103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kCurrencyField = UNUM_CURRENCY_FIELD,
206103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kPercentField = UNUM_PERCENT_FIELD,
208103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kPermillField = UNUM_PERMILL_FIELD,
210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        kSignField = UNUM_SIGN_FIELD,
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * These constants are provided for backwards compatibility only.
215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * Please use the constants defined in the header file unum.h.
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
217103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
218103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        INTEGER_FIELD        = UNUM_INTEGER_FIELD,
219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /** @stable ICU 2.0 */
220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        FRACTION_FIELD       = UNUM_FRACTION_FIELD
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Destructor.
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual ~NumberFormat();
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return true if the given Format objects are semantically equal.
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Objects of different subclasses are considered unequal.
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return    true if the given Format objects are semantically equal.
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UBool operator==(const Format& other) const;
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    using Format::format;
23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format an object to produce a string.  This method handles
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Formattable objects with numeric types. If the Formattable
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * object type is not a numeric type, then it returns a failing
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * UErrorCode.
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param obj       The object to format.
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pos       On input: an alignment field, if desired.
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  On output: the offsets of the alignment field.
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status    Output param filled with success/failure status.
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(const Formattable& obj,
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UnicodeString& appendTo,
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  FieldPosition& pos,
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UErrorCode& status) const;
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format an object to produce a string.  This method handles
26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Formattable objects with numeric types. If the Formattable
26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * object type is not a numeric type, then it returns a failing
26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * UErrorCode.
26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param obj       The object to format.
26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.  Can be
27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  NULL.
27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
27427f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable 4.4
27550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(const Formattable& obj,
27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
27850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
28050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
28150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parse a string to produce an object.  This methods handles
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * parsing of numeric strings into Formattable objects with numeric
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * types.
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Before calling, set parse_pos.index to the offset you want to
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * start parsing at in the source. After calling, parse_pos.index
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * indicates the position after the successfully parsed text.  If
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * an error occurs, parse_pos.index is unchanged.
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * When parsing, leading whitespace is discarded (with successful
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * parse), while trailing whitespace is left as is.
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * See Format::parseObject() for more.
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param source    The string to be parsed into an object.
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param result    Formattable to be set to the parse result.
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  If parse fails, return contents are undefined.
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param parse_pos The position to start parsing at. Upon return
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  this param is set to the position after the
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  last character successfully parsed. If the
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  source is not parsed successfully, this param
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  will remain unchanged.
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          A newly created Formattable* object, or NULL
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  on failure.  The caller owns this and should
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  delete it when done.
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parseObject(const UnicodeString& source,
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             Formattable& result,
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             ParsePosition& parse_pos) const;
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format a double number. These methods call the NumberFormat
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * pure virtual format() methods with the default FieldPosition.
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param number    The value to be formatted.
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString& format(  double number,
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UnicodeString& appendTo) const;
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format a long number. These methods call the NumberFormat
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * pure virtual format() methods with the default FieldPosition.
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param number    The value to be formatted.
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString& format(  int32_t number,
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UnicodeString& appendTo) const;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format an int64 number. These methods call the NumberFormat
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * pure virtual format() methods with the default FieldPosition.
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param number    The value to be formatted.
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.8
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString& format(  int64_t number,
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UnicodeString& appendTo) const;
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format a double number. Concrete subclasses must implement
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * these pure virtual methods.
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param number    The value to be formatted.
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pos       On input: an alignment field, if desired.
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  On output: the offsets of the alignment field.
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(double number,
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UnicodeString& appendTo,
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  FieldPosition& pos) const = 0;
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
36854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * Format a double number. By default, the parent function simply
36954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * calls the base class and does not return an error status.
37054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * Therefore, the status may be ignored in some subclasses.
37154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *
37254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param number    The value to be formatted.
37354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param appendTo  Output parameter to receive result.
37454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *                  Result is appended to existing contents.
37554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param pos       On input: an alignment field, if desired.
37654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *                  On output: the offsets of the alignment field.
37754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param status    error status
37854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @return          Reference to 'appendTo' parameter.
37954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @internal
38054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     */
38154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    virtual UnicodeString& format(double number,
38254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  UnicodeString& appendTo,
38354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  FieldPosition& pos,
38454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  UErrorCode &status) const;
38554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /**
38650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format a double number. Subclasses must implement
38750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * this method.
38850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
38950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param number    The value to be formatted.
39050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
39250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.
39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Can be NULL.
39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
39727f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable 4.4
39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(double number,
40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format a long number. Concrete subclasses must implement
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * these pure virtual methods.
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param number    The value to be formatted.
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pos       On input: an alignment field, if desired.
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  On output: the offsets of the alignment field.
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(int32_t number,
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UnicodeString& appendTo,
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  FieldPosition& pos) const = 0;
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
42054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * Format a long number. Concrete subclasses may override
42154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * this function to provide status return.
42254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *
42354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param number    The value to be formatted.
42454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param appendTo  Output parameter to receive result.
42554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *                  Result is appended to existing contents.
42654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param pos       On input: an alignment field, if desired.
42754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *                  On output: the offsets of the alignment field.
42854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param status the output status.
42954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @return          Reference to 'appendTo' parameter.
43054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @internal
43154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    */
43254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    virtual UnicodeString& format(int32_t number,
43354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  UnicodeString& appendTo,
43454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  FieldPosition& pos,
43554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  UErrorCode &status) const;
43654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
43754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /**
43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format an int32 number. Subclasses must implement
43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * this method.
44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param number    The value to be formatted.
44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
44350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.
44650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Can be NULL.
44750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
44850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
44927f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable 4.4
45050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
45150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(int32_t number,
45250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
45350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
45550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format an int64 number. (Not abstract to retain compatibility
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * with earlier releases, however subclasses should override this
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * method as it just delegates to format(int32_t number...);
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param number    The value to be formatted.
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pos       On input: an alignment field, if desired.
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  On output: the offsets of the alignment field.
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.8
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(int64_t number,
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UnicodeString& appendTo,
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  FieldPosition& pos) const;
47154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
47254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /**
47354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * Format an int64 number. (Not abstract to retain compatibility
47454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * with earlier releases, however subclasses should override this
47554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * method as it just delegates to format(int32_t number...);
47654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *
47754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param number    The value to be formatted.
47854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param appendTo  Output parameter to receive result.
47954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *                  Result is appended to existing contents.
48054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @param pos       On input: an alignment field, if desired.
48154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     *                  On output: the offsets of the alignment field.
48254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @return          Reference to 'appendTo' parameter.
48354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * @internal
48454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    */
48554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    virtual UnicodeString& format(int64_t number,
48654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  UnicodeString& appendTo,
48754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  FieldPosition& pos,
48854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                  UErrorCode& status) const;
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
49050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format an int64 number. Subclasses must implement
49150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * this method.
49250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
49350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param number    The value to be formatted.
49450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
49550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
49650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
49750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.
49850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Can be NULL.
49950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
50050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
50127f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable 4.4
50250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
50350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(int64_t number,
50450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
50550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
50650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
50750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
50950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format a decimal number. Subclasses must implement
51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * this method.  The syntax of the unformatted number is a "numeric string"
51150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * as defined in the Decimal Arithmetic Specification, available at
51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * http://speleotrove.com/decimal
51350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
51450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param number    The unformatted number, as a string, to be formatted.
51550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
51650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
51750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
51850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.
51950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Can be NULL.
52050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
52150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
52227f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable 4.4
52350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
52450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(const StringPiece &number,
52550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
52650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
52750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
52850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic:
52950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
53050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format a decimal number.
53150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * The number is a DigitList wrapper onto a floating point decimal number.
53250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * The default implementation in NumberFormat converts the decimal number
53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * to a double and formats that.  Subclasses of NumberFormat that want
53450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * to specifically handle big decimal numbers must override this method.
53550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * class DecimalFormat does so.
53650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
53750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param number    The number, a DigitList format Decimal Floating Point.
53850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
53950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
54050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
54150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.
54250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
54350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
54450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @internal
54550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
54650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(const DigitList &number,
54750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
54950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
55050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
55150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
55250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format a decimal number.
55350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * The number is a DigitList wrapper onto a floating point decimal number.
55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * The default implementation in NumberFormat converts the decimal number
55550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * to a double and formats that.  Subclasses of NumberFormat that want
55650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * to specifically handle big decimal numbers must override this method.
55750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * class DecimalFormat does so.
55850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
55950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param number    The number, a DigitList format Decimal Floating Point.
56050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
56150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
56250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param pos       On input: an alignment field, if desired.
56350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  On output: the offsets of the alignment field.
56450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
56550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
56650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @internal
56750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
56850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(const DigitList &number,
56950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
57050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPosition& pos,
57150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
57250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
57350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic:
57450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   /**
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * Return a long if possible (e.g. within range LONG_MAX,
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * LONG_MAX], and with no decimals), otherwise a double.  If
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * IntegerOnly is set, will stop at a decimal point (or equivalent;
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * e.g. for rational numbers "1 2/3", will stop after the 1).
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * <P>
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * If no object can be parsed, index is unchanged, and NULL is
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * returned.
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * <P>
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * This is a pure virtual which concrete subclasses must implement.
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * @param text           The text to be parsed.
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * @param result         Formattable to be set to the parse result.
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *                       If parse fails, return contents are undefined.
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * @param parsePosition  The position to start parsing at on input.
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *                       On output, moved to after the last successfully
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *                       parse character. On parse failure, does not change.
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    * @stable ICU 2.0
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parse(const UnicodeString& text,
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       Formattable& result,
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       ParsePosition& parsePosition) const = 0;
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parse a string as a numeric value, and return a Formattable
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * numeric object. This method parses integers only if IntegerOnly
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * is set.
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param text          The text to be parsed.
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param result        Formattable to be set to the parse result.
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                      If parse fails, return contents are undefined.
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status        Output parameter set to a failure error code
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                      when a failure occurs.
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see                 NumberFormat::isParseIntegerOnly
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
61154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    virtual void parse(const UnicodeString& text,
61254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                       Formattable& result,
61354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                       UErrorCode& status) const;
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parses text from the given string as a currency amount.  Unlike
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the parse() method, this method will attempt to parse a generic
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * currency name, searching for a match of this object's locale's
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * currency display names, or for a 3-letter ISO currency code.
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * This method will fail if this format is not a currency format,
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * that is, if it does not contain the currency pattern symbol
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * (U+00A4) in its prefix or suffix.
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param text the string to parse
625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @param pos  input-output position; on input, the position within text
626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     *             to match; must have 0 <= pos.getIndex() < text.length();
627103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     *             on output, the position after the last matched character.
628103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     *             If the parse fails, the position in unchanged upon output.
629103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @return     if parse succeeds, a pointer to a newly-created CurrencyAmount
630103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     *             object (owned by the caller) containing information about
631103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     *             the parsed currency; if parse fails, this is NULL.
6328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius     * @stable ICU 49
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    virtual CurrencyAmount* parseCurrency(const UnicodeString& text,
635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                          ParsePosition& pos) const;
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return true if this format will parse numbers as integers
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * only.  For example in the English locale, with ParseIntegerOnly
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * true, the string "1234." would be parsed as the integer value
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * 1234 and parsing would stop at the "." character.  Of course,
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the exact format accepted by the parse operation is locale
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * dependant and determined by sub-classes of NumberFormat.
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return    true if this format will parse numbers as integers
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *            only.
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool isParseIntegerOnly(void) const;
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Sets whether or not numbers should be parsed as integers only.
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param value    set True, this format will parse numbers as integers
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                 only.
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see isParseIntegerOnly
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setParseIntegerOnly(UBool value);
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
660b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Sets whether lenient parsing should be enabled (it is off by default).
661b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     *
662b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @param enable <code>TRUE</code> if lenient parsing should be used,
663b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     *               <code>FALSE</code> otherwise.
664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable ICU 4.8
665b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
666b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    virtual void setLenient(UBool enable);
667b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
668b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
669b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Returns whether lenient parsing is enabled (it is off by default).
670b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     *
671b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @return <code>TRUE</code> if lenient parsing is enabled,
672b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     *         <code>FALSE</code> otherwise.
673b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @see #setLenient
674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable ICU 4.8
675b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
676b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    virtual UBool isLenient(void) const;
677b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
678b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the default number format for the current default
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * locale.  The default format is one of the styles provided by
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the other factory methods: getNumberInstance,
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * getCurrencyInstance or getPercentInstance.  Exactly which one
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * is locale dependant.
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the default number format for the specified locale.
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * The default format is one of the styles provided by the other
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * factory methods: getNumberInstance, getCurrencyInstance or
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * getPercentInstance.  Exactly which one is locale dependant.
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param inLocale    the given locale.
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                        UErrorCode&);
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru     * Creates the specified decimal format style of the desired locale.
701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru     * @param desiredLocale    the given locale.
702b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @param style            the given style.
703b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @param errorCode        Output param filled with success/failure status.
704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru     * @return                 A new NumberFormat instance.
705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable ICU 4.8
706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru     */
707b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale,
708b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                                                  UNumberFormatStyle style,
709b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                                                  UErrorCode& errorCode);
710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
711fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef U_HIDE_INTERNAL_API
712fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
713fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    /**
714fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * ICU use only.
715fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Creates NumberFormat instance without using the cache.
716fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @internal
717fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     */
718fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static NumberFormat* internalCreateInstance(
719fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            const Locale& desiredLocale,
720fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UNumberFormatStyle style,
721fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UErrorCode& errorCode);
722fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
723fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    /**
724fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * ICU use only.
725fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Returns handle to the shared, cached NumberFormat instance for given
726fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * locale. On success, caller must call removeRef() on returned value
727fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * once it is done with the shared instance.
728fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @internal
729fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     */
730fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const SharedNumberFormat* U_EXPORT2 createSharedInstance(
731fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            const Locale& inLocale, UNumberFormatStyle style, UErrorCode& status);
732fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
733f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#endif  /* U_HIDE_INTERNAL_API */
734fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    /**
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a currency format for the current default locale.
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a currency format for the specified locale.
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param inLocale    the given locale.
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                UErrorCode&);
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a percentage format for the current default locale.
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a percentage format for the specified locale.
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param inLocale    the given locale.
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                               UErrorCode&);
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a scientific format for the current default locale.
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a scientific format for the specified locale.
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param inLocale    the given locale.
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                                UErrorCode&);
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Get the set of Locales for which NumberFormats are installed.
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param count    Output param to receive the size of the locales
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Register a new NumberFormatFactory.  The factory will be adopted.
787fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Because ICU may choose to cache NumberFormat objects internally,
788fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * this must be called at application startup, prior to any calls to
789fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * NumberFormat::createInstance to avoid undefined behavior.
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param toAdopt the NumberFormatFactory instance to be adopted
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status the in/out status code, no special meanings are assigned
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return a registry key that can be used to unregister this factory
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Unregister a previously-registered NumberFormatFactory using the key returned from the
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * register call.  Key becomes invalid after a successful call and should not be used again.
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * The NumberFormatFactory corresponding to the key will be deleted.
801fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Because ICU may choose to cache NumberFormat objects internally,
802fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * this should be called during application shutdown, after all calls to
803fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * NumberFormat::createInstance to avoid undefined behavior.
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param key the registry key returned by a previous call to registerFactory
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status the in/out status code, no special meanings are assigned
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return TRUE if the factory for the key was successfully unregistered
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return a StringEnumeration over the locales available at the time of the call,
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * including registered locales.
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return a StringEnumeration over the locales available at the time of the call
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* UCONFIG_NO_SERVICE */
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns true if grouping is used in this format. For example,
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * in the English locale, with grouping on, the number 1234567
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * might be formatted as "1,234,567". The grouping separator as
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * well as the size of each group is locale dependant and is
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * determined by sub-classes of NumberFormat.
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see setGroupingUsed
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool isGroupingUsed(void) const;
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Set whether or not grouping will be used in this format.
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param newValue    True, grouping will be used in this format.
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see getGroupingUsed
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setGroupingUsed(UBool newValue);
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the maximum number of digits allowed in the integer portion of a
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number.
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return     the maximum number of digits allowed in the integer portion of a
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *             number.
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see setMaximumIntegerDigits
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t getMaximumIntegerDigits(void) const;
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Sets the maximum number of digits allowed in the integer portion of a
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number. maximumIntegerDigits must be >= minimumIntegerDigits.  If the
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * new value for maximumIntegerDigits is less than the current value
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * of minimumIntegerDigits, then minimumIntegerDigits will also be set to
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the new value.
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param newValue    the new value for the maximum number of digits
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                    allowed in the integer portion of a number.
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see getMaximumIntegerDigits
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setMaximumIntegerDigits(int32_t newValue);
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the minimum number of digits allowed in the integer portion of a
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number.
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return    the minimum number of digits allowed in the integer portion of a
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *            number.
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see setMinimumIntegerDigits
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t getMinimumIntegerDigits(void) const;
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Sets the minimum number of digits allowed in the integer portion of a
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number. minimumIntegerDigits must be &lt;= maximumIntegerDigits.  If the
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * new value for minimumIntegerDigits exceeds the current value
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * of maximumIntegerDigits, then maximumIntegerDigits will also be set to
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the new value.
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param newValue    the new value to be set.
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see getMinimumIntegerDigits
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setMinimumIntegerDigits(int32_t newValue);
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the maximum number of digits allowed in the fraction portion of a
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number.
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return    the maximum number of digits allowed in the fraction portion of a
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *            number.
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see setMaximumFractionDigits
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t getMaximumFractionDigits(void) const;
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Sets the maximum number of digits allowed in the fraction portion of a
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number. maximumFractionDigits must be >= minimumFractionDigits.  If the
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * new value for maximumFractionDigits is less than the current value
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * of minimumFractionDigits, then minimumFractionDigits will also be set to
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the new value.
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param newValue    the new value to be set.
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see getMaximumFractionDigits
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setMaximumFractionDigits(int32_t newValue);
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the minimum number of digits allowed in the fraction portion of a
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number.
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return    the minimum number of digits allowed in the fraction portion of a
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *            number.
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see setMinimumFractionDigits
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t getMinimumFractionDigits(void) const;
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Sets the minimum number of digits allowed in the fraction portion of a
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * number. minimumFractionDigits must be &lt;= maximumFractionDigits.   If the
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * new value for minimumFractionDigits exceeds the current value
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * of maximumFractionDigits, then maximumIntegerDigits will also be set to
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the new value
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param newValue    the new value to be set.
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @see getMinimumFractionDigits
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setMinimumFractionDigits(int32_t newValue);
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Sets the currency used to display currency
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * amounts.  This takes effect immediately, if this format is a
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * currency format.  If this format is not a currency format, then
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the currency is used if and when this object becomes a
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * currency format.
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param theCurrency a 3-letter ISO code indicating new currency
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * to use.  It need not be null-terminated.  May be the empty
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * string or NULL to indicate no currency.
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param ec input-output error code
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Gets the currency used to display currency
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * amounts.  This may be an empty string for some subclasses.
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return a 3-letter null-terminated ISO code indicating
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the currency in use, or a pointer to the empty string.
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar* getCurrency() const;
951f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
952fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    /**
953fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Set a particular UDisplayContext value in the formatter, such as
954fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * UDISPCTX_CAPITALIZATION_FOR_STANDALONE.
955fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @param value The UDisplayContext value to set.
956fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @param status Input/output status. If at entry this indicates a failure
957fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     *               status, the function will do nothing; otherwise this will be
958fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     *               updated with any new status from the function.
9591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert     * @stable ICU 53
960fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     */
961fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    virtual void setContext(UDisplayContext value, UErrorCode& status);
962fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
963fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    /**
964fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Get the formatter's UDisplayContext value for the specified UDisplayContextType,
965fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * such as UDISPCTX_TYPE_CAPITALIZATION.
966fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @param type The UDisplayContextType whose value to return
967fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @param status Input/output status. If at entry this indicates a failure
968fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     *               status, the function will do nothing; otherwise this will be
969fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     *               updated with any new status from the function.
970fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * @return The UDisplayContextValue for the specified type.
9711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert     * @stable ICU 53
972fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     */
973fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
974fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return the class ID for this class.  This is useful for
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * comparing to a return value from getDynamicClassID(). Note that,
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * because NumberFormat is an abstract base class, no fully constructed object
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * will have the class ID returned by NumberFormat::getStaticClassID().
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return The class ID for all objects of this class.
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static UClassID U_EXPORT2 getStaticClassID(void);
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns a unique class ID POLYMORPHICALLY.  Pure virtual override.
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * This method is to implement a simple version of RTTI, since not all
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * C++ compilers support genuine RTTI.  Polymorphic operator==() and
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * clone() methods call this method.
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return The class ID for this object. All objects of a
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * given class have the same class ID.  Objects of
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * other classes have different class IDs.
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UClassID getDynamicClassID(void) const = 0;
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprotected:
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Default constructor for subclass use only.
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat();
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Copy constructor.
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat(const NumberFormat&);
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Assignment operator.
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat& operator=(const NumberFormat&);
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Returns the currency in effect for this formatter.  Subclasses
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * should override this method as needed.  Unlike getCurrency(),
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * this method should never return "".
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @result output parameter for null-terminated result, which must
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * have a capacity of at least 4
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @internal
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#ifndef U_HIDE_INTERNAL_API
10318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    /**
10328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius     * Creates the specified number format style of the desired locale.
10338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius     * If mustBeDecimalFormat is TRUE, then the returned pointer is
10348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius     * either a DecimalFormat or it is NULL.
10358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius     * @internal
10368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius     */
10378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    static NumberFormat* makeInstance(const Locale& desiredLocale,
10388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                      UNumberFormatStyle style,
10398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                      UBool mustBeDecimalFormat,
10408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                      UErrorCode& errorCode);
10418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#endif  /* U_HIDE_INTERNAL_API */
10428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate:
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static UBool isStyleSupported(UNumberFormatStyle style);
1046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Creates the specified decimal format style of the desired locale.
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param desiredLocale    the given locale.
1050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @param style            the given style.
1051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @param errorCode        Output param filled with success/failure status.
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return                 A new NumberFormat instance.
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static NumberFormat* makeInstance(const Locale& desiredLocale,
1055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                                      UNumberFormatStyle style,
1056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                                      UErrorCode& errorCode);
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1058fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UBool       fGroupingUsed;
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t     fMaxIntegerDigits;
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t     fMinIntegerDigits;
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t     fMaxFractionDigits;
1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t     fMinFractionDigits;
106359d709d503bab6e2b61931737e662dd293b40578ccornelius
106459d709d503bab6e2b61931737e662dd293b40578ccornelius  protected:
106559d709d503bab6e2b61931737e662dd293b40578ccornelius    static const int32_t gDefaultMaxIntegerDigits;
106659d709d503bab6e2b61931737e662dd293b40578ccornelius    static const int32_t gDefaultMinIntegerDigits;
106759d709d503bab6e2b61931737e662dd293b40578ccornelius
106859d709d503bab6e2b61931737e662dd293b40578ccornelius  private:
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool      fParseIntegerOnly;
1070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool      fLenient; // TRUE => lenient parse is enabled
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ISO currency code
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar      fCurrency[4];
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1075fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UDisplayContext fCapitalizationContext;
1076fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    friend class ICUNumberFormatFactory; // access to makeInstance
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    friend class ICUNumberFormatService;
1079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    friend class ::NumberFormatTest;  // access to isStyleSupported()
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A NumberFormatFactory is used to register new number formats.  The factory
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * should be able to create any of the predefined formats for each locale it
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * supports.  When registered, the locales it supports extend or override the
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * locale already supported by ICU.
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.6
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_I18N_API NumberFormatFactory : public UObject {
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Destructor
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual ~NumberFormatFactory();
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return true if this factory will be visible.  Default is true.
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * If not visible, the locales supported by this factory will not
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * be listed by getAvailableLocales.
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UBool visible(void) const = 0;
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return the locale names directly supported by this factory.  The number of names
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * is returned in count;
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return a number format of the appropriate type.  If the locale
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * is not supported, return null.  If the locale is supported, but
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * the type is not provided by this service, return null.  Otherwise
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * return an appropriate instance of NumberFormat.
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A NumberFormatFactory that supports a single locale.  It can be visible or invisible.
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.6
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory {
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprotected:
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * True if the locale supported by this factory is visible.
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UBool _visible;
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * The locale supported by this factory, as a UnicodeString.
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString _id;
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual ~SimpleNumberFormatFactory();
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UBool visible(void) const;
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.6
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_SERVICE */
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UBool
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormat::isParseIntegerOnly() const
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return fParseIntegerOnly;
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1174b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoinline UBool
1175b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoNumberFormat::isLenient() const
1176b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{
1177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return fLenient;
1178b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
1179b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // _NUMFMT
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
1186