ICU 56.1: measfmt.h Source File

ICU 56.1 56.1

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

measfmt.h
Go to the documentation of this file.
1 /*
2 **********************************************************************
3 * Copyright (c) 2004-2015, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
6 * Author: Alan Liu
7 * Created: April 20, 2004
8 * Since: ICU 3.0
9 **********************************************************************
10 */
11 #ifndef MEASUREFORMAT_H
12 #define MEASUREFORMAT_H
13
14 #include "unicode/utypes.h"
15
16 #if !UCONFIG_NO_FORMATTING
17
18 #include "unicode/format.h"
19 #include "unicode/udat.h"
20
34 enum UMeasureFormatWidth {
35
36 // Wide, short, and narrow must be first and in this order.
41 UMEASFMT_WIDTH_WIDE,
42
47 UMEASFMT_WIDTH_SHORT,
48
53 UMEASFMT_WIDTH_NARROW,
54
60 UMEASFMT_WIDTH_NUMERIC,
61
66 UMEASFMT_WIDTH_COUNT = 4
67 };
69 typedef enum UMeasureFormatWidth UMeasureFormatWidth;
70
71 U_NAMESPACE_BEGIN
72
73 class Measure;
74 class MeasureUnit;
75 class NumberFormat;
76 class PluralRules;
77 class MeasureFormatCacheData;
78 class SharedNumberFormat;
79 class SharedPluralRules;
80 class QuantityFormatter;
81 class SimplePatternFormatter;
82 class ListFormatter;
83 class DateFormat;
84
93 class U_I18N_API MeasureFormat : public Format {
94 public:
95 using Format::parseObject;
96 using Format::format;
97
102 MeasureFormat(
103 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
104
109 MeasureFormat(
110 const Locale &locale,
111 UMeasureFormatWidth width,
112 NumberFormat *nfToAdopt,
113 UErrorCode &status);
114
119 MeasureFormat(const MeasureFormat &other);
120
125 MeasureFormat &operator=(const MeasureFormat &rhs);
126
131 virtual ~MeasureFormat();
132
137 virtual UBool operator==(const Format &other) const;
138
143 virtual Format *clone() const;
144
149 virtual UnicodeString &format(
150 const Formattable &obj,
151 UnicodeString &appendTo,
152 FieldPosition &pos,
153 UErrorCode &status) const;
154
161 virtual void parseObject(
162 const UnicodeString &source,
163 Formattable &reslt,
164 ParsePosition &pos) const;
165
182 UnicodeString &formatMeasures(
183 const Measure *measures,
184 int32_t measureCount,
185 UnicodeString &appendTo,
186 FieldPosition &pos,
187 UErrorCode &status) const;
188
189 #ifndef U_HIDE_DRAFT_API
190
203 UnicodeString &formatMeasurePerUnit(
204 const Measure &measure,
205 const MeasureUnit &perUnit,
206 UnicodeString &appendTo,
207 FieldPosition &pos,
208 UErrorCode &status) const;
209
210 #endif /* U_HIDE_DRAFT_API */
211
220 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
221 UErrorCode& ec);
222
230 static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
231
243 static UClassID U_EXPORT2 getStaticClassID(void);
244
256 virtual UClassID getDynamicClassID(void) const;
257
258 protected:
263 MeasureFormat();
264
265 #ifndef U_HIDE_INTERNAL_API
266
272 void initMeasureFormat(
273 const Locale &locale,
274 UMeasureFormatWidth width,
275 NumberFormat *nfToAdopt,
276 UErrorCode &status);
284 UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status);
285
291 void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
292
297 const NumberFormat &getNumberFormat() const;
298
303 const PluralRules &getPluralRules() const;
304
309 Locale getLocale(UErrorCode &status) const;
310
315 const char *getLocaleID(UErrorCode &status) const;
316
317 #endif /* U_HIDE_INTERNAL_API */
318
319 private:
320 const MeasureFormatCacheData *cache;
321 const SharedNumberFormat *numberFormat;
322 const SharedPluralRules *pluralRules;
323 UMeasureFormatWidth width;
324
325 // Declared outside of MeasureFormatSharedData because ListFormatter
326 // objects are relatively cheap to copy; therefore, they don't need to be
327 // shared across instances.
328 ListFormatter *listFormatter;
329
330 const QuantityFormatter *getQuantityFormatter(
331 int32_t index,
332 int32_t widthIndex,
333 UErrorCode &status) const;
334
335 const SimplePatternFormatter *getPerUnitFormatter(
336 int32_t index,
337 int32_t widthIndex) const;
338
339 const SimplePatternFormatter *getPerFormatter(
340 int32_t widthIndex,
341 UErrorCode &status) const;
342
343 int32_t withPerUnitAndAppend(
344 const UnicodeString &formatted,
345 const MeasureUnit &perUnit,
346 UnicodeString &appendTo,
347 UErrorCode &status) const;
348
349 UnicodeString &formatMeasure(
350 const Measure &measure,
351 const NumberFormat &nf,
352 UnicodeString &appendTo,
353 FieldPosition &pos,
354 UErrorCode &status) const;
355
356 UnicodeString &formatMeasuresSlowTrack(
357 const Measure *measures,
358 int32_t measureCount,
359 UnicodeString& appendTo,
360 FieldPosition& pos,
361 UErrorCode& status) const;
362
363 UnicodeString &formatNumeric(
364 const Formattable *hms, // always length 3: [0] is hour; [1] is
365 // minute; [2] is second.
366 int32_t bitMap, // 1=hour set, 2=minute set, 4=second set
367 UnicodeString &appendTo,
368 UErrorCode &status) const;
369
370 UnicodeString &formatNumeric(
371 UDate date,
372 const DateFormat &dateFmt,
373 UDateFormatField smallestField,
374 const Formattable &smallestAmount,
375 UnicodeString &appendTo,
376 UErrorCode &status) const;
377 };
378
379 U_NAMESPACE_END
380
381 #endif // #if !UCONFIG_NO_FORMATTING
382 #endif // #ifndef MEASUREFORMAT_H
icu::Format
Base class for all formats.
Definition: format.h:94
UMeasureFormatWidth
UMeasureFormatWidth
Constants for various widths.
Definition: measfmt.h:34
icu::MeasureUnit
A unit such as length, mass, volume, currency, etc.
Definition: measunit.h:36
UMEASFMT_WIDTH_COUNT
Count of values in this enum.
Definition: measfmt.h:66
icu::Measure
An amount of a specified unit, consisting of a number and a Unit.
Definition: measure.h:41
icu::MeasureFormat
A formatter for measure objects.
Definition: measfmt.h:93
UMEASFMT_WIDTH_NARROW
Use symbols for measure units when possible.
Definition: measfmt.h:53
icu::NumberFormat
Abstract base class for all number formats.
Definition: numfmt.h:172
icu::UObject::getDynamicClassID
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
UDate
double UDate
Date and Time data type.
Definition: utypes.h:201
icu::Format::getLocale
Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const
Get the locale for this format object.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
icu::PluralRules
Defines rules for mapping non-negative numeric values onto a small set of keywords.
Definition: plurrule.h:192
format.h
C++ API: Base class for all formats.
icu::Format::getLocaleID
const char * getLocaleID(ULocDataLocaleType type, UErrorCode &status) const
Get the locale for this format object.
U_I18N_API
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
U_NAMESPACE_BEGIN
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
UMEASFMT_WIDTH_WIDE
Spell out measure units.
Definition: measfmt.h:41
UMEASFMT_WIDTH_SHORT
Abbreviate measure units.
Definition: measfmt.h:47
icu::ListFormatter
An immutable class for formatting a list, using data from CLDR (or supplied separately).
Definition: listformatter.h:62
udat.h
C API: DateFormat.
icu::Format::format
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
UMEASFMT_WIDTH_NUMERIC
Completely omit measure units when possible.
Definition: measfmt.h:60
U_NAMESPACE_END
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
icu::Format::parseObject
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
icu::Format::operator==
virtual UBool operator==(const Format &other) const =0
Return true if the given Format objects are semantically equal.
UDateFormatField
UDateFormatField
FieldPosition and UFieldPosition selectors for format fields defined by DateFormat and UDateFormat...
Definition: udat.h:488
UErrorCode
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
icu::FieldPosition
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
icu::ParsePosition
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
icu::DateFormat
DateFormat is an abstract class for a family of classes that convert dates and times from their inter...
Definition: datefmt.h:147
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
icu::Format::operator=
Format & operator=(const Format &)
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:293
icu::Formattable
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
icu::Format::clone
virtual Format * clone() const =0
Clone this object polymorphically.
UBool
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185