xref: /aosp_15_r20/external/icu/libicu/cts_headers/unicode/measfmt.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker **********************************************************************
5*0e209d39SAndroid Build Coastguard Worker * Copyright (c) 2004-2016, International Business Machines
6*0e209d39SAndroid Build Coastguard Worker * Corporation and others.  All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker **********************************************************************
8*0e209d39SAndroid Build Coastguard Worker * Author: Alan Liu
9*0e209d39SAndroid Build Coastguard Worker * Created: April 20, 2004
10*0e209d39SAndroid Build Coastguard Worker * Since: ICU 3.0
11*0e209d39SAndroid Build Coastguard Worker **********************************************************************
12*0e209d39SAndroid Build Coastguard Worker */
13*0e209d39SAndroid Build Coastguard Worker #ifndef MEASUREFORMAT_H
14*0e209d39SAndroid Build Coastguard Worker #define MEASUREFORMAT_H
15*0e209d39SAndroid Build Coastguard Worker 
16*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
17*0e209d39SAndroid Build Coastguard Worker 
18*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
19*0e209d39SAndroid Build Coastguard Worker 
20*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
21*0e209d39SAndroid Build Coastguard Worker 
22*0e209d39SAndroid Build Coastguard Worker #include "unicode/format.h"
23*0e209d39SAndroid Build Coastguard Worker #include "unicode/udat.h"
24*0e209d39SAndroid Build Coastguard Worker 
25*0e209d39SAndroid Build Coastguard Worker /**
26*0e209d39SAndroid Build Coastguard Worker  * \file
27*0e209d39SAndroid Build Coastguard Worker  * \brief C++ API: Compatibility APIs for measure formatting.
28*0e209d39SAndroid Build Coastguard Worker  */
29*0e209d39SAndroid Build Coastguard Worker 
30*0e209d39SAndroid Build Coastguard Worker /**
31*0e209d39SAndroid Build Coastguard Worker  * Constants for various widths.
32*0e209d39SAndroid Build Coastguard Worker  * There are 4 widths: Wide, Short, Narrow, Numeric.
33*0e209d39SAndroid Build Coastguard Worker  * For example, for English, when formatting "3 hours"
34*0e209d39SAndroid Build Coastguard Worker  * Wide is "3 hours"; short is "3 hrs"; narrow is "3h";
35*0e209d39SAndroid Build Coastguard Worker  * formatting "3 hours 17 minutes" as numeric give "3:17"
36*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 53
37*0e209d39SAndroid Build Coastguard Worker  */
38*0e209d39SAndroid Build Coastguard Worker enum UMeasureFormatWidth {
39*0e209d39SAndroid Build Coastguard Worker 
40*0e209d39SAndroid Build Coastguard Worker     // Wide, short, and narrow must be first and in this order.
41*0e209d39SAndroid Build Coastguard Worker     /**
42*0e209d39SAndroid Build Coastguard Worker      * Spell out measure units.
43*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
44*0e209d39SAndroid Build Coastguard Worker      */
45*0e209d39SAndroid Build Coastguard Worker     UMEASFMT_WIDTH_WIDE,
46*0e209d39SAndroid Build Coastguard Worker 
47*0e209d39SAndroid Build Coastguard Worker     /**
48*0e209d39SAndroid Build Coastguard Worker      * Abbreviate measure units.
49*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
50*0e209d39SAndroid Build Coastguard Worker      */
51*0e209d39SAndroid Build Coastguard Worker     UMEASFMT_WIDTH_SHORT,
52*0e209d39SAndroid Build Coastguard Worker 
53*0e209d39SAndroid Build Coastguard Worker     /**
54*0e209d39SAndroid Build Coastguard Worker      * Use symbols for measure units when possible.
55*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
56*0e209d39SAndroid Build Coastguard Worker      */
57*0e209d39SAndroid Build Coastguard Worker     UMEASFMT_WIDTH_NARROW,
58*0e209d39SAndroid Build Coastguard Worker 
59*0e209d39SAndroid Build Coastguard Worker     /**
60*0e209d39SAndroid Build Coastguard Worker      * Completely omit measure units when possible. For example, format
61*0e209d39SAndroid Build Coastguard Worker      * '5 hours, 37 minutes' as '5:37'
62*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
63*0e209d39SAndroid Build Coastguard Worker      */
64*0e209d39SAndroid Build Coastguard Worker     UMEASFMT_WIDTH_NUMERIC,
65*0e209d39SAndroid Build Coastguard Worker 
66*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
67*0e209d39SAndroid Build Coastguard Worker     /**
68*0e209d39SAndroid Build Coastguard Worker      * One more than the highest normal UMeasureFormatWidth value.
69*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
70*0e209d39SAndroid Build Coastguard Worker      */
71*0e209d39SAndroid Build Coastguard Worker     UMEASFMT_WIDTH_COUNT = 4
72*0e209d39SAndroid Build Coastguard Worker #endif  // U_HIDE_DEPRECATED_API
73*0e209d39SAndroid Build Coastguard Worker };
74*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 53 */
75*0e209d39SAndroid Build Coastguard Worker typedef enum UMeasureFormatWidth UMeasureFormatWidth;
76*0e209d39SAndroid Build Coastguard Worker 
77*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
78*0e209d39SAndroid Build Coastguard Worker 
79*0e209d39SAndroid Build Coastguard Worker class Measure;
80*0e209d39SAndroid Build Coastguard Worker class MeasureUnit;
81*0e209d39SAndroid Build Coastguard Worker class NumberFormat;
82*0e209d39SAndroid Build Coastguard Worker class PluralRules;
83*0e209d39SAndroid Build Coastguard Worker class MeasureFormatCacheData;
84*0e209d39SAndroid Build Coastguard Worker class SharedNumberFormat;
85*0e209d39SAndroid Build Coastguard Worker class SharedPluralRules;
86*0e209d39SAndroid Build Coastguard Worker class QuantityFormatter;
87*0e209d39SAndroid Build Coastguard Worker class SimpleFormatter;
88*0e209d39SAndroid Build Coastguard Worker class ListFormatter;
89*0e209d39SAndroid Build Coastguard Worker class DateFormat;
90*0e209d39SAndroid Build Coastguard Worker 
91*0e209d39SAndroid Build Coastguard Worker /**
92*0e209d39SAndroid Build Coastguard Worker  * <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if
93*0e209d39SAndroid Build Coastguard Worker  * numberformatter.h fits their use case.  Although not deprecated, this header
94*0e209d39SAndroid Build Coastguard Worker  * is provided for backwards compatibility only, and has much more limited
95*0e209d39SAndroid Build Coastguard Worker  * capabilities.
96*0e209d39SAndroid Build Coastguard Worker  *
97*0e209d39SAndroid Build Coastguard Worker  * @see Format
98*0e209d39SAndroid Build Coastguard Worker  * @author Alan Liu
99*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 3.0
100*0e209d39SAndroid Build Coastguard Worker  */
101*0e209d39SAndroid Build Coastguard Worker class U_I18N_API MeasureFormat : public Format {
102*0e209d39SAndroid Build Coastguard Worker  public:
103*0e209d39SAndroid Build Coastguard Worker     using Format::parseObject;
104*0e209d39SAndroid Build Coastguard Worker     using Format::format;
105*0e209d39SAndroid Build Coastguard Worker 
106*0e209d39SAndroid Build Coastguard Worker     /**
107*0e209d39SAndroid Build Coastguard Worker      * Constructor.
108*0e209d39SAndroid Build Coastguard Worker      * <p>
109*0e209d39SAndroid Build Coastguard Worker      * <strong>NOTE:</strong> New users are strongly encouraged to use
110*0e209d39SAndroid Build Coastguard Worker      * {@link icu::number::NumberFormatter} instead of NumberFormat.
111*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
112*0e209d39SAndroid Build Coastguard Worker      */
113*0e209d39SAndroid Build Coastguard Worker     MeasureFormat(
114*0e209d39SAndroid Build Coastguard Worker             const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
115*0e209d39SAndroid Build Coastguard Worker 
116*0e209d39SAndroid Build Coastguard Worker     /**
117*0e209d39SAndroid Build Coastguard Worker      * Constructor.
118*0e209d39SAndroid Build Coastguard Worker      * <p>
119*0e209d39SAndroid Build Coastguard Worker      * <strong>NOTE:</strong> New users are strongly encouraged to use
120*0e209d39SAndroid Build Coastguard Worker      * {@link icu::number::NumberFormatter} instead of NumberFormat.
121*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
122*0e209d39SAndroid Build Coastguard Worker      */
123*0e209d39SAndroid Build Coastguard Worker     MeasureFormat(
124*0e209d39SAndroid Build Coastguard Worker             const Locale &locale,
125*0e209d39SAndroid Build Coastguard Worker             UMeasureFormatWidth width,
126*0e209d39SAndroid Build Coastguard Worker             NumberFormat *nfToAdopt,
127*0e209d39SAndroid Build Coastguard Worker             UErrorCode &status);
128*0e209d39SAndroid Build Coastguard Worker 
129*0e209d39SAndroid Build Coastguard Worker     /**
130*0e209d39SAndroid Build Coastguard Worker      * Copy constructor.
131*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
132*0e209d39SAndroid Build Coastguard Worker      */
133*0e209d39SAndroid Build Coastguard Worker     MeasureFormat(const MeasureFormat &other);
134*0e209d39SAndroid Build Coastguard Worker 
135*0e209d39SAndroid Build Coastguard Worker     /**
136*0e209d39SAndroid Build Coastguard Worker      * Assignment operator.
137*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
138*0e209d39SAndroid Build Coastguard Worker      */
139*0e209d39SAndroid Build Coastguard Worker     MeasureFormat &operator=(const MeasureFormat &rhs);
140*0e209d39SAndroid Build Coastguard Worker 
141*0e209d39SAndroid Build Coastguard Worker     /**
142*0e209d39SAndroid Build Coastguard Worker      * Destructor.
143*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
144*0e209d39SAndroid Build Coastguard Worker      */
145*0e209d39SAndroid Build Coastguard Worker     virtual ~MeasureFormat();
146*0e209d39SAndroid Build Coastguard Worker 
147*0e209d39SAndroid Build Coastguard Worker     /**
148*0e209d39SAndroid Build Coastguard Worker      * Return true if given Format objects are semantically equal.
149*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
150*0e209d39SAndroid Build Coastguard Worker      */
151*0e209d39SAndroid Build Coastguard Worker     virtual bool operator==(const Format &other) const override;
152*0e209d39SAndroid Build Coastguard Worker 
153*0e209d39SAndroid Build Coastguard Worker     /**
154*0e209d39SAndroid Build Coastguard Worker      * Clones this object polymorphically.
155*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
156*0e209d39SAndroid Build Coastguard Worker      */
157*0e209d39SAndroid Build Coastguard Worker     virtual MeasureFormat *clone() const override;
158*0e209d39SAndroid Build Coastguard Worker 
159*0e209d39SAndroid Build Coastguard Worker     /**
160*0e209d39SAndroid Build Coastguard Worker      * Formats object to produce a string.
161*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
162*0e209d39SAndroid Build Coastguard Worker      */
163*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString &format(
164*0e209d39SAndroid Build Coastguard Worker             const Formattable &obj,
165*0e209d39SAndroid Build Coastguard Worker             UnicodeString &appendTo,
166*0e209d39SAndroid Build Coastguard Worker             FieldPosition &pos,
167*0e209d39SAndroid Build Coastguard Worker             UErrorCode &status) const override;
168*0e209d39SAndroid Build Coastguard Worker 
169*0e209d39SAndroid Build Coastguard Worker #ifndef U_FORCE_HIDE_DRAFT_API
170*0e209d39SAndroid Build Coastguard Worker     /**
171*0e209d39SAndroid Build Coastguard Worker      * Parse a string to produce an object. This implementation sets
172*0e209d39SAndroid Build Coastguard Worker      * status to U_UNSUPPORTED_ERROR.
173*0e209d39SAndroid Build Coastguard Worker      *
174*0e209d39SAndroid Build Coastguard Worker      * @draft ICU 53
175*0e209d39SAndroid Build Coastguard Worker      */
176*0e209d39SAndroid Build Coastguard Worker     virtual void parseObject(
177*0e209d39SAndroid Build Coastguard Worker             const UnicodeString &source,
178*0e209d39SAndroid Build Coastguard Worker             Formattable &reslt,
179*0e209d39SAndroid Build Coastguard Worker             ParsePosition &pos) const override;
180*0e209d39SAndroid Build Coastguard Worker #endif  // U_FORCE_HIDE_DRAFT_API
181*0e209d39SAndroid Build Coastguard Worker 
182*0e209d39SAndroid Build Coastguard Worker     /**
183*0e209d39SAndroid Build Coastguard Worker      * Formats measure objects to produce a string. An example of such a
184*0e209d39SAndroid Build Coastguard Worker      * formatted string is 3 meters, 3.5 centimeters. Measure objects appear
185*0e209d39SAndroid Build Coastguard Worker      * in the formatted string in the same order they appear in the "measures"
186*0e209d39SAndroid Build Coastguard Worker      * array. The NumberFormat of this object is used only to format the amount
187*0e209d39SAndroid Build Coastguard Worker      * of the very last measure. The other amounts are formatted with zero
188*0e209d39SAndroid Build Coastguard Worker      * decimal places while rounding toward zero.
189*0e209d39SAndroid Build Coastguard Worker      * @param measures array of measure objects.
190*0e209d39SAndroid Build Coastguard Worker      * @param measureCount the number of measure objects.
191*0e209d39SAndroid Build Coastguard Worker      * @param appendTo formatted string appended here.
192*0e209d39SAndroid Build Coastguard Worker      * @param pos the field position.
193*0e209d39SAndroid Build Coastguard Worker      * @param status the error.
194*0e209d39SAndroid Build Coastguard Worker      * @return appendTo reference
195*0e209d39SAndroid Build Coastguard Worker      *
196*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
197*0e209d39SAndroid Build Coastguard Worker      */
198*0e209d39SAndroid Build Coastguard Worker     UnicodeString &formatMeasures(
199*0e209d39SAndroid Build Coastguard Worker             const Measure *measures,
200*0e209d39SAndroid Build Coastguard Worker             int32_t measureCount,
201*0e209d39SAndroid Build Coastguard Worker             UnicodeString &appendTo,
202*0e209d39SAndroid Build Coastguard Worker             FieldPosition &pos,
203*0e209d39SAndroid Build Coastguard Worker             UErrorCode &status) const;
204*0e209d39SAndroid Build Coastguard Worker 
205*0e209d39SAndroid Build Coastguard Worker     /**
206*0e209d39SAndroid Build Coastguard Worker      * Formats a single measure per unit. An example of such a
207*0e209d39SAndroid Build Coastguard Worker      * formatted string is 3.5 meters per second.
208*0e209d39SAndroid Build Coastguard Worker      * @param measure The measure object. In above example, 3.5 meters.
209*0e209d39SAndroid Build Coastguard Worker      * @param perUnit The per unit. In above example, it is
210*0e209d39SAndroid Build Coastguard Worker      *        `*%MeasureUnit::createSecond(status)`.
211*0e209d39SAndroid Build Coastguard Worker      * @param appendTo formatted string appended here.
212*0e209d39SAndroid Build Coastguard Worker      * @param pos the field position.
213*0e209d39SAndroid Build Coastguard Worker      * @param status the error.
214*0e209d39SAndroid Build Coastguard Worker      * @return appendTo reference
215*0e209d39SAndroid Build Coastguard Worker      *
216*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 55
217*0e209d39SAndroid Build Coastguard Worker      */
218*0e209d39SAndroid Build Coastguard Worker     UnicodeString &formatMeasurePerUnit(
219*0e209d39SAndroid Build Coastguard Worker             const Measure &measure,
220*0e209d39SAndroid Build Coastguard Worker             const MeasureUnit &perUnit,
221*0e209d39SAndroid Build Coastguard Worker             UnicodeString &appendTo,
222*0e209d39SAndroid Build Coastguard Worker             FieldPosition &pos,
223*0e209d39SAndroid Build Coastguard Worker             UErrorCode &status) const;
224*0e209d39SAndroid Build Coastguard Worker 
225*0e209d39SAndroid Build Coastguard Worker     /**
226*0e209d39SAndroid Build Coastguard Worker      * Gets the display name of the specified {@link MeasureUnit} corresponding to the current
227*0e209d39SAndroid Build Coastguard Worker      * locale and format width.
228*0e209d39SAndroid Build Coastguard Worker      * @param unit  The unit for which to get a display name.
229*0e209d39SAndroid Build Coastguard Worker      * @param status the error.
230*0e209d39SAndroid Build Coastguard Worker      * @return  The display name in the locale and width specified in
231*0e209d39SAndroid Build Coastguard Worker      *          the MeasureFormat constructor, or null if there is no display name available
232*0e209d39SAndroid Build Coastguard Worker      *          for the specified unit.
233*0e209d39SAndroid Build Coastguard Worker      *
234*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 58
235*0e209d39SAndroid Build Coastguard Worker      */
236*0e209d39SAndroid Build Coastguard Worker     UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const;
237*0e209d39SAndroid Build Coastguard Worker 
238*0e209d39SAndroid Build Coastguard Worker 
239*0e209d39SAndroid Build Coastguard Worker     /**
240*0e209d39SAndroid Build Coastguard Worker      * Return a formatter for CurrencyAmount objects in the given
241*0e209d39SAndroid Build Coastguard Worker      * locale.
242*0e209d39SAndroid Build Coastguard Worker      * <p>
243*0e209d39SAndroid Build Coastguard Worker      * <strong>NOTE:</strong> New users are strongly encouraged to use
244*0e209d39SAndroid Build Coastguard Worker      * {@link icu::number::NumberFormatter} instead of NumberFormat.
245*0e209d39SAndroid Build Coastguard Worker      * @param locale desired locale
246*0e209d39SAndroid Build Coastguard Worker      * @param ec input-output error code
247*0e209d39SAndroid Build Coastguard Worker      * @return a formatter object, or nullptr upon error
248*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
249*0e209d39SAndroid Build Coastguard Worker      */
250*0e209d39SAndroid Build Coastguard Worker     static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
251*0e209d39SAndroid Build Coastguard Worker                                                UErrorCode& ec);
252*0e209d39SAndroid Build Coastguard Worker 
253*0e209d39SAndroid Build Coastguard Worker     /**
254*0e209d39SAndroid Build Coastguard Worker      * Return a formatter for CurrencyAmount objects in the default
255*0e209d39SAndroid Build Coastguard Worker      * locale.
256*0e209d39SAndroid Build Coastguard Worker      * <p>
257*0e209d39SAndroid Build Coastguard Worker      * <strong>NOTE:</strong> New users are strongly encouraged to use
258*0e209d39SAndroid Build Coastguard Worker      * {@link icu::number::NumberFormatter} instead of NumberFormat.
259*0e209d39SAndroid Build Coastguard Worker      * @param ec input-output error code
260*0e209d39SAndroid Build Coastguard Worker      * @return a formatter object, or nullptr upon error
261*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
262*0e209d39SAndroid Build Coastguard Worker      */
263*0e209d39SAndroid Build Coastguard Worker     static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
264*0e209d39SAndroid Build Coastguard Worker 
265*0e209d39SAndroid Build Coastguard Worker     /**
266*0e209d39SAndroid Build Coastguard Worker      * Return the class ID for this class. This is useful only for comparing to
267*0e209d39SAndroid Build Coastguard Worker      * a return value from getDynamicClassID(). For example:
268*0e209d39SAndroid Build Coastguard Worker      * <pre>
269*0e209d39SAndroid Build Coastguard Worker      * .   Base* polymorphic_pointer = createPolymorphicObject();
270*0e209d39SAndroid Build Coastguard Worker      * .   if (polymorphic_pointer->getDynamicClassID() ==
271*0e209d39SAndroid Build Coastguard Worker      * .       erived::getStaticClassID()) ...
272*0e209d39SAndroid Build Coastguard Worker      * </pre>
273*0e209d39SAndroid Build Coastguard Worker      * @return          The class ID for all objects of this class.
274*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
275*0e209d39SAndroid Build Coastguard Worker      */
276*0e209d39SAndroid Build Coastguard Worker     static UClassID U_EXPORT2 getStaticClassID();
277*0e209d39SAndroid Build Coastguard Worker 
278*0e209d39SAndroid Build Coastguard Worker     /**
279*0e209d39SAndroid Build Coastguard Worker      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
280*0e209d39SAndroid Build Coastguard Worker      * method is to implement a simple version of RTTI, since not all C++
281*0e209d39SAndroid Build Coastguard Worker      * compilers support genuine RTTI. Polymorphic operator==() and clone()
282*0e209d39SAndroid Build Coastguard Worker      * methods call this method.
283*0e209d39SAndroid Build Coastguard Worker      *
284*0e209d39SAndroid Build Coastguard Worker      * @return          The class ID for this object. All objects of a
285*0e209d39SAndroid Build Coastguard Worker      *                  given class have the same class ID.  Objects of
286*0e209d39SAndroid Build Coastguard Worker      *                  other classes have different class IDs.
287*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
288*0e209d39SAndroid Build Coastguard Worker      */
289*0e209d39SAndroid Build Coastguard Worker     virtual UClassID getDynamicClassID() const override;
290*0e209d39SAndroid Build Coastguard Worker 
291*0e209d39SAndroid Build Coastguard Worker  protected:
292*0e209d39SAndroid Build Coastguard Worker     /**
293*0e209d39SAndroid Build Coastguard Worker      * Default constructor.
294*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
295*0e209d39SAndroid Build Coastguard Worker      */
296*0e209d39SAndroid Build Coastguard Worker     MeasureFormat();
297*0e209d39SAndroid Build Coastguard Worker 
298*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
299*0e209d39SAndroid Build Coastguard Worker 
300*0e209d39SAndroid Build Coastguard Worker     /**
301*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
302*0e209d39SAndroid Build Coastguard Worker      * Initialize or change MeasureFormat class from subclass.
303*0e209d39SAndroid Build Coastguard Worker      * @internal.
304*0e209d39SAndroid Build Coastguard Worker      */
305*0e209d39SAndroid Build Coastguard Worker     void initMeasureFormat(
306*0e209d39SAndroid Build Coastguard Worker             const Locale &locale,
307*0e209d39SAndroid Build Coastguard Worker             UMeasureFormatWidth width,
308*0e209d39SAndroid Build Coastguard Worker             NumberFormat *nfToAdopt,
309*0e209d39SAndroid Build Coastguard Worker             UErrorCode &status);
310*0e209d39SAndroid Build Coastguard Worker     /**
311*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
312*0e209d39SAndroid Build Coastguard Worker      * Allows subclass to change locale. Note that this method also changes
313*0e209d39SAndroid Build Coastguard Worker      * the NumberFormat object. Returns true if locale changed; false if no
314*0e209d39SAndroid Build Coastguard Worker      * change was made.
315*0e209d39SAndroid Build Coastguard Worker      * @internal.
316*0e209d39SAndroid Build Coastguard Worker      */
317*0e209d39SAndroid Build Coastguard Worker     UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status);
318*0e209d39SAndroid Build Coastguard Worker 
319*0e209d39SAndroid Build Coastguard Worker     /**
320*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
321*0e209d39SAndroid Build Coastguard Worker      * Let subclass change NumberFormat.
322*0e209d39SAndroid Build Coastguard Worker      * @internal.
323*0e209d39SAndroid Build Coastguard Worker      */
324*0e209d39SAndroid Build Coastguard Worker     void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
325*0e209d39SAndroid Build Coastguard Worker 
326*0e209d39SAndroid Build Coastguard Worker     /**
327*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
328*0e209d39SAndroid Build Coastguard Worker      * @internal.
329*0e209d39SAndroid Build Coastguard Worker      */
330*0e209d39SAndroid Build Coastguard Worker     const NumberFormat &getNumberFormatInternal() const;
331*0e209d39SAndroid Build Coastguard Worker 
332*0e209d39SAndroid Build Coastguard Worker     /**
333*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
334*0e209d39SAndroid Build Coastguard Worker      * Always returns the short form currency formatter.
335*0e209d39SAndroid Build Coastguard Worker      * @internal.
336*0e209d39SAndroid Build Coastguard Worker      */
337*0e209d39SAndroid Build Coastguard Worker     const NumberFormat& getCurrencyFormatInternal() const;
338*0e209d39SAndroid Build Coastguard Worker 
339*0e209d39SAndroid Build Coastguard Worker     /**
340*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
341*0e209d39SAndroid Build Coastguard Worker      * @internal.
342*0e209d39SAndroid Build Coastguard Worker      */
343*0e209d39SAndroid Build Coastguard Worker     const PluralRules &getPluralRules() const;
344*0e209d39SAndroid Build Coastguard Worker 
345*0e209d39SAndroid Build Coastguard Worker     /**
346*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
347*0e209d39SAndroid Build Coastguard Worker      * @internal.
348*0e209d39SAndroid Build Coastguard Worker      */
349*0e209d39SAndroid Build Coastguard Worker     Locale getLocale(UErrorCode &status) const;
350*0e209d39SAndroid Build Coastguard Worker 
351*0e209d39SAndroid Build Coastguard Worker     /**
352*0e209d39SAndroid Build Coastguard Worker      * ICU use only.
353*0e209d39SAndroid Build Coastguard Worker      * @internal.
354*0e209d39SAndroid Build Coastguard Worker      */
355*0e209d39SAndroid Build Coastguard Worker     const char *getLocaleID(UErrorCode &status) const;
356*0e209d39SAndroid Build Coastguard Worker 
357*0e209d39SAndroid Build Coastguard Worker #endif /* U_HIDE_INTERNAL_API */
358*0e209d39SAndroid Build Coastguard Worker 
359*0e209d39SAndroid Build Coastguard Worker  private:
360*0e209d39SAndroid Build Coastguard Worker     const MeasureFormatCacheData *cache;
361*0e209d39SAndroid Build Coastguard Worker     const SharedNumberFormat *numberFormat;
362*0e209d39SAndroid Build Coastguard Worker     const SharedPluralRules *pluralRules;
363*0e209d39SAndroid Build Coastguard Worker     UMeasureFormatWidth fWidth;
364*0e209d39SAndroid Build Coastguard Worker 
365*0e209d39SAndroid Build Coastguard Worker     // Declared outside of MeasureFormatSharedData because ListFormatter
366*0e209d39SAndroid Build Coastguard Worker     // objects are relatively cheap to copy; therefore, they don't need to be
367*0e209d39SAndroid Build Coastguard Worker     // shared across instances.
368*0e209d39SAndroid Build Coastguard Worker     ListFormatter *listFormatter;
369*0e209d39SAndroid Build Coastguard Worker 
370*0e209d39SAndroid Build Coastguard Worker     UnicodeString &formatMeasure(
371*0e209d39SAndroid Build Coastguard Worker         const Measure &measure,
372*0e209d39SAndroid Build Coastguard Worker         const NumberFormat &nf,
373*0e209d39SAndroid Build Coastguard Worker         UnicodeString &appendTo,
374*0e209d39SAndroid Build Coastguard Worker         FieldPosition &pos,
375*0e209d39SAndroid Build Coastguard Worker         UErrorCode &status) const;
376*0e209d39SAndroid Build Coastguard Worker 
377*0e209d39SAndroid Build Coastguard Worker     UnicodeString &formatMeasuresSlowTrack(
378*0e209d39SAndroid Build Coastguard Worker         const Measure *measures,
379*0e209d39SAndroid Build Coastguard Worker         int32_t measureCount,
380*0e209d39SAndroid Build Coastguard Worker         UnicodeString& appendTo,
381*0e209d39SAndroid Build Coastguard Worker         FieldPosition& pos,
382*0e209d39SAndroid Build Coastguard Worker         UErrorCode& status) const;
383*0e209d39SAndroid Build Coastguard Worker 
384*0e209d39SAndroid Build Coastguard Worker     UnicodeString &formatNumeric(
385*0e209d39SAndroid Build Coastguard Worker         const Formattable *hms,  // always length 3: [0] is hour; [1] is
386*0e209d39SAndroid Build Coastguard Worker                                  // minute; [2] is second.
387*0e209d39SAndroid Build Coastguard Worker         int32_t bitMap,   // 1=hour set, 2=minute set, 4=second set
388*0e209d39SAndroid Build Coastguard Worker         UnicodeString &appendTo,
389*0e209d39SAndroid Build Coastguard Worker         UErrorCode &status) const;
390*0e209d39SAndroid Build Coastguard Worker };
391*0e209d39SAndroid Build Coastguard Worker 
392*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
393*0e209d39SAndroid Build Coastguard Worker 
394*0e209d39SAndroid Build Coastguard Worker #endif // #if !UCONFIG_NO_FORMATTING
395*0e209d39SAndroid Build Coastguard Worker 
396*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */
397*0e209d39SAndroid Build Coastguard Worker 
398*0e209d39SAndroid Build Coastguard Worker #endif // #ifndef MEASUREFORMAT_H
399