ICU 51.2  51.2
numfmt.h
Go to the documentation of this file.
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
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines