16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2005-2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File WINNMFMT.H 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __WINNMFMT 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __WINNMFMT 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM_USES_ONLY_WIN32_API 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/format.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Format numbers using Windows API. 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunion FormatInfo; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Win32NumberFormat : public NumberFormat 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Win32NumberFormat(const Win32NumberFormat &other); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~Win32NumberFormat(); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual Format *clone(void) const; 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Win32NumberFormat &operator=(const Win32NumberFormat &other); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a double number. Concrete subclasses must implement 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * these pure virtual methods. 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number The value to be formatted. 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param appendTo Output parameter to receive result. 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Result is appended to existing contents. 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos On input: an alignment field, if desired. 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * On output: the offsets of the alignment field. 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return Reference to 'appendTo' parameter. 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UnicodeString& format(double number, 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& appendTo, 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition& pos) const; 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a long number. Concrete subclasses must implement 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * these pure virtual methods. 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number The value to be formatted. 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param appendTo Output parameter to receive result. 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Result is appended to existing contents. 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos On input: an alignment field, if desired. 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * On output: the offsets of the alignment field. 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return Reference to 'appendTo' parameter. 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UnicodeString& format(int32_t number, 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& appendTo, 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition& pos) const; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format an int64 number. 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number The value to be formatted. 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param appendTo Output parameter to receive result. 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Result is appended to existing contents. 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos On input: an alignment field, if desired. 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * On output: the offsets of the alignment field. 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return Reference to 'appendTo' parameter. 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UnicodeString& format(int64_t number, 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& appendTo, 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition& pos) const; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Use the default behavior for the following. 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// virtual UnicodeString &format(double number, UnicodeString &appendTo) const; 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// virtual UnicodeString &format(int32_t number, UnicodeString &appendTo) const; 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// virtual UnicodeString &format(int64_t number, UnicodeString &appendTo) const; 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the maximum number of digits allowed in the fraction portion of a 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * number. maximumFractionDigits must be >= minimumFractionDigits. If the 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * new value for maximumFractionDigits is less than the current value 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of minimumFractionDigits, then minimumFractionDigits will also be set to 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the new value. 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newValue the new value to be set. 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getMaximumFractionDigits 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void setMaximumFractionDigits(int32_t newValue); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the minimum number of digits allowed in the fraction portion of a 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * number. minimumFractionDigits must be <= maximumFractionDigits. If the 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * new value for minimumFractionDigits exceeds the current value 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of maximumFractionDigits, then maximumIntegerDigits will also be set to 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the new value 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newValue the new value to be set. 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see getMinimumFractionDigits 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void setMinimumFractionDigits(int32_t newValue); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the class ID for this class. This is useful only for comparing to 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a return value from getDynamicClassID(). For example: 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre> 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * . Base* polymorphic_pointer = createPolymorphicObject(); 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * . if (polymorphic_pointer->getDynamicClassID() == 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * . erived::getStaticClassID()) ... 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre> 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for all objects of this class. 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * method is to implement a simple version of RTTI, since not all C++ 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * compilers support genuine RTTI. Polymorphic operator==() and clone() 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * methods call this method. 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for this object. All objects of a 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * given class have the same class ID. Objects of 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * other classes have different class IDs. 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID(void) const; 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 146a4ce5bf56788dbb4835a5ef6143384266bbff5f5jshin@chromium.org UnicodeString &format(int32_t numDigits, UnicodeString &appendTo, const wchar_t *format, ...) const; 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fCurrency; 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale fLocale; 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fLCID; 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FormatInfo *fFormatInfo; 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fFractionDigitsSet; 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // U_PLATFORM_USES_ONLY_WIN32_API 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // __WINNMFMT 163