diff -r 000000000000 -r 6474c204b198 intl/icu/source/i18n/winnmfmt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/intl/icu/source/i18n/winnmfmt.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,162 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2013, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINNMFMT.H +* +******************************************************************************** +*/ + +#ifndef __WINNMFMT +#define __WINNMFMT + +#include "unicode/utypes.h" + +#if U_PLATFORM_USES_ONLY_WIN32_API + +#include "unicode/format.h" +#include "unicode/datefmt.h" +#include "unicode/calendar.h" +#include "unicode/ustring.h" +#include "unicode/locid.h" + +#if !UCONFIG_NO_FORMATTING + +/** + * \file + * \brief C++ API: Format numbers using Windows API. + */ + +U_NAMESPACE_BEGIN + +union FormatInfo; + +class Win32NumberFormat : public NumberFormat +{ +public: + Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status); + + Win32NumberFormat(const Win32NumberFormat &other); + + virtual ~Win32NumberFormat(); + + virtual Format *clone(void) const; + + Win32NumberFormat &operator=(const Win32NumberFormat &other); + + /** + * Format a double number. Concrete subclasses must implement + * these pure virtual methods. + * + * @param number The value to be formatted. + * @param appendTo Output parameter to receive result. + * Result is appended to existing contents. + * @param pos On input: an alignment field, if desired. + * On output: the offsets of the alignment field. + * @return Reference to 'appendTo' parameter. + */ + virtual UnicodeString& format(double number, + UnicodeString& appendTo, + FieldPosition& pos) const; + /** + * Format a long number. Concrete subclasses must implement + * these pure virtual methods. + * + * @param number The value to be formatted. + * @param appendTo Output parameter to receive result. + * Result is appended to existing contents. + * @param pos On input: an alignment field, if desired. + * On output: the offsets of the alignment field. + * @return Reference to 'appendTo' parameter. + */ + virtual UnicodeString& format(int32_t number, + UnicodeString& appendTo, + FieldPosition& pos) const; + + /** + * Format an int64 number. + * + * @param number The value to be formatted. + * @param appendTo Output parameter to receive result. + * Result is appended to existing contents. + * @param pos On input: an alignment field, if desired. + * On output: the offsets of the alignment field. + * @return Reference to 'appendTo' parameter. + */ + virtual UnicodeString& format(int64_t number, + UnicodeString& appendTo, + FieldPosition& pos) const; + +// Use the default behavior for the following. +// virtual UnicodeString &format(double number, UnicodeString &appendTo) const; +// virtual UnicodeString &format(int32_t number, UnicodeString &appendTo) const; +// virtual UnicodeString &format(int64_t number, UnicodeString &appendTo) const; + + virtual void parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const; + + /** + * Sets the maximum number of digits allowed in the fraction portion of a + * number. maximumFractionDigits must be >= minimumFractionDigits. If the + * new value for maximumFractionDigits is less than the current value + * of minimumFractionDigits, then minimumFractionDigits will also be set to + * the new value. + * @param newValue the new value to be set. + * @see getMaximumFractionDigits + */ + virtual void setMaximumFractionDigits(int32_t newValue); + + /** + * Sets the minimum number of digits allowed in the fraction portion of a + * number. minimumFractionDigits must be <= maximumFractionDigits. If the + * new value for minimumFractionDigits exceeds the current value + * of maximumFractionDigits, then maximumIntegerDigits will also be set to + * the new value + * @param newValue the new value to be set. + * @see getMinimumFractionDigits + */ + virtual void setMinimumFractionDigits(int32_t newValue); + + /** + * Return the class ID for this class. This is useful only for comparing to + * a return value from getDynamicClassID(). For example: + *
+     * .   Base* polymorphic_pointer = createPolymorphicObject();
+     * .   if (polymorphic_pointer->getDynamicClassID() ==
+     * .       erived::getStaticClassID()) ...
+     * 
+ * @return The class ID for all objects of this class. + */ + U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); + + /** + * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This + * method is to implement a simple version of RTTI, since not all C++ + * compilers support genuine RTTI. Polymorphic operator==() and clone() + * methods call this method. + * + * @return The class ID for this object. All objects of a + * given class have the same class ID. Objects of + * other classes have different class IDs. + */ + virtual UClassID getDynamicClassID(void) const; + +private: + UnicodeString &format(int32_t numDigits, UnicodeString &appendTo, wchar_t *format, ...) const; + + UBool fCurrency; + Locale fLocale; + int32_t fLCID; + FormatInfo *fFormatInfo; + UBool fFractionDigitsSet; + +}; + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // U_PLATFORM_USES_ONLY_WIN32_API + +#endif // __WINNMFMT