Index: source/i18n/quantityformatter.h |
diff --git a/source/i18n/quantityformatter.h b/source/i18n/quantityformatter.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4e19085964e9a44a519e404f3eb00addc3b94db3 |
--- /dev/null |
+++ b/source/i18n/quantityformatter.h |
@@ -0,0 +1,119 @@ |
+/* |
+****************************************************************************** |
+* Copyright (C) 2014, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+****************************************************************************** |
+* quantityformatter.h |
+*/ |
+ |
+#ifndef __QUANTITY_FORMATTER_H__ |
+#define __QUANTITY_FORMATTER_H__ |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/uobject.h" |
+ |
+#if !UCONFIG_NO_FORMATTING |
+ |
+U_NAMESPACE_BEGIN |
+ |
+class SimplePatternFormatter; |
+class UnicodeString; |
+class PluralRules; |
+class NumberFormat; |
+class Formattable; |
+class FieldPosition; |
+ |
+/** |
+ * A plural aware formatter that is good for expressing a single quantity and |
+ * a unit. |
+ * <p> |
+ * First use the add() methods to add a pattern for each plural variant. |
+ * There must be a pattern for the "other" variant. |
+ * Then use the format() method. |
+ * <p> |
+ * Concurrent calls only to const methods on a QuantityFormatter object are |
+ * safe, but concurrent const and non-const method calls on a QuantityFormatter |
+ * object are not safe and require synchronization. |
+ * |
+ */ |
+class U_I18N_API QuantityFormatter : public UMemory { |
+public: |
+ /** |
+ * Default constructor. |
+ */ |
+ QuantityFormatter(); |
+ |
+ /** |
+ * Copy constructor. |
+ */ |
+ QuantityFormatter(const QuantityFormatter& other); |
+ |
+ /** |
+ * Assignment operator |
+ */ |
+ QuantityFormatter &operator=(const QuantityFormatter& other); |
+ |
+ /** |
+ * Destructor. |
+ */ |
+ ~QuantityFormatter(); |
+ |
+ /** |
+ * Removes all variants from this object including the "other" variant. |
+ */ |
+ void reset(); |
+ |
+ /** |
+ * Adds a plural variant. |
+ * |
+ * @param variant "zero", "one", "two", "few", "many", "other" |
+ * @param rawPattern the pattern for the variant e.g "{0} meters" |
+ * @param status any error returned here. |
+ * @return TRUE on success; FALSE if status was set to a non zero error. |
+ */ |
+ UBool add( |
+ const char *variant, |
+ const UnicodeString &rawPattern, |
+ UErrorCode &status); |
+ |
+ /** |
+ * returns TRUE if this object has at least the "other" variant. |
+ */ |
+ UBool isValid() const; |
+ |
+ /** |
+ * Gets the pattern formatter that would be used for a particular variant. |
+ * If isValid() returns TRUE, this method is guaranteed to return a |
+ * non-NULL value. |
+ */ |
+ const SimplePatternFormatter *getByVariant(const char *variant) const; |
+ |
+ /** |
+ * Formats a quantity with this object appending the result to appendTo. |
+ * At least the "other" variant must be added to this object for this |
+ * method to work. |
+ * |
+ * @param quantity the single quantity. |
+ * @param fmt formats the quantity |
+ * @param rules computes the plural variant to use. |
+ * @param appendTo result appended here. |
+ * @param status any error returned here. |
+ * @return appendTo |
+ */ |
+ UnicodeString &format( |
+ const Formattable &quantity, |
+ const NumberFormat &fmt, |
+ const PluralRules &rules, |
+ UnicodeString &appendTo, |
+ FieldPosition &pos, |
+ UErrorCode &status) const; |
+ |
+private: |
+ SimplePatternFormatter *formatters[6]; |
+}; |
+ |
+U_NAMESPACE_END |
+ |
+#endif |
+ |
+#endif |