ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 ******************************************************************************** 00003 * Copyright (C) 1997-2011, 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 00040 class NumberFormatTest; 00041 00042 U_NAMESPACE_BEGIN 00043 00044 #if !UCONFIG_NO_SERVICE 00045 class NumberFormatFactory; 00046 class StringEnumeration; 00047 #endif 00048 00165 class U_I18N_API NumberFormat : public Format { 00166 public: 00179 enum EAlignmentFields { 00180 kIntegerField, 00181 kFractionField, 00182 kDecimalSeparatorField, 00183 kExponentSymbolField, 00184 kExponentSignField, 00185 kExponentField, 00186 kGroupingSeparatorField, 00187 kCurrencyField, 00188 kPercentField, 00189 kPermillField, 00190 kSignField, 00191 00197 INTEGER_FIELD = kIntegerField, 00198 FRACTION_FIELD = kFractionField 00199 }; 00200 00205 virtual ~NumberFormat(); 00206 00213 virtual UBool operator==(const Format& other) const; 00214 00215 00216 using Format::format; 00217 00233 virtual UnicodeString& format(const Formattable& obj, 00234 UnicodeString& appendTo, 00235 FieldPosition& pos, 00236 UErrorCode& status) const; 00237 00254 virtual UnicodeString& format(const Formattable& obj, 00255 UnicodeString& appendTo, 00256 FieldPositionIterator* posIter, 00257 UErrorCode& status) const; 00258 00287 virtual void parseObject(const UnicodeString& source, 00288 Formattable& result, 00289 ParsePosition& parse_pos) const; 00290 00301 UnicodeString& format( double number, 00302 UnicodeString& appendTo) const; 00303 00314 UnicodeString& format( int32_t number, 00315 UnicodeString& appendTo) const; 00316 00327 UnicodeString& format( int64_t number, 00328 UnicodeString& appendTo) const; 00329 00342 virtual UnicodeString& format(double number, 00343 UnicodeString& appendTo, 00344 FieldPosition& pos) const = 0; 00359 virtual UnicodeString& format(double number, 00360 UnicodeString& appendTo, 00361 FieldPositionIterator* posIter, 00362 UErrorCode& status) const; 00375 virtual UnicodeString& format(int32_t number, 00376 UnicodeString& appendTo, 00377 FieldPosition& pos) const = 0; 00378 00393 virtual UnicodeString& format(int32_t number, 00394 UnicodeString& appendTo, 00395 FieldPositionIterator* posIter, 00396 UErrorCode& status) const; 00410 virtual UnicodeString& format(int64_t number, 00411 UnicodeString& appendTo, 00412 FieldPosition& pos) const; 00427 virtual UnicodeString& format(int64_t number, 00428 UnicodeString& appendTo, 00429 FieldPositionIterator* posIter, 00430 UErrorCode& status) const; 00431 00448 virtual UnicodeString& format(const StringPiece &number, 00449 UnicodeString& appendTo, 00450 FieldPositionIterator* posIter, 00451 UErrorCode& status) const; 00452 public: 00470 virtual UnicodeString& format(const DigitList &number, 00471 UnicodeString& appendTo, 00472 FieldPositionIterator* posIter, 00473 UErrorCode& status) const; 00474 00492 virtual UnicodeString& format(const DigitList &number, 00493 UnicodeString& appendTo, 00494 FieldPosition& pos, 00495 UErrorCode& status) const; 00496 00497 public: 00498 00509 UnicodeString& format(const Formattable& obj, 00510 UnicodeString& appendTo, 00511 UErrorCode& status) const; 00512 00534 virtual void parse(const UnicodeString& text, 00535 Formattable& result, 00536 ParsePosition& parsePosition) const = 0; 00537 00553 virtual void parse( const UnicodeString& text, 00554 Formattable& result, 00555 UErrorCode& status) const; 00556 00576 virtual Formattable& parseCurrency(const UnicodeString& text, 00577 Formattable& result, 00578 ParsePosition& pos) const; 00579 00591 UBool isParseIntegerOnly(void) const; 00592 00600 virtual void setParseIntegerOnly(UBool value); 00601 00609 virtual void setLenient(UBool enable); 00610 00619 virtual UBool isLenient(void) const; 00620 00629 static NumberFormat* U_EXPORT2 createInstance(UErrorCode&); 00630 00639 static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale, 00640 UErrorCode&); 00641 00650 static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale, 00651 UNumberFormatStyle style, 00652 UErrorCode& errorCode); 00653 00654 00659 static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&); 00660 00666 static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale, 00667 UErrorCode&); 00668 00673 static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&); 00674 00680 static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale, 00681 UErrorCode&); 00682 00687 static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&); 00688 00694 static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale, 00695 UErrorCode&); 00696 00702 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 00703 00704 #if !UCONFIG_NO_SERVICE 00705 00712 static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status); 00713 00723 static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status); 00724 00731 static StringEnumeration* U_EXPORT2 getAvailableLocales(void); 00732 #endif /* UCONFIG_NO_SERVICE */ 00733 00743 UBool isGroupingUsed(void) const; 00744 00751 virtual void setGroupingUsed(UBool newValue); 00752 00761 int32_t getMaximumIntegerDigits(void) const; 00762 00775 virtual void setMaximumIntegerDigits(int32_t newValue); 00776 00785 int32_t getMinimumIntegerDigits(void) const; 00786 00797 virtual void setMinimumIntegerDigits(int32_t newValue); 00798 00807 int32_t getMaximumFractionDigits(void) const; 00808 00819 virtual void setMaximumFractionDigits(int32_t newValue); 00820 00829 int32_t getMinimumFractionDigits(void) const; 00830 00841 virtual void setMinimumFractionDigits(int32_t newValue); 00842 00855 virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec); 00856 00864 const UChar* getCurrency() const; 00865 00866 public: 00867 00876 static UClassID U_EXPORT2 getStaticClassID(void); 00877 00889 virtual UClassID getDynamicClassID(void) const = 0; 00890 00891 protected: 00892 00897 NumberFormat(); 00898 00903 NumberFormat(const NumberFormat&); 00904 00909 NumberFormat& operator=(const NumberFormat&); 00910 00919 virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const; 00920 00921 private: 00922 00923 static UBool isStyleSupported(UNumberFormatStyle style); 00924 00932 static NumberFormat* makeInstance(const Locale& desiredLocale, 00933 UNumberFormatStyle style, 00934 UErrorCode& errorCode); 00935 00936 UBool fGroupingUsed; 00937 int32_t fMaxIntegerDigits; 00938 int32_t fMinIntegerDigits; 00939 int32_t fMaxFractionDigits; 00940 int32_t fMinFractionDigits; 00941 UBool fParseIntegerOnly; 00942 UBool fLenient; // TRUE => lenient parse is enabled 00943 00944 // ISO currency code 00945 UChar fCurrency[4]; 00946 00947 friend class ICUNumberFormatFactory; // access to makeInstance 00948 friend class ICUNumberFormatService; 00949 friend class ::NumberFormatTest; // access to isStyleSupported() 00950 }; 00951 00952 #if !UCONFIG_NO_SERVICE 00953 00961 class U_I18N_API NumberFormatFactory : public UObject { 00962 public: 00963 00968 virtual ~NumberFormatFactory(); 00969 00976 virtual UBool visible(void) const = 0; 00977 00983 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0; 00984 00992 virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0; 00993 }; 00994 00999 class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory { 01000 protected: 01005 const UBool _visible; 01006 01011 UnicodeString _id; 01012 01013 public: 01017 SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE); 01018 01022 virtual ~SimpleNumberFormatFactory(); 01023 01027 virtual UBool visible(void) const; 01028 01032 virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const; 01033 }; 01034 #endif /* #if !UCONFIG_NO_SERVICE */ 01035 01036 // ------------------------------------- 01037 01038 inline UBool 01039 NumberFormat::isParseIntegerOnly() const 01040 { 01041 return fParseIntegerOnly; 01042 } 01043 01044 inline UBool 01045 NumberFormat::isLenient() const 01046 { 01047 return fLenient; 01048 } 01049 01050 inline UnicodeString& 01051 NumberFormat::format(const Formattable& obj, 01052 UnicodeString& appendTo, 01053 UErrorCode& status) const { 01054 return Format::format(obj, appendTo, status); 01055 } 01056 01057 U_NAMESPACE_END 01058 01059 #endif /* #if !UCONFIG_NO_FORMATTING */ 01060 01061 #endif // _NUMFMT 01062 //eof