ICU 71.1 71.1

measfmt.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 **********************************************************************
5 * Copyright (c) 2004-2016, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 **********************************************************************
8 * Author: Alan Liu
9 * Created: April 20, 2004
10 * Since: ICU 3.0
11 **********************************************************************
12 */
13 #ifndef MEASUREFORMAT_H
14 #define MEASUREFORMAT_H
15
16 #include "unicode/utypes.h"
17
18 #if U_SHOW_CPLUSPLUS_API
19
20 #if !UCONFIG_NO_FORMATTING
21
22 #include "unicode/format.h"
23 #include "unicode/udat.h"
24
38 enum UMeasureFormatWidth {
39
40 // Wide, short, and narrow must be first and in this order.
45 UMEASFMT_WIDTH_WIDE,
46
51 UMEASFMT_WIDTH_SHORT,
52
57 UMEASFMT_WIDTH_NARROW,
58
64 UMEASFMT_WIDTH_NUMERIC,
65
66 #ifndef U_HIDE_DEPRECATED_API
67
71 UMEASFMT_WIDTH_COUNT = 4
72 #endif // U_HIDE_DEPRECATED_API
73 };
75 typedef enum UMeasureFormatWidth UMeasureFormatWidth;
76
77 U_NAMESPACE_BEGIN
78
79 class Measure;
80 class MeasureUnit;
81 class NumberFormat;
82 class PluralRules;
83 class MeasureFormatCacheData;
84 class SharedNumberFormat;
85 class SharedPluralRules;
86 class QuantityFormatter;
87 class SimpleFormatter;
88 class ListFormatter;
89 class DateFormat;
90
101 class U_I18N_API MeasureFormat : public Format {
102 public:
103 using Format::parseObject;
104 using Format::format;
105
113 MeasureFormat(
114 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
115
123 MeasureFormat(
124 const Locale &locale,
125 UMeasureFormatWidth width,
126 NumberFormat *nfToAdopt,
127 UErrorCode &status);
128
133 MeasureFormat(const MeasureFormat &other);
134
139 MeasureFormat &operator=(const MeasureFormat &rhs);
140
145 virtual ~MeasureFormat();
146
151 virtual bool operator==(const Format &other) const override;
152
157 virtual MeasureFormat *clone() const override;
158
163 virtual UnicodeString &format(
164 const Formattable &obj,
165 UnicodeString &appendTo,
166 FieldPosition &pos,
167 UErrorCode &status) const override;
168
169 #ifndef U_FORCE_HIDE_DRAFT_API
170
176 virtual void parseObject(
177 const UnicodeString &source,
178 Formattable &reslt,
179 ParsePosition &pos) const override;
180 #endif // U_FORCE_HIDE_DRAFT_API
181
198 UnicodeString &formatMeasures(
199 const Measure *measures,
200 int32_t measureCount,
201 UnicodeString &appendTo,
202 FieldPosition &pos,
203 UErrorCode &status) const;
204
218 UnicodeString &formatMeasurePerUnit(
219 const Measure &measure,
220 const MeasureUnit &perUnit,
221 UnicodeString &appendTo,
222 FieldPosition &pos,
223 UErrorCode &status) const;
224
236 UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const;
237
238
250 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
251 UErrorCode& ec);
252
263 static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
264
276 static UClassID U_EXPORT2 getStaticClassID(void);
277
289 virtual UClassID getDynamicClassID(void) const override;
290
291 protected:
296 MeasureFormat();
297
298 #ifndef U_HIDE_INTERNAL_API
299
305 void initMeasureFormat(
306 const Locale &locale,
307 UMeasureFormatWidth width,
308 NumberFormat *nfToAdopt,
309 UErrorCode &status);
317 UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status);
318
324 void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
325
330 const NumberFormat &getNumberFormatInternal() const;
331
337 const NumberFormat& getCurrencyFormatInternal() const;
338
343 const PluralRules &getPluralRules() const;
344
349 Locale getLocale(UErrorCode &status) const;
350
355 const char *getLocaleID(UErrorCode &status) const;
356
357 #endif /* U_HIDE_INTERNAL_API */
358
359 private:
360 const MeasureFormatCacheData *cache;
361 const SharedNumberFormat *numberFormat;
362 const SharedPluralRules *pluralRules;
363 UMeasureFormatWidth fWidth;
364
365 // Declared outside of MeasureFormatSharedData because ListFormatter
366 // objects are relatively cheap to copy; therefore, they don't need to be
367 // shared across instances.
368 ListFormatter *listFormatter;
369
370 UnicodeString &formatMeasure(
371 const Measure &measure,
372 const NumberFormat &nf,
373 UnicodeString &appendTo,
374 FieldPosition &pos,
375 UErrorCode &status) const;
376
377 UnicodeString &formatMeasuresSlowTrack(
378 const Measure *measures,
379 int32_t measureCount,
380 UnicodeString& appendTo,
381 FieldPosition& pos,
382 UErrorCode& status) const;
383
384 UnicodeString &formatNumeric(
385 const Formattable *hms, // always length 3: [0] is hour; [1] is
386 // minute; [2] is second.
387 int32_t bitMap, // 1=hour set, 2=minute set, 4=second set
388 UnicodeString &appendTo,
389 UErrorCode &status) const;
390 };
391
392 U_NAMESPACE_END
393
394 #endif // #if !UCONFIG_NO_FORMATTING
395
396 #endif /* U_SHOW_CPLUSPLUS_API */
397
398 #endif // #ifndef MEASUREFORMAT_H
icu::MeasureUnit
A unit such as length, mass, volume, currency, etc.
Definition: measunit.h:368
UMeasureFormatWidth
UMeasureFormatWidth
Constants for various widths.
Definition: measfmt.h:38
icu::FieldPosition
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:110
icu::NumberFormat
Definition: numfmt.h:175
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
UMEASFMT_WIDTH_NUMERIC
@ UMEASFMT_WIDTH_NUMERIC
Completely omit measure units when possible.
Definition: measfmt.h:64
U_I18N_API
#define U_I18N_API
Definition: utypes.h:301
UBool
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
icu::Format::parseObject
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
icu::Formattable
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:64
format.h
C++ API: Base class for all formats.
icu::PluralRules
Defines rules for mapping non-negative numeric values onto a small set of keywords.
Definition: plurrule.h:206
icu::Format::format
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
icu::Format
Base class for all formats.
Definition: format.h:98
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:295
icu::Format::operator=
Format & operator=(const Format &)
icu::Format::clone
virtual Format * clone() const =0
Clone this object polymorphically.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
UMEASFMT_WIDTH_COUNT
@ UMEASFMT_WIDTH_COUNT
One more than the highest normal UMeasureFormatWidth value.
Definition: measfmt.h:71
icu::UObject::getDynamicClassID
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
UMEASFMT_WIDTH_NARROW
@ UMEASFMT_WIDTH_NARROW
Use symbols for measure units when possible.
Definition: measfmt.h:57
icu::Format::getLocale
Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const
Get the locale for this format object.
icu::Measure
An amount of a specified unit, consisting of a number and a Unit.
Definition: measure.h:45
UMEASFMT_WIDTH_WIDE
@ UMEASFMT_WIDTH_WIDE
Spell out measure units.
Definition: measfmt.h:45
icu::MeasureFormat
Definition: measfmt.h:101
UMEASFMT_WIDTH_SHORT
@ UMEASFMT_WIDTH_SHORT
Abbreviate measure units.
Definition: measfmt.h:51
icu::Format::getLocaleID
const char * getLocaleID(ULocDataLocaleType type, UErrorCode &status) const
Get the locale for this format object.
icu::ListFormatter
An immutable class for formatting a list, using data from CLDR (or supplied separately).
Definition: listformatter.h:151
icu::ParsePosition
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:52
udat.h
C API: DateFormat.
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195
icu::Format::operator==
virtual bool operator==(const Format &other) const =0
Return true if the given Format objects are semantically equal.