00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef MEASUREFORMAT_H
00014 #define MEASUREFORMAT_H
00015
00016 #include "unicode/utypes.h"
00017
00018 #if U_SHOW_CPLUSPLUS_API
00019
00020 #if !UCONFIG_NO_FORMATTING
00021
00022 #include "unicode/format.h"
00023 #include "unicode/udat.h"
00024
00038 enum UMeasureFormatWidth {
00039
00040
00045 UMEASFMT_WIDTH_WIDE,
00046
00051 UMEASFMT_WIDTH_SHORT,
00052
00057 UMEASFMT_WIDTH_NARROW,
00058
00064 UMEASFMT_WIDTH_NUMERIC,
00065
00066 #ifndef U_HIDE_DEPRECATED_API
00067
00071 UMEASFMT_WIDTH_COUNT = 4
00072 #endif // U_HIDE_DEPRECATED_API
00073 };
00075 typedef enum UMeasureFormatWidth UMeasureFormatWidth;
00076
00077 U_NAMESPACE_BEGIN
00078
00079 class Measure;
00080 class MeasureUnit;
00081 class NumberFormat;
00082 class PluralRules;
00083 class MeasureFormatCacheData;
00084 class SharedNumberFormat;
00085 class SharedPluralRules;
00086 class QuantityFormatter;
00087 class SimpleFormatter;
00088 class ListFormatter;
00089 class DateFormat;
00090
00100 class U_I18N_API MeasureFormat : public Format {
00101 public:
00102 using Format::parseObject;
00103 using Format::format;
00104
00112 MeasureFormat(
00113 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
00114
00122 MeasureFormat(
00123 const Locale &locale,
00124 UMeasureFormatWidth width,
00125 NumberFormat *nfToAdopt,
00126 UErrorCode &status);
00127
00132 MeasureFormat(const MeasureFormat &other);
00133
00138 MeasureFormat &operator=(const MeasureFormat &rhs);
00139
00144 virtual ~MeasureFormat();
00145
00150 virtual UBool operator==(const Format &other) const;
00151
00156 virtual MeasureFormat *clone() const;
00157
00162 virtual UnicodeString &format(
00163 const Formattable &obj,
00164 UnicodeString &appendTo,
00165 FieldPosition &pos,
00166 UErrorCode &status) const;
00167
00168 #ifndef U_FORCE_HIDE_DRAFT_API
00169
00175 virtual void parseObject(
00176 const UnicodeString &source,
00177 Formattable &reslt,
00178 ParsePosition &pos) const;
00179 #endif // U_FORCE_HIDE_DRAFT_API
00180
00197 UnicodeString &formatMeasures(
00198 const Measure *measures,
00199 int32_t measureCount,
00200 UnicodeString &appendTo,
00201 FieldPosition &pos,
00202 UErrorCode &status) const;
00203
00217 UnicodeString &formatMeasurePerUnit(
00218 const Measure &measure,
00219 const MeasureUnit &perUnit,
00220 UnicodeString &appendTo,
00221 FieldPosition &pos,
00222 UErrorCode &status) const;
00223
00235 UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const;
00236
00237
00249 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
00250 UErrorCode& ec);
00251
00262 static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
00263
00275 static UClassID U_EXPORT2 getStaticClassID(void);
00276
00288 virtual UClassID getDynamicClassID(void) const;
00289
00290 protected:
00295 MeasureFormat();
00296
00297 #ifndef U_HIDE_INTERNAL_API
00298
00304 void initMeasureFormat(
00305 const Locale &locale,
00306 UMeasureFormatWidth width,
00307 NumberFormat *nfToAdopt,
00308 UErrorCode &status);
00316 UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status);
00317
00323 void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
00324
00329 const NumberFormat &getNumberFormatInternal() const;
00330
00336 const NumberFormat& getCurrencyFormatInternal() const;
00337
00342 const PluralRules &getPluralRules() const;
00343
00348 Locale getLocale(UErrorCode &status) const;
00349
00354 const char *getLocaleID(UErrorCode &status) const;
00355
00356 #endif
00357
00358 private:
00359 const MeasureFormatCacheData *cache;
00360 const SharedNumberFormat *numberFormat;
00361 const SharedPluralRules *pluralRules;
00362 UMeasureFormatWidth fWidth;
00363
00364
00365
00366
00367 ListFormatter *listFormatter;
00368
00369 UnicodeString &formatMeasure(
00370 const Measure &measure,
00371 const NumberFormat &nf,
00372 UnicodeString &appendTo,
00373 FieldPosition &pos,
00374 UErrorCode &status) const;
00375
00376 UnicodeString &formatMeasuresSlowTrack(
00377 const Measure *measures,
00378 int32_t measureCount,
00379 UnicodeString& appendTo,
00380 FieldPosition& pos,
00381 UErrorCode& status) const;
00382
00383 UnicodeString &formatNumeric(
00384 const Formattable *hms,
00385
00386 int32_t bitMap,
00387 UnicodeString &appendTo,
00388 UErrorCode &status) const;
00389 };
00390
00391 U_NAMESPACE_END
00392
00393 #endif // #if !UCONFIG_NO_FORMATTING
00394
00395 #endif
00396
00397 #endif // #ifndef MEASUREFORMAT_H