Index: icu46/source/i18n/unicode/numfmt.h |
=================================================================== |
--- icu46/source/i18n/unicode/numfmt.h (revision 0) |
+++ icu46/source/i18n/unicode/numfmt.h (revision 0) |
@@ -0,0 +1,1051 @@ |
+/* |
+******************************************************************************** |
+* Copyright (C) 1997-2010, International Business Machines Corporation and others. |
+* All Rights Reserved. |
+******************************************************************************** |
+* |
+* File NUMFMT.H |
+* |
+* Modification History: |
+* |
+* Date Name Description |
+* 02/19/97 aliu Converted from java. |
+* 03/18/97 clhuang Updated per C++ implementation. |
+* 04/17/97 aliu Changed DigitCount to int per code review. |
+* 07/20/98 stephen JDK 1.2 sync up. Added scientific support. |
+* Changed naming conventions to match C++ guidelines |
+* Derecated Java style constants (eg, INTEGER_FIELD) |
+******************************************************************************** |
+*/ |
+ |
+#ifndef NUMFMT_H |
+#define NUMFMT_H |
+ |
+ |
+#include "unicode/utypes.h" |
+ |
+/** |
+ * \file |
+ * \brief C++ API: Abstract base class for all number formats. |
+ */ |
+ |
+#if !UCONFIG_NO_FORMATTING |
+ |
+#include "unicode/unistr.h" |
+#include "unicode/format.h" |
+#include "unicode/unum.h" // UNumberFormatStyle |
+#include "unicode/locid.h" |
+#include "unicode/stringpiece.h" |
+ |
+U_NAMESPACE_BEGIN |
+ |
+#if !UCONFIG_NO_SERVICE |
+class NumberFormatFactory; |
+class StringEnumeration; |
+#endif |
+ |
+/** |
+ * |
+ * Abstract base class for all number formats. Provides interface for |
+ * formatting and parsing a number. Also provides methods for |
+ * determining which locales have number formats, and what their names |
+ * are. |
+ * <P> |
+ * NumberFormat helps you to format and parse numbers for any locale. |
+ * Your code can be completely independent of the locale conventions |
+ * for decimal points, thousands-separators, or even the particular |
+ * decimal digits used, or whether the number format is even decimal. |
+ * <P> |
+ * To format a number for the current Locale, use one of the static |
+ * factory methods: |
+ * <pre> |
+ * \code |
+ * double myNumber = 7.0; |
+ * UnicodeString myString; |
+ * UErrorCode success = U_ZERO_ERROR; |
+ * NumberFormat* nf = NumberFormat::createInstance(success) |
+ * nf->format(myNumber, myString); |
+ * cout << " Example 1: " << myString << endl; |
+ * \endcode |
+ * </pre> |
+ * If you are formatting multiple numbers, it is more efficient to get |
+ * the format and use it multiple times so that the system doesn't |
+ * have to fetch the information about the local language and country |
+ * conventions multiple times. |
+ * <pre> |
+ * \code |
+ * UnicodeString myString; |
+ * UErrorCode success = U_ZERO_ERROR; |
+ * nf = NumberFormat::createInstance( success ); |
+ * int32_t a[] = { 123, 3333, -1234567 }; |
+ * const int32_t a_len = sizeof(a) / sizeof(a[0]); |
+ * myString.remove(); |
+ * for (int32_t i = 0; i < a_len; i++) { |
+ * nf->format(a[i], myString); |
+ * myString += " ; "; |
+ * } |
+ * cout << " Example 2: " << myString << endl; |
+ * \endcode |
+ * </pre> |
+ * To format a number for a different Locale, specify it in the |
+ * call to createInstance(). |
+ * <pre> |
+ * \code |
+ * nf = NumberFormat::createInstance( Locale::FRENCH, success ); |
+ * \endcode |
+ * </pre> |
+ * You can use a NumberFormat to parse also. |
+ * <pre> |
+ * \code |
+ * UErrorCode success; |
+ * Formattable result(-999); // initialized with error code |
+ * nf->parse(myString, result, success); |
+ * \endcode |
+ * </pre> |
+ * Use createInstance to get the normal number format for that country. |
+ * There are other static factory methods available. Use getCurrency |
+ * to get the currency number format for that country. Use getPercent |
+ * to get a format for displaying percentages. With this format, a |
+ * fraction from 0.53 is displayed as 53%. |
+ * <P> |
+ * Starting from ICU 4.2, you can use createInstance() by passing in a 'style' |
+ * as parameter to get the correct instance. |
+ * For example, |
+ * use createInstance(...kNumberStyle...) to get the normal number format, |
+ * createInstance(...kPercentStyle...) to get a format for displaying |
+ * percentage, |
+ * createInstance(...kScientificStyle...) to get a format for displaying |
+ * scientific number, |
+ * createInstance(...kCurrencyStyle...) to get the currency number format, |
+ * in which the currency is represented by its symbol, for example, "$3.00". |
+ * createInstance(...kIsoCurrencyStyle...) to get the currency number format, |
+ * in which the currency is represented by its ISO code, for example "USD3.00". |
+ * createInstance(...kPluralCurrencyStyle...) to get the currency number format, |
+ * in which the currency is represented by its full name in plural format, |
+ * for example, "3.00 US dollars" or "1.00 US dollar". |
+ * <P> |
+ * You can also control the display of numbers with such methods as |
+ * getMinimumFractionDigits. If you want even more control over the |
+ * format or parsing, or want to give your users more control, you can |
+ * try casting the NumberFormat you get from the factory methods to a |
+ * DecimalNumberFormat. This will work for the vast majority of |
+ * countries; just remember to put it in a try block in case you |
+ * encounter an unusual one. |
+ * <P> |
+ * You can also use forms of the parse and format methods with |
+ * ParsePosition and FieldPosition to allow you to: |
+ * <ul type=round> |
+ * <li>(a) progressively parse through pieces of a string. |
+ * <li>(b) align the decimal point and other areas. |
+ * </ul> |
+ * For example, you can align numbers in two ways. |
+ * <P> |
+ * If you are using a monospaced font with spacing for alignment, you |
+ * can pass the FieldPosition in your format call, with field = |
+ * INTEGER_FIELD. On output, getEndIndex will be set to the offset |
+ * between the last character of the integer and the decimal. Add |
+ * (desiredSpaceCount - getEndIndex) spaces at the front of the |
+ * string. |
+ * <P> |
+ * If you are using proportional fonts, instead of padding with |
+ * spaces, measure the width of the string in pixels from the start to |
+ * getEndIndex. Then move the pen by (desiredPixelWidth - |
+ * widthToAlignmentPoint) before drawing the text. It also works |
+ * where there is no decimal, but possibly additional characters at |
+ * the end, e.g. with parentheses in negative numbers: "(12)" for -12. |
+ * <p> |
+ * <em>User subclasses are not supported.</em> While clients may write |
+ * subclasses, such code will not necessarily work and will not be |
+ * guaranteed to work stably from release to release. |
+ * |
+ * @stable ICU 2.0 |
+ */ |
+class U_I18N_API NumberFormat : public Format { |
+public: |
+ |
+ /** |
+ * Constants for various number format styles. |
+ * kNumberStyle specifies a normal number style of format. |
+ * kCurrencyStyle specifies a currency format using currency symbol name, |
+ * such as in "$1.00". |
+ * kPercentStyle specifies a style of format to display percent. |
+ * kScientificStyle specifies a style of format to display scientific number. |
+ * kISOCurrencyStyle specifies a currency format using ISO currency code, |
+ * such as in "USD1.00". |
+ * kPluralCurrencyStyle specifies a currency format using currency plural |
+ * names, such as in "1.00 US dollar" and "3.00 US dollars". |
+ * @draft ICU 4.2 |
+ */ |
+ enum EStyles { |
+ kNumberStyle, |
+ kCurrencyStyle, |
+ kPercentStyle, |
+ kScientificStyle, |
+ kIsoCurrencyStyle, |
+ kPluralCurrencyStyle, |
+ kStyleCount // ALWAYS LAST ENUM: number of styles |
+ }; |
+ |
+ /** |
+ * Alignment Field constants used to construct a FieldPosition object. |
+ * Signifies that the position of the integer part or fraction part of |
+ * a formatted number should be returned. |
+ * |
+ * Note: as of ICU 4.4, the values in this enum have been extended to |
+ * support identification of all number format fields, not just those |
+ * pertaining to alignment. |
+ * |
+ * @see FieldPosition |
+ * @stable ICU 2.0 |
+ */ |
+ enum EAlignmentFields { |
+ kIntegerField, |
+ kFractionField, |
+ kDecimalSeparatorField, |
+ kExponentSymbolField, |
+ kExponentSignField, |
+ kExponentField, |
+ kGroupingSeparatorField, |
+ kCurrencyField, |
+ kPercentField, |
+ kPermillField, |
+ kSignField, |
+ |
+ /** |
+ * These constants are provided for backwards compatibility only. |
+ * Please use the C++ style constants defined above. |
+ * @stable ICU 2.0 |
+ */ |
+ INTEGER_FIELD = kIntegerField, |
+ FRACTION_FIELD = kFractionField |
+ }; |
+ |
+ /** |
+ * Destructor. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual ~NumberFormat(); |
+ |
+ /** |
+ * Return true if the given Format objects are semantically equal. |
+ * Objects of different subclasses are considered unequal. |
+ * @return true if the given Format objects are semantically equal. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual UBool operator==(const Format& other) const; |
+ |
+ |
+ using Format::format; |
+ |
+ /** |
+ * Format an object to produce a string. This method handles |
+ * Formattable objects with numeric types. If the Formattable |
+ * object type is not a numeric type, then it returns a failing |
+ * UErrorCode. |
+ * |
+ * @param obj The object to format. |
+ * @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. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual UnicodeString& format(const Formattable& obj, |
+ UnicodeString& appendTo, |
+ FieldPosition& pos, |
+ UErrorCode& status) const; |
+ |
+ /** |
+ * Format an object to produce a string. This method handles |
+ * Formattable objects with numeric types. If the Formattable |
+ * object type is not a numeric type, then it returns a failing |
+ * UErrorCode. |
+ * |
+ * @param obj The object to format. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param posIter On return, can be used to iterate over positions |
+ * of fields generated by this format call. Can be |
+ * NULL. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable 4.4 |
+ */ |
+ virtual UnicodeString& format(const Formattable& obj, |
+ UnicodeString& appendTo, |
+ FieldPositionIterator* posIter, |
+ UErrorCode& status) const; |
+ |
+ /** |
+ * Parse a string to produce an object. This methods handles |
+ * parsing of numeric strings into Formattable objects with numeric |
+ * types. |
+ * <P> |
+ * Before calling, set parse_pos.index to the offset you want to |
+ * start parsing at in the source. After calling, parse_pos.index |
+ * indicates the position after the successfully parsed text. If |
+ * an error occurs, parse_pos.index is unchanged. |
+ * <P> |
+ * When parsing, leading whitespace is discarded (with successful |
+ * parse), while trailing whitespace is left as is. |
+ * <P> |
+ * See Format::parseObject() for more. |
+ * |
+ * @param source The string to be parsed into an object. |
+ * @param result Formattable to be set to the parse result. |
+ * If parse fails, return contents are undefined. |
+ * @param parse_pos The position to start parsing at. Upon return |
+ * this param is set to the position after the |
+ * last character successfully parsed. If the |
+ * source is not parsed successfully, this param |
+ * will remain unchanged. |
+ * @return A newly created Formattable* object, or NULL |
+ * on failure. The caller owns this and should |
+ * delete it when done. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void parseObject(const UnicodeString& source, |
+ Formattable& result, |
+ ParsePosition& parse_pos) const; |
+ |
+ /** |
+ * Format a double number. These methods call the NumberFormat |
+ * pure virtual format() methods with the default FieldPosition. |
+ * |
+ * @param number The value to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable ICU 2.0 |
+ */ |
+ UnicodeString& format( double number, |
+ UnicodeString& appendTo) const; |
+ |
+ /** |
+ * Format a long number. These methods call the NumberFormat |
+ * pure virtual format() methods with the default FieldPosition. |
+ * |
+ * @param number The value to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable ICU 2.0 |
+ */ |
+ UnicodeString& format( int32_t number, |
+ UnicodeString& appendTo) const; |
+ |
+ /** |
+ * Format an int64 number. These methods call the NumberFormat |
+ * pure virtual format() methods with the default FieldPosition. |
+ * |
+ * @param number The value to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable ICU 2.8 |
+ */ |
+ UnicodeString& format( int64_t number, |
+ UnicodeString& appendTo) const; |
+ |
+ /** |
+ * 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. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual UnicodeString& format(double number, |
+ UnicodeString& appendTo, |
+ FieldPosition& pos) const = 0; |
+ /** |
+ * Format a double number. Subclasses must implement |
+ * this method. |
+ * |
+ * @param number The value to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param posIter On return, can be used to iterate over positions |
+ * of fields generated by this format call. |
+ * Can be NULL. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable 4.4 |
+ */ |
+ virtual UnicodeString& format(double number, |
+ UnicodeString& appendTo, |
+ FieldPositionIterator* posIter, |
+ UErrorCode& status) 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. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual UnicodeString& format(int32_t number, |
+ UnicodeString& appendTo, |
+ FieldPosition& pos) const = 0; |
+ |
+ /** |
+ * Format an int32 number. Subclasses must implement |
+ * this method. |
+ * |
+ * @param number The value to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param posIter On return, can be used to iterate over positions |
+ * of fields generated by this format call. |
+ * Can be NULL. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable 4.4 |
+ */ |
+ virtual UnicodeString& format(int32_t number, |
+ UnicodeString& appendTo, |
+ FieldPositionIterator* posIter, |
+ UErrorCode& status) const; |
+ /** |
+ * Format an int64 number. (Not abstract to retain compatibility |
+ * with earlier releases, however subclasses should override this |
+ * method as it just delegates to format(int32_t 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. |
+ * @stable ICU 2.8 |
+ */ |
+ virtual UnicodeString& format(int64_t number, |
+ UnicodeString& appendTo, |
+ FieldPosition& pos) const; |
+ /** |
+ * Format an int64 number. Subclasses must implement |
+ * this method. |
+ * |
+ * @param number The value to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param posIter On return, can be used to iterate over positions |
+ * of fields generated by this format call. |
+ * Can be NULL. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable 4.4 |
+ */ |
+ virtual UnicodeString& format(int64_t number, |
+ UnicodeString& appendTo, |
+ FieldPositionIterator* posIter, |
+ UErrorCode& status) const; |
+ |
+ /** |
+ * Format a decimal number. Subclasses must implement |
+ * this method. The syntax of the unformatted number is a "numeric string" |
+ * as defined in the Decimal Arithmetic Specification, available at |
+ * http://speleotrove.com/decimal |
+ * |
+ * @param number The unformatted number, as a string, to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param posIter On return, can be used to iterate over positions |
+ * of fields generated by this format call. |
+ * Can be NULL. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable 4.4 |
+ */ |
+ virtual UnicodeString& format(const StringPiece &number, |
+ UnicodeString& appendTo, |
+ FieldPositionIterator* posIter, |
+ UErrorCode& status) const; |
+public: |
+ /** |
+ * Format a decimal number. |
+ * The number is a DigitList wrapper onto a floating point decimal number. |
+ * The default implementation in NumberFormat converts the decimal number |
+ * to a double and formats that. Subclasses of NumberFormat that want |
+ * to specifically handle big decimal numbers must override this method. |
+ * class DecimalFormat does so. |
+ * |
+ * @param number The number, a DigitList format Decimal Floating Point. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param posIter On return, can be used to iterate over positions |
+ * of fields generated by this format call. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @internal |
+ */ |
+ virtual UnicodeString& format(const DigitList &number, |
+ UnicodeString& appendTo, |
+ FieldPositionIterator* posIter, |
+ UErrorCode& status) const; |
+ |
+ /** |
+ * Format a decimal number. |
+ * The number is a DigitList wrapper onto a floating point decimal number. |
+ * The default implementation in NumberFormat converts the decimal number |
+ * to a double and formats that. Subclasses of NumberFormat that want |
+ * to specifically handle big decimal numbers must override this method. |
+ * class DecimalFormat does so. |
+ * |
+ * @param number The number, a DigitList format Decimal Floating Point. |
+ * @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. |
+ * @param status Output param filled with success/failure status. |
+ * @return Reference to 'appendTo' parameter. |
+ * @internal |
+ */ |
+ virtual UnicodeString& format(const DigitList &number, |
+ UnicodeString& appendTo, |
+ FieldPosition& pos, |
+ UErrorCode& status) const; |
+ |
+public: |
+ |
+ /** |
+ * Redeclared Format method. |
+ * @param obj The object to be formatted. |
+ * @param appendTo Output parameter to receive result. |
+ * Result is appended to existing contents. |
+ * @param status Output parameter set to a failure error code |
+ * when a failure occurs. |
+ * @return Reference to 'appendTo' parameter. |
+ * @stable ICU 2.0 |
+ */ |
+ UnicodeString& format(const Formattable& obj, |
+ UnicodeString& appendTo, |
+ UErrorCode& status) const; |
+ |
+ /** |
+ * Return a long if possible (e.g. within range LONG_MAX, |
+ * LONG_MAX], and with no decimals), otherwise a double. If |
+ * IntegerOnly is set, will stop at a decimal point (or equivalent; |
+ * e.g. for rational numbers "1 2/3", will stop after the 1). |
+ * <P> |
+ * If no object can be parsed, index is unchanged, and NULL is |
+ * returned. |
+ * <P> |
+ * This is a pure virtual which concrete subclasses must implement. |
+ * |
+ * @param text The text to be parsed. |
+ * @param result Formattable to be set to the parse result. |
+ * If parse fails, return contents are undefined. |
+ * @param parsePosition The position to start parsing at on input. |
+ * On output, moved to after the last successfully |
+ * parse character. On parse failure, does not change. |
+ * @return A Formattable object of numeric type. The caller |
+ * owns this an must delete it. NULL on failure. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void parse(const UnicodeString& text, |
+ Formattable& result, |
+ ParsePosition& parsePosition) const = 0; |
+ |
+ /** |
+ * Parse a string as a numeric value, and return a Formattable |
+ * numeric object. This method parses integers only if IntegerOnly |
+ * is set. |
+ * |
+ * @param text The text to be parsed. |
+ * @param result Formattable to be set to the parse result. |
+ * If parse fails, return contents are undefined. |
+ * @param status Output parameter set to a failure error code |
+ * when a failure occurs. |
+ * @return A Formattable object of numeric type. The caller |
+ * owns this an must delete it. NULL on failure. |
+ * @see NumberFormat::isParseIntegerOnly |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void parse( const UnicodeString& text, |
+ Formattable& result, |
+ UErrorCode& status) const; |
+ |
+ /** |
+ * Parses text from the given string as a currency amount. Unlike |
+ * the parse() method, this method will attempt to parse a generic |
+ * currency name, searching for a match of this object's locale's |
+ * currency display names, or for a 3-letter ISO currency code. |
+ * This method will fail if this format is not a currency format, |
+ * that is, if it does not contain the currency pattern symbol |
+ * (U+00A4) in its prefix or suffix. |
+ * |
+ * @param text the string to parse |
+ * @param result output parameter to receive result. This will have |
+ * its currency set to the parsed ISO currency code. |
+ * @param pos input-output position; on input, the position within |
+ * text to match; must have 0 <= pos.getIndex() < text.length(); |
+ * on output, the position after the last matched character. If |
+ * the parse fails, the position in unchanged upon output. |
+ * @return a reference to result |
+ * @internal |
+ */ |
+ virtual Formattable& parseCurrency(const UnicodeString& text, |
+ Formattable& result, |
+ ParsePosition& pos) const; |
+ |
+ /** |
+ * Return true if this format will parse numbers as integers |
+ * only. For example in the English locale, with ParseIntegerOnly |
+ * true, the string "1234." would be parsed as the integer value |
+ * 1234 and parsing would stop at the "." character. Of course, |
+ * the exact format accepted by the parse operation is locale |
+ * dependant and determined by sub-classes of NumberFormat. |
+ * @return true if this format will parse numbers as integers |
+ * only. |
+ * @stable ICU 2.0 |
+ */ |
+ UBool isParseIntegerOnly(void) const; |
+ |
+ /** |
+ * Sets whether or not numbers should be parsed as integers only. |
+ * @param value set True, this format will parse numbers as integers |
+ * only. |
+ * @see isParseIntegerOnly |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void setParseIntegerOnly(UBool value); |
+ |
+ /** |
+ * Returns the default number format for the current default |
+ * locale. The default format is one of the styles provided by |
+ * the other factory methods: getNumberInstance, |
+ * getCurrencyInstance or getPercentInstance. Exactly which one |
+ * is locale dependant. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createInstance(UErrorCode&); |
+ |
+ /** |
+ * Returns the default number format for the specified locale. |
+ * The default format is one of the styles provided by the other |
+ * factory methods: getNumberInstance, getCurrencyInstance or |
+ * getPercentInstance. Exactly which one is locale dependant. |
+ * @param inLocale the given locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale, |
+ UErrorCode&); |
+ |
+ /** |
+ * Creates the specified decimal format style of the desired locale. |
+ * @param desiredLocale the given locale. |
+ * @param choice the given style. |
+ * @param success Output param filled with success/failure status. |
+ * @return A new NumberFormat instance. |
+ * @draft ICU 4.2 |
+ */ |
+ static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success); |
+ |
+ |
+ /** |
+ * Returns a currency format for the current default locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&); |
+ |
+ /** |
+ * Returns a currency format for the specified locale. |
+ * @param inLocale the given locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale, |
+ UErrorCode&); |
+ |
+ /** |
+ * Returns a percentage format for the current default locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&); |
+ |
+ /** |
+ * Returns a percentage format for the specified locale. |
+ * @param inLocale the given locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale, |
+ UErrorCode&); |
+ |
+ /** |
+ * Returns a scientific format for the current default locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&); |
+ |
+ /** |
+ * Returns a scientific format for the specified locale. |
+ * @param inLocale the given locale. |
+ * @stable ICU 2.0 |
+ */ |
+ static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale, |
+ UErrorCode&); |
+ |
+ /** |
+ * Get the set of Locales for which NumberFormats are installed. |
+ * @param count Output param to receive the size of the locales |
+ * @stable ICU 2.0 |
+ */ |
+ static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); |
+ |
+#if !UCONFIG_NO_SERVICE |
+ /** |
+ * Register a new NumberFormatFactory. The factory will be adopted. |
+ * @param toAdopt the NumberFormatFactory instance to be adopted |
+ * @param status the in/out status code, no special meanings are assigned |
+ * @return a registry key that can be used to unregister this factory |
+ * @stable ICU 2.6 |
+ */ |
+ static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status); |
+ |
+ /** |
+ * Unregister a previously-registered NumberFormatFactory using the key returned from the |
+ * register call. Key becomes invalid after a successful call and should not be used again. |
+ * The NumberFormatFactory corresponding to the key will be deleted. |
+ * @param key the registry key returned by a previous call to registerFactory |
+ * @param status the in/out status code, no special meanings are assigned |
+ * @return TRUE if the factory for the key was successfully unregistered |
+ * @stable ICU 2.6 |
+ */ |
+ static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); |
+ |
+ /** |
+ * Return a StringEnumeration over the locales available at the time of the call, |
+ * including registered locales. |
+ * @return a StringEnumeration over the locales available at the time of the call |
+ * @stable ICU 2.6 |
+ */ |
+ static StringEnumeration* U_EXPORT2 getAvailableLocales(void); |
+#endif /* UCONFIG_NO_SERVICE */ |
+ |
+ /** |
+ * Returns true if grouping is used in this format. For example, |
+ * in the English locale, with grouping on, the number 1234567 |
+ * might be formatted as "1,234,567". The grouping separator as |
+ * well as the size of each group is locale dependant and is |
+ * determined by sub-classes of NumberFormat. |
+ * @see setGroupingUsed |
+ * @stable ICU 2.0 |
+ */ |
+ UBool isGroupingUsed(void) const; |
+ |
+ /** |
+ * Set whether or not grouping will be used in this format. |
+ * @param newValue True, grouping will be used in this format. |
+ * @see getGroupingUsed |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void setGroupingUsed(UBool newValue); |
+ |
+ /** |
+ * Returns the maximum number of digits allowed in the integer portion of a |
+ * number. |
+ * @return the maximum number of digits allowed in the integer portion of a |
+ * number. |
+ * @see setMaximumIntegerDigits |
+ * @stable ICU 2.0 |
+ */ |
+ int32_t getMaximumIntegerDigits(void) const; |
+ |
+ /** |
+ * Sets the maximum number of digits allowed in the integer portion of a |
+ * number. maximumIntegerDigits must be >= minimumIntegerDigits. If the |
+ * new value for maximumIntegerDigits is less than the current value |
+ * of minimumIntegerDigits, then minimumIntegerDigits will also be set to |
+ * the new value. |
+ * |
+ * @param newValue the new value for the maximum number of digits |
+ * allowed in the integer portion of a number. |
+ * @see getMaximumIntegerDigits |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void setMaximumIntegerDigits(int32_t newValue); |
+ |
+ /** |
+ * Returns the minimum number of digits allowed in the integer portion of a |
+ * number. |
+ * @return the minimum number of digits allowed in the integer portion of a |
+ * number. |
+ * @see setMinimumIntegerDigits |
+ * @stable ICU 2.0 |
+ */ |
+ int32_t getMinimumIntegerDigits(void) const; |
+ |
+ /** |
+ * Sets the minimum number of digits allowed in the integer portion of a |
+ * number. minimumIntegerDigits must be <= maximumIntegerDigits. If the |
+ * new value for minimumIntegerDigits exceeds the current value |
+ * of maximumIntegerDigits, then maximumIntegerDigits will also be set to |
+ * the new value. |
+ * @param newValue the new value to be set. |
+ * @see getMinimumIntegerDigits |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void setMinimumIntegerDigits(int32_t newValue); |
+ |
+ /** |
+ * Returns the maximum number of digits allowed in the fraction portion of a |
+ * number. |
+ * @return the maximum number of digits allowed in the fraction portion of a |
+ * number. |
+ * @see setMaximumFractionDigits |
+ * @stable ICU 2.0 |
+ */ |
+ int32_t getMaximumFractionDigits(void) 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 |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void setMaximumFractionDigits(int32_t newValue); |
+ |
+ /** |
+ * Returns the minimum number of digits allowed in the fraction portion of a |
+ * number. |
+ * @return the minimum number of digits allowed in the fraction portion of a |
+ * number. |
+ * @see setMinimumFractionDigits |
+ * @stable ICU 2.0 |
+ */ |
+ int32_t getMinimumFractionDigits(void) const; |
+ |
+ /** |
+ * 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 |
+ * @stable ICU 2.0 |
+ */ |
+ virtual void setMinimumFractionDigits(int32_t newValue); |
+ |
+ /** |
+ * Sets the currency used to display currency |
+ * amounts. This takes effect immediately, if this format is a |
+ * currency format. If this format is not a currency format, then |
+ * the currency is used if and when this object becomes a |
+ * currency format. |
+ * @param theCurrency a 3-letter ISO code indicating new currency |
+ * to use. It need not be null-terminated. May be the empty |
+ * string or NULL to indicate no currency. |
+ * @param ec input-output error code |
+ * @stable ICU 3.0 |
+ */ |
+ virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec); |
+ |
+ /** |
+ * Gets the currency used to display currency |
+ * amounts. This may be an empty string for some subclasses. |
+ * @return a 3-letter null-terminated ISO code indicating |
+ * the currency in use, or a pointer to the empty string. |
+ * @stable ICU 2.6 |
+ */ |
+ const UChar* getCurrency() const; |
+ |
+public: |
+ |
+ /** |
+ * Return the class ID for this class. This is useful for |
+ * comparing to a return value from getDynamicClassID(). Note that, |
+ * because NumberFormat is an abstract base class, no fully constructed object |
+ * will have the class ID returned by NumberFormat::getStaticClassID(). |
+ * @return The class ID for all objects of this class. |
+ * @stable ICU 2.0 |
+ */ |
+ 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. |
+ * <P> |
+ * @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. |
+ * @stable ICU 2.0 |
+ */ |
+ virtual UClassID getDynamicClassID(void) const = 0; |
+ |
+protected: |
+ |
+ /** |
+ * Default constructor for subclass use only. |
+ * @stable ICU 2.0 |
+ */ |
+ NumberFormat(); |
+ |
+ /** |
+ * Copy constructor. |
+ * @stable ICU 2.0 |
+ */ |
+ NumberFormat(const NumberFormat&); |
+ |
+ /** |
+ * Assignment operator. |
+ * @stable ICU 2.0 |
+ */ |
+ NumberFormat& operator=(const NumberFormat&); |
+ |
+ /** |
+ * Returns the currency in effect for this formatter. Subclasses |
+ * should override this method as needed. Unlike getCurrency(), |
+ * this method should never return "". |
+ * @result output parameter for null-terminated result, which must |
+ * have a capacity of at least 4 |
+ * @internal |
+ */ |
+ virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const; |
+ |
+private: |
+ |
+ /** |
+ * Creates the specified decimal format style of the desired locale. |
+ * @param desiredLocale the given locale. |
+ * @param choice the given style. |
+ * @param success Output param filled with success/failure status. |
+ * @return A new NumberFormat instance. |
+ */ |
+ static NumberFormat* makeInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success); |
+ |
+ UBool fGroupingUsed; |
+ int32_t fMaxIntegerDigits; |
+ int32_t fMinIntegerDigits; |
+ int32_t fMaxFractionDigits; |
+ int32_t fMinFractionDigits; |
+ UBool fParseIntegerOnly; |
+ |
+ // ISO currency code |
+ UChar fCurrency[4]; |
+ |
+ friend class ICUNumberFormatFactory; // access to makeInstance, EStyles |
+ friend class ICUNumberFormatService; |
+}; |
+ |
+#if !UCONFIG_NO_SERVICE |
+/** |
+ * A NumberFormatFactory is used to register new number formats. The factory |
+ * should be able to create any of the predefined formats for each locale it |
+ * supports. When registered, the locales it supports extend or override the |
+ * locale already supported by ICU. |
+ * |
+ * @stable ICU 2.6 |
+ */ |
+class U_I18N_API NumberFormatFactory : public UObject { |
+public: |
+ |
+ /** |
+ * Destructor |
+ * @stable ICU 3.0 |
+ */ |
+ virtual ~NumberFormatFactory(); |
+ |
+ /** |
+ * Return true if this factory will be visible. Default is true. |
+ * If not visible, the locales supported by this factory will not |
+ * be listed by getAvailableLocales. |
+ * @stable ICU 2.6 |
+ */ |
+ virtual UBool visible(void) const = 0; |
+ |
+ /** |
+ * Return the locale names directly supported by this factory. The number of names |
+ * is returned in count; |
+ * @stable ICU 2.6 |
+ */ |
+ virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0; |
+ |
+ /** |
+ * Return a number format of the appropriate type. If the locale |
+ * is not supported, return null. If the locale is supported, but |
+ * the type is not provided by this service, return null. Otherwise |
+ * return an appropriate instance of NumberFormat. |
+ * @stable ICU 2.6 |
+ */ |
+ virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0; |
+}; |
+ |
+/** |
+ * A NumberFormatFactory that supports a single locale. It can be visible or invisible. |
+ * @stable ICU 2.6 |
+ */ |
+class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory { |
+protected: |
+ /** |
+ * True if the locale supported by this factory is visible. |
+ * @stable ICU 2.6 |
+ */ |
+ const UBool _visible; |
+ |
+ /** |
+ * The locale supported by this factory, as a UnicodeString. |
+ * @stable ICU 2.6 |
+ */ |
+ UnicodeString _id; |
+ |
+public: |
+ /** |
+ * @stable ICU 2.6 |
+ */ |
+ SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE); |
+ |
+ /** |
+ * @stable ICU 3.0 |
+ */ |
+ virtual ~SimpleNumberFormatFactory(); |
+ |
+ /** |
+ * @stable ICU 2.6 |
+ */ |
+ virtual UBool visible(void) const; |
+ |
+ /** |
+ * @stable ICU 2.6 |
+ */ |
+ virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const; |
+}; |
+#endif /* #if !UCONFIG_NO_SERVICE */ |
+ |
+// ------------------------------------- |
+ |
+inline UBool |
+NumberFormat::isParseIntegerOnly() const |
+{ |
+ return fParseIntegerOnly; |
+} |
+ |
+inline UnicodeString& |
+NumberFormat::format(const Formattable& obj, |
+ UnicodeString& appendTo, |
+ UErrorCode& status) const { |
+ return Format::format(obj, appendTo, status); |
+} |
+ |
+U_NAMESPACE_END |
+ |
+#endif /* #if !UCONFIG_NO_FORMATTING */ |
+ |
+#endif // _NUMFMT |
+//eof |
Property changes on: icu46/source/i18n/unicode/numfmt.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |