ICU 56.1  56.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
35 
36  // Wide, short, and narrow must be first and in this order.
42 
48 
54 
61 
67 };
70 
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 
94  public:
95  using Format::parseObject;
96  using Format::format;
97 
103  const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
104 
110  const Locale &locale,
111  UMeasureFormatWidth width,
112  NumberFormat *nfToAdopt,
113  UErrorCode &status);
114 
119  MeasureFormat(const MeasureFormat &other);
120 
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 
380 
381 #endif // #if !UCONFIG_NO_FORMATTING
382 #endif // #ifndef MEASUREFORMAT_H