|
ICU 51.2
51.2
|
00001 /* 00002 ******************************************************************************** 00003 * Copyright (C) 1997-2013, International Business Machines Corporation and others. 00004 * All Rights Reserved. 00005 ******************************************************************************** 00006 * 00007 * File NUMFMT.H 00008 * 00009 * Modification History: 00010 * 00011 * Date Name Description 00012 * 02/19/97 aliu Converted from java. 00013 * 03/18/97 clhuang Updated per C++ implementation. 00014 * 04/17/97 aliu Changed DigitCount to int per code review. 00015 * 07/20/98 stephen JDK 1.2 sync up. Added scientific support. 00016 * Changed naming conventions to match C++ guidelines 00017 * Derecated Java style constants (eg, INTEGER_FIELD) 00018 ******************************************************************************** 00019 */ 00020 00021 #ifndef NUMFMT_H 00022 #define NUMFMT_H 00023 00024 00025 #include "unicode/utypes.h" 00026 00032 #if !UCONFIG_NO_FORMATTING 00033 00034 #include "unicode/unistr.h" 00035 #include "unicode/format.h" 00036 #include "unicode/unum.h" // UNumberFormatStyle 00037 #include "unicode/locid.h" 00038 #include "unicode/stringpiece.h" 00039 #include "unicode/curramt.h" 00040 00041 class NumberFormatTest; 00042 00043 U_NAMESPACE_BEGIN 00044 00045 #if !UCONFIG_NO_SERVICE 00046 class NumberFormatFactory; 00047 class StringEnumeration; 00048 #endif 00049 00169 class U_I18N_API NumberFormat : public Format { 00170 public: 00186 enum EAlignmentFields { 00188 kIntegerField = UNUM_INTEGER_FIELD, 00190 kFractionField = UNUM_FRACTION_FIELD, 00192 kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD, 00194 kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD, 00196 kExponentSignField = UNUM_EXPONENT_SIGN_FIELD, 00198 kExponentField = UNUM_EXPONENT_FIELD, 00200 kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD, 00202 kCurrencyField = UNUM_CURRENCY_FIELD, 00204 kPercentField = UNUM_PERCENT_FIELD, 00206 kPermillField = UNUM_PERMILL_FIELD, 00208 kSignField = UNUM_SIGN_FIELD, 00209 00215 INTEGER_FIELD = UNUM_INTEGER_FIELD, 00217 FRACTION_FIELD = UNUM_FRACTION_FIELD 00218 }; 00219 00224 virtual ~NumberFormat(); 00225 00232 virtual UBool operator==(const Format& other) const; 00233 00234 00235 using Format::format; 00236 00252 virtual UnicodeString& format(const Formattable& obj, 00253 UnicodeString& appendTo, 00254 FieldPosition& pos, 00255 UErrorCode& status) const; 00256 00273 virtual UnicodeString& format(const Formattable& obj, 00274 UnicodeString& appendTo, 00275 FieldPositionIterator* posIter, 00276 UErrorCode& status) const; 00277 00306 virtual void parseObject(const UnicodeString& source, 00307 Formattable& result, 00308 ParsePosition& parse_pos) const; 00309 00320 UnicodeString& format( double number, 00321 UnicodeString& appendTo) const; 00322 00333 UnicodeString& format( int32_t number, 00334 UnicodeString& appendTo) const; 00335 00346 UnicodeString& format( int64_t number, 00347 UnicodeString& appendTo) const; 00348 00361 virtual UnicodeString& format(double number, 00362 UnicodeString& appendTo, 00363 FieldPosition& pos) const = 0; 00378 virtual UnicodeString& format(double number, 00379 UnicodeString& appendTo, 00380 FieldPosition& pos, 00381 UErrorCode &status) const; 00396 virtual UnicodeString& format(double number, 00397 UnicodeString& appendTo, 00398 FieldPositionIterator* posIter, 00399 UErrorCode& status) const; 00412 virtual UnicodeString& format(int32_t number, 00413 UnicodeString& appendTo, 00414 FieldPosition& pos) const = 0; 00415 00429 virtual UnicodeString& format(int32_t number, 00430 UnicodeString& appendTo, 00431 FieldPosition& pos, 00432 UErrorCode &status) const; 00433 00448 virtual UnicodeString& format(int32_t number, 00449 UnicodeString& appendTo, 00450 FieldPositionIterator* posIter, 00451 UErrorCode& status) const; 00465 virtual UnicodeString& format(int64_t number, 00466 UnicodeString& appendTo, 00467 FieldPosition& pos) const; 00468 00482 virtual UnicodeString& format(int64_t number, 00483 UnicodeString& appendTo, 00484 FieldPosition& pos, 00485 UErrorCode& status) const; 00500 virtual UnicodeString& format(int64_t number, 00501 UnicodeString& appendTo, 00502 FieldPositionIterator* posIter, 00503 UErrorCode& status) const; 00504 00521 virtual UnicodeString& format(const StringPiece &number, 00522 UnicodeString& appendTo, 00523 FieldPositionIterator* posIter, 00524 UErrorCode& status) const; 00525 public: 00543 virtual UnicodeString& format(const DigitList &number, 00544 UnicodeString& appendTo, 00545 FieldPositionIterator* posIter, 00546 UErrorCode& status) const; 00547 00565 virtual UnicodeString& format(const DigitList &number, 00566 UnicodeString& appendTo, 00567 FieldPosition& pos, 00568 UErrorCode& status) const; 00569 00570 public: 00571 00582 UnicodeString& format(const Formattable& obj, 00583 UnicodeString& appendTo, 00584 UErrorCode& status) const; 00585 00605 virtual void parse(const UnicodeString& text, 00606 Formattable& result, 00607 ParsePosition& parsePosition) const = 0; 00608 00622 virtual void parse(const UnicodeString& text, 00623 Formattable& result, 00624 UErrorCode& status) const; 00625 00645 virtual CurrencyAmount* parseCurrency(const UnicodeString& text, 00646 ParsePosition& pos) const; 00647 00659 UBool isParseIntegerOnly(void) const; 00660 00668 virtual void setParseIntegerOnly(UBool value); 00669 00677 virtual void setLenient(UBool enable); 00678 00687 virtual UBool isLenient(void) const; 00688 00697 static NumberFormat* U_EXPORT2 createInstance(UErrorCode&); 00698 00707 static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale, 00708 UErrorCode&); 00709 00718 static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale, 00719 UNumberFormatStyle style, 00720 UErrorCode& errorCode); 00721 00726 static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&); 00727 00733 static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale, 00734 UErrorCode&); 00735 00740 static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&); 00741 00747 static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale, 00748 UErrorCode&); 00749 00754 static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&); 00755 00761 static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale, 00762 UErrorCode&); 00763 00769 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 00770 00771 #if !UCONFIG_NO_SERVICE 00772 00779 static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status); 00780 00790 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); 00791 00798 static StringEnumeration* U_EXPORT2 getAvailableLocales(void); 00799 #endif /* UCONFIG_NO_SERVICE */ 00800 00810 UBool isGroupingUsed(void) const; 00811 00818 virtual void setGroupingUsed(UBool newValue); 00819 00828 int32_t getMaximumIntegerDigits(void) const; 00829 00842 virtual void setMaximumIntegerDigits(int32_t newValue); 00843 00852 int32_t getMinimumIntegerDigits(void) const; 00853 00864 virtual void setMinimumIntegerDigits(int32_t newValue); 00865 00874 int32_t getMaximumFractionDigits(void) const; 00875 00886 virtual void setMaximumFractionDigits(int32_t newValue); 00887 00896 int32_t getMinimumFractionDigits(void) const; 00897 00908 virtual void setMinimumFractionDigits(int32_t newValue); 00909 00922 virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec); 00923 00931 const UChar* getCurrency() const; 00932 00933 public: 00934 00943 static UClassID U_EXPORT2 getStaticClassID(void); 00944 00956 virtual UClassID getDynamicClassID(void) const = 0; 00957 00958 protected: 00959 00964 NumberFormat(); 00965 00970 NumberFormat(const NumberFormat&); 00971 00976 NumberFormat& operator=(const NumberFormat&); 00977 00986 virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const; 00987 00988 #ifndef U_HIDE_INTERNAL_API 00989 00995 static NumberFormat* makeInstance(const Locale& desiredLocale, 00996 UNumberFormatStyle style, 00997 UBool mustBeDecimalFormat, 00998 UErrorCode& errorCode); 00999 #endif /* U_HIDE_INTERNAL_API */ 01000 01001 private: 01002 01003 static UBool isStyleSupported(UNumberFormatStyle style); 01004 01012 static NumberFormat* makeInstance(const Locale& desiredLocale, 01013 UNumberFormatStyle style, 01014 UErrorCode& errorCode); 01015 01016 UBool fGroupingUsed; 01017 int32_t fMaxIntegerDigits; 01018 int32_t fMinIntegerDigits; 01019 int32_t fMaxFractionDigits; 01020 int32_t fMinFractionDigits; 01021 UBool fParseIntegerOnly; 01022 UBool fLenient; // TRUE => lenient parse is enabled 01023 01024 // ISO currency code 01025 UChar fCurrency[4]; 01026 01027 friend class ICUNumberFormatFactory; // access to makeInstance 01028 friend class ICUNumberFormatService; 01029 friend class ::NumberFormatTest; // access to isStyleSupported() 01030 }; 01031 01032 #if !UCONFIG_NO_SERVICE 01033 01041 class U_I18N_API NumberFormatFactory : public UObject { 01042 public: 01043 01048 virtual ~NumberFormatFactory(); 01049 01056 virtual UBool visible(void) const = 0; 01057 01063 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0; 01064 01072 virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0; 01073 }; 01074 01079 class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory { 01080 protected: 01085 const UBool _visible; 01086 01091 UnicodeString _id; 01092 01093 public: 01097 SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE); 01098 01102 virtual ~SimpleNumberFormatFactory(); 01103 01107 virtual UBool visible(void) const; 01108 01112 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const; 01113 }; 01114 #endif /* #if !UCONFIG_NO_SERVICE */ 01115 01116 // ------------------------------------- 01117 01118 inline UBool 01119 NumberFormat::isParseIntegerOnly() const 01120 { 01121 return fParseIntegerOnly; 01122 } 01123 01124 inline UBool 01125 NumberFormat::isLenient() const 01126 { 01127 return fLenient; 01128 } 01129 01130 inline UnicodeString& 01131 NumberFormat::format(const Formattable& obj, 01132 UnicodeString& appendTo, 01133 UErrorCode& status) const { 01134 return Format::format(obj, appendTo, status); 01135 } 01136 01137 U_NAMESPACE_END 01138 01139 #endif /* #if !UCONFIG_NO_FORMATTING */ 01140 01141 #endif // _NUMFMT 01142 //eof
1.7.6.1