|
1 /* |
|
2 ******************************************************************************** |
|
3 * Copyright (C) 2005-2013, International Business Machines |
|
4 * Corporation and others. All Rights Reserved. |
|
5 ******************************************************************************** |
|
6 * |
|
7 * File WINNMFMT.H |
|
8 * |
|
9 ******************************************************************************** |
|
10 */ |
|
11 |
|
12 #ifndef __WINNMFMT |
|
13 #define __WINNMFMT |
|
14 |
|
15 #include "unicode/utypes.h" |
|
16 |
|
17 #if U_PLATFORM_USES_ONLY_WIN32_API |
|
18 |
|
19 #include "unicode/format.h" |
|
20 #include "unicode/datefmt.h" |
|
21 #include "unicode/calendar.h" |
|
22 #include "unicode/ustring.h" |
|
23 #include "unicode/locid.h" |
|
24 |
|
25 #if !UCONFIG_NO_FORMATTING |
|
26 |
|
27 /** |
|
28 * \file |
|
29 * \brief C++ API: Format numbers using Windows API. |
|
30 */ |
|
31 |
|
32 U_NAMESPACE_BEGIN |
|
33 |
|
34 union FormatInfo; |
|
35 |
|
36 class Win32NumberFormat : public NumberFormat |
|
37 { |
|
38 public: |
|
39 Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status); |
|
40 |
|
41 Win32NumberFormat(const Win32NumberFormat &other); |
|
42 |
|
43 virtual ~Win32NumberFormat(); |
|
44 |
|
45 virtual Format *clone(void) const; |
|
46 |
|
47 Win32NumberFormat &operator=(const Win32NumberFormat &other); |
|
48 |
|
49 /** |
|
50 * Format a double number. Concrete subclasses must implement |
|
51 * these pure virtual methods. |
|
52 * |
|
53 * @param number The value to be formatted. |
|
54 * @param appendTo Output parameter to receive result. |
|
55 * Result is appended to existing contents. |
|
56 * @param pos On input: an alignment field, if desired. |
|
57 * On output: the offsets of the alignment field. |
|
58 * @return Reference to 'appendTo' parameter. |
|
59 */ |
|
60 virtual UnicodeString& format(double number, |
|
61 UnicodeString& appendTo, |
|
62 FieldPosition& pos) const; |
|
63 /** |
|
64 * Format a long number. Concrete subclasses must implement |
|
65 * these pure virtual methods. |
|
66 * |
|
67 * @param number The value to be formatted. |
|
68 * @param appendTo Output parameter to receive result. |
|
69 * Result is appended to existing contents. |
|
70 * @param pos On input: an alignment field, if desired. |
|
71 * On output: the offsets of the alignment field. |
|
72 * @return Reference to 'appendTo' parameter. |
|
73 */ |
|
74 virtual UnicodeString& format(int32_t number, |
|
75 UnicodeString& appendTo, |
|
76 FieldPosition& pos) const; |
|
77 |
|
78 /** |
|
79 * Format an int64 number. |
|
80 * |
|
81 * @param number The value to be formatted. |
|
82 * @param appendTo Output parameter to receive result. |
|
83 * Result is appended to existing contents. |
|
84 * @param pos On input: an alignment field, if desired. |
|
85 * On output: the offsets of the alignment field. |
|
86 * @return Reference to 'appendTo' parameter. |
|
87 */ |
|
88 virtual UnicodeString& format(int64_t number, |
|
89 UnicodeString& appendTo, |
|
90 FieldPosition& pos) const; |
|
91 |
|
92 // Use the default behavior for the following. |
|
93 // virtual UnicodeString &format(double number, UnicodeString &appendTo) const; |
|
94 // virtual UnicodeString &format(int32_t number, UnicodeString &appendTo) const; |
|
95 // virtual UnicodeString &format(int64_t number, UnicodeString &appendTo) const; |
|
96 |
|
97 virtual void parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const; |
|
98 |
|
99 /** |
|
100 * Sets the maximum number of digits allowed in the fraction portion of a |
|
101 * number. maximumFractionDigits must be >= minimumFractionDigits. If the |
|
102 * new value for maximumFractionDigits is less than the current value |
|
103 * of minimumFractionDigits, then minimumFractionDigits will also be set to |
|
104 * the new value. |
|
105 * @param newValue the new value to be set. |
|
106 * @see getMaximumFractionDigits |
|
107 */ |
|
108 virtual void setMaximumFractionDigits(int32_t newValue); |
|
109 |
|
110 /** |
|
111 * Sets the minimum number of digits allowed in the fraction portion of a |
|
112 * number. minimumFractionDigits must be <= maximumFractionDigits. If the |
|
113 * new value for minimumFractionDigits exceeds the current value |
|
114 * of maximumFractionDigits, then maximumIntegerDigits will also be set to |
|
115 * the new value |
|
116 * @param newValue the new value to be set. |
|
117 * @see getMinimumFractionDigits |
|
118 */ |
|
119 virtual void setMinimumFractionDigits(int32_t newValue); |
|
120 |
|
121 /** |
|
122 * Return the class ID for this class. This is useful only for comparing to |
|
123 * a return value from getDynamicClassID(). For example: |
|
124 * <pre> |
|
125 * . Base* polymorphic_pointer = createPolymorphicObject(); |
|
126 * . if (polymorphic_pointer->getDynamicClassID() == |
|
127 * . erived::getStaticClassID()) ... |
|
128 * </pre> |
|
129 * @return The class ID for all objects of this class. |
|
130 */ |
|
131 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); |
|
132 |
|
133 /** |
|
134 * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This |
|
135 * method is to implement a simple version of RTTI, since not all C++ |
|
136 * compilers support genuine RTTI. Polymorphic operator==() and clone() |
|
137 * methods call this method. |
|
138 * |
|
139 * @return The class ID for this object. All objects of a |
|
140 * given class have the same class ID. Objects of |
|
141 * other classes have different class IDs. |
|
142 */ |
|
143 virtual UClassID getDynamicClassID(void) const; |
|
144 |
|
145 private: |
|
146 UnicodeString &format(int32_t numDigits, UnicodeString &appendTo, wchar_t *format, ...) const; |
|
147 |
|
148 UBool fCurrency; |
|
149 Locale fLocale; |
|
150 int32_t fLCID; |
|
151 FormatInfo *fFormatInfo; |
|
152 UBool fFractionDigitsSet; |
|
153 |
|
154 }; |
|
155 |
|
156 U_NAMESPACE_END |
|
157 |
|
158 #endif /* #if !UCONFIG_NO_FORMATTING */ |
|
159 |
|
160 #endif // U_PLATFORM_USES_ONLY_WIN32_API |
|
161 |
|
162 #endif // __WINNMFMT |