ICU 70.1  70.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 
39 
40  // Wide, short, and narrow must be first and in this order.
46 
52 
58 
65 
66 #ifndef U_HIDE_DEPRECATED_API
72 #endif // U_HIDE_DEPRECATED_API
73 };
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 
102  public:
103  using Format::parseObject;
104  using Format::format;
105 
114  const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
115 
124  const Locale &locale,
125  UMeasureFormatWidth width,
126  NumberFormat *nfToAdopt,
127  UErrorCode &status);
128 
134 
140 
145  virtual ~MeasureFormat();
146 
151  virtual bool operator==(const Format &other) const override;
152 
157  virtual MeasureFormat *clone() const override;
158 
164  const Formattable &obj,
165  UnicodeString &appendTo,
166  FieldPosition &pos,
167  UErrorCode &status) const override;
168 
169 #ifndef U_FORCE_HIDE_DRAFT_API
176  virtual void parseObject(
177  const UnicodeString &source,
178  Formattable &reslt,
179  ParsePosition &pos) const override;
180 #endif // U_FORCE_HIDE_DRAFT_API
181 
199  const Measure *measures,
200  int32_t measureCount,
201  UnicodeString &appendTo,
202  FieldPosition &pos,
203  UErrorCode &status) const;
204 
219  const Measure &measure,
220  const MeasureUnit &perUnit,
221  UnicodeString &appendTo,
222  FieldPosition &pos,
223  UErrorCode &status) const;
224 
237 
238 
250  static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
251  UErrorCode& ec);
252 
264 
276  static UClassID U_EXPORT2 getStaticClassID(void);
277 
289  virtual UClassID getDynamicClassID(void) const override;
290 
291  protected:
297 
298 #ifndef U_HIDE_INTERNAL_API
299 
306  const Locale &locale,
307  UMeasureFormatWidth width,
308  NumberFormat *nfToAdopt,
309  UErrorCode &status);
318 
324  void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
325 
331 
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
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:110
Base class for all formats.
Definition: format.h:98
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:64
An immutable class for formatting a list, using data from CLDR (or supplied separately).
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195
static UClassID getStaticClassID(void)
Return the class ID for this class.
static MeasureFormat * createCurrencyFormat(UErrorCode &ec)
Return a formatter for CurrencyAmount objects in the default locale.
virtual void parseObject(const UnicodeString &source, Formattable &reslt, ParsePosition &pos) const override
Parse a string to produce an object.
MeasureFormat & operator=(const MeasureFormat &rhs)
Assignment operator.
MeasureFormat(const Locale &locale, UMeasureFormatWidth width, UErrorCode &status)
Constructor.
void initMeasureFormat(const Locale &locale, UMeasureFormatWidth width, NumberFormat *nfToAdopt, UErrorCode &status)
ICU use only.
UnicodeString & formatMeasurePerUnit(const Measure &measure, const MeasureUnit &perUnit, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Formats a single measure per unit.
const NumberFormat & getNumberFormatInternal() const
ICU use only.
MeasureFormat(const MeasureFormat &other)
Copy constructor.
const NumberFormat & getCurrencyFormatInternal() const
ICU use only.
virtual ~MeasureFormat()
Destructor.
UnicodeString getUnitDisplayName(const MeasureUnit &unit, UErrorCode &status) const
Gets the display name of the specified MeasureUnit corresponding to the current locale and format wid...
const char * getLocaleID(UErrorCode &status) const
ICU use only.
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Formats object to produce a string.
virtual MeasureFormat * clone() const override
Clones this object polymorphically.
static MeasureFormat * createCurrencyFormat(const Locale &locale, UErrorCode &ec)
Return a formatter for CurrencyAmount objects in the given locale.
const PluralRules & getPluralRules() const
ICU use only.
UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status)
ICU use only.
MeasureFormat()
Default constructor.
virtual bool operator==(const Format &other) const override
Return true if given Format objects are semantically equal.
void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status)
ICU use only.
UnicodeString & formatMeasures(const Measure *measures, int32_t measureCount, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Formats measure objects to produce a string.
Locale getLocale(UErrorCode &status) const
ICU use only.
MeasureFormat(const Locale &locale, UMeasureFormatWidth width, NumberFormat *nfToAdopt, UErrorCode &status)
Constructor.
virtual UClassID getDynamicClassID(void) const override
Returns a unique class ID POLYMORPHICALLY.
A unit such as length, mass, volume, currency, etc.
Definition: measunit.h:371
An amount of a specified unit, consisting of a number and a Unit.
Definition: measure.h:45
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:52
Defines rules for mapping non-negative numeric values onto a small set of keywords.
Definition: plurrule.h:206
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
C++ API: Base class for all formats.
UMeasureFormatWidth
Constants for various widths.
Definition: measfmt.h:38
@ UMEASFMT_WIDTH_NARROW
Use symbols for measure units when possible.
Definition: measfmt.h:57
@ UMEASFMT_WIDTH_WIDE
Spell out measure units.
Definition: measfmt.h:45
@ UMEASFMT_WIDTH_COUNT
One more than the highest normal UMeasureFormatWidth value.
Definition: measfmt.h:71
@ UMEASFMT_WIDTH_NUMERIC
Completely omit measure units when possible.
Definition: measfmt.h:64
@ UMEASFMT_WIDTH_SHORT
Abbreviate measure units.
Definition: measfmt.h:51
C API: DateFormat.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:301