]> git.saurik.com Git - apple/icu.git/blame - icuSources/i18n/quantityformatter.h
ICU-551.51.4.tar.gz
[apple/icu.git] / icuSources / i18n / quantityformatter.h
CommitLineData
57a6839d
A
1/*
2******************************************************************************
3* Copyright (C) 2014, International Business Machines
4* Corporation and others. All Rights Reserved.
5******************************************************************************
6* quantityformatter.h
7*/
8
9#ifndef __QUANTITY_FORMATTER_H__
10#define __QUANTITY_FORMATTER_H__
11
12#include "unicode/utypes.h"
13#include "unicode/uobject.h"
14
b331163b
A
15#if !UCONFIG_NO_FORMATTING
16
57a6839d
A
17U_NAMESPACE_BEGIN
18
19class SimplePatternFormatter;
20class UnicodeString;
21class PluralRules;
22class NumberFormat;
23class Formattable;
24class FieldPosition;
25
26/**
27 * A plural aware formatter that is good for expressing a single quantity and
28 * a unit.
29 * <p>
30 * First use the add() methods to add a pattern for each plural variant.
31 * There must be a pattern for the "other" variant.
32 * Then use the format() method.
33 * <p>
34 * Concurrent calls only to const methods on a QuantityFormatter object are
35 * safe, but concurrent const and non-const method calls on a QuantityFormatter
36 * object are not safe and require synchronization.
37 *
38 */
39class U_I18N_API QuantityFormatter : public UMemory {
57a6839d
A
40public:
41 /**
42 * Default constructor.
43 */
44 QuantityFormatter();
45
46 /**
47 * Copy constructor.
48 */
49 QuantityFormatter(const QuantityFormatter& other);
50
51 /**
52 * Assignment operator
53 */
54 QuantityFormatter &operator=(const QuantityFormatter& other);
55
56 /**
57 * Destructor.
58 */
59 ~QuantityFormatter();
60
61 /**
62 * Removes all variants from this object including the "other" variant.
63 */
64 void reset();
65
66 /**
67 * Adds a plural variant.
68 *
69 * @param variant "zero", "one", "two", "few", "many", "other"
70 * @param rawPattern the pattern for the variant e.g "{0} meters"
71 * @param status any error returned here.
b331163b 72 * @return TRUE on success; FALSE if status was set to a non zero error.
57a6839d
A
73 */
74 UBool add(
75 const char *variant,
76 const UnicodeString &rawPattern,
77 UErrorCode &status);
78
79 /**
80 * returns TRUE if this object has at least the "other" variant.
81 */
82 UBool isValid() const;
83
b331163b
A
84 /**
85 * Gets the pattern formatter that would be used for a particular variant.
86 * If isValid() returns TRUE, this method is guaranteed to return a
87 * non-NULL value.
88 */
89 const SimplePatternFormatter *getByVariant(const char *variant) const;
90
57a6839d
A
91 /**
92 * Formats a quantity with this object appending the result to appendTo.
93 * At least the "other" variant must be added to this object for this
94 * method to work.
95 *
96 * @param quantity the single quantity.
97 * @param fmt formats the quantity
98 * @param rules computes the plural variant to use.
99 * @param appendTo result appended here.
100 * @param status any error returned here.
101 * @return appendTo
102 */
103 UnicodeString &format(
104 const Formattable &quantity,
105 const NumberFormat &fmt,
106 const PluralRules &rules,
107 UnicodeString &appendTo,
108 FieldPosition &pos,
109 UErrorCode &status) const;
110
111private:
112 SimplePatternFormatter *formatters[6];
113};
114
115U_NAMESPACE_END
116
117#endif
b331163b
A
118
119#endif