numfmt.h

Go to the documentation of this file.
00001 /*
00002 ********************************************************************************
00003 * Copyright (C) 1997-2012, 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 
00166 class U_I18N_API NumberFormat : public Format {
00167 public:
00183     enum EAlignmentFields {
00185         kIntegerField = UNUM_INTEGER_FIELD,
00187         kFractionField = UNUM_FRACTION_FIELD,
00189         kDecimalSeparatorField = UNUM_DECIMAL_SEPARATOR_FIELD,
00191         kExponentSymbolField = UNUM_EXPONENT_SYMBOL_FIELD,
00193         kExponentSignField = UNUM_EXPONENT_SIGN_FIELD,
00195         kExponentField = UNUM_EXPONENT_FIELD,
00197         kGroupingSeparatorField = UNUM_GROUPING_SEPARATOR_FIELD,
00199         kCurrencyField = UNUM_CURRENCY_FIELD,
00201         kPercentField = UNUM_PERCENT_FIELD,
00203         kPermillField = UNUM_PERMILL_FIELD,
00205         kSignField = UNUM_SIGN_FIELD,
00206 
00212         INTEGER_FIELD        = UNUM_INTEGER_FIELD,
00214         FRACTION_FIELD       = UNUM_FRACTION_FIELD
00215     };
00216 
00221     virtual ~NumberFormat();
00222 
00229     virtual UBool operator==(const Format& other) const;
00230 
00231 
00232     using Format::format;
00233 
00249     virtual UnicodeString& format(const Formattable& obj,
00250                                   UnicodeString& appendTo,
00251                                   FieldPosition& pos,
00252                                   UErrorCode& status) const;
00253 
00270     virtual UnicodeString& format(const Formattable& obj,
00271                                   UnicodeString& appendTo,
00272                                   FieldPositionIterator* posIter,
00273                                   UErrorCode& status) const;
00274 
00303     virtual void parseObject(const UnicodeString& source,
00304                              Formattable& result,
00305                              ParsePosition& parse_pos) const;
00306 
00317     UnicodeString& format(  double number,
00318                             UnicodeString& appendTo) const;
00319 
00330     UnicodeString& format(  int32_t number,
00331                             UnicodeString& appendTo) const;
00332 
00343     UnicodeString& format(  int64_t number,
00344                             UnicodeString& appendTo) const;
00345 
00358     virtual UnicodeString& format(double number,
00359                                   UnicodeString& appendTo,
00360                                   FieldPosition& pos) const = 0;
00375     virtual UnicodeString& format(double number,
00376                                   UnicodeString& appendTo,
00377                                   FieldPosition& pos,
00378                                   UErrorCode &status) const;
00393     virtual UnicodeString& format(double number,
00394                                   UnicodeString& appendTo,
00395                                   FieldPositionIterator* posIter,
00396                                   UErrorCode& status) const;
00409     virtual UnicodeString& format(int32_t number,
00410                                   UnicodeString& appendTo,
00411                                   FieldPosition& pos) const = 0;
00412 
00426     virtual UnicodeString& format(int32_t number,
00427                                   UnicodeString& appendTo,
00428                                   FieldPosition& pos,
00429                                   UErrorCode &status) const;
00430 
00445     virtual UnicodeString& format(int32_t number,
00446                                   UnicodeString& appendTo,
00447                                   FieldPositionIterator* posIter,
00448                                   UErrorCode& status) const;
00462     virtual UnicodeString& format(int64_t number,
00463                                   UnicodeString& appendTo,
00464                                   FieldPosition& pos) const;
00465 
00479     virtual UnicodeString& format(int64_t number,
00480                                   UnicodeString& appendTo,
00481                                   FieldPosition& pos,
00482                                   UErrorCode& status) const;
00497     virtual UnicodeString& format(int64_t number,
00498                                   UnicodeString& appendTo,
00499                                   FieldPositionIterator* posIter,
00500                                   UErrorCode& status) const;
00501 
00518     virtual UnicodeString& format(const StringPiece &number,
00519                                   UnicodeString& appendTo,
00520                                   FieldPositionIterator* posIter,
00521                                   UErrorCode& status) const;
00522 public:
00540     virtual UnicodeString& format(const DigitList &number,
00541                                   UnicodeString& appendTo,
00542                                   FieldPositionIterator* posIter,
00543                                   UErrorCode& status) const;
00544 
00562     virtual UnicodeString& format(const DigitList &number,
00563                                   UnicodeString& appendTo,
00564                                   FieldPosition& pos,
00565                                   UErrorCode& status) const;
00566 
00567 public:
00568 
00579     UnicodeString& format(const Formattable& obj,
00580                           UnicodeString& appendTo,
00581                           UErrorCode& status) const;
00582 
00602     virtual void parse(const UnicodeString& text,
00603                        Formattable& result,
00604                        ParsePosition& parsePosition) const = 0;
00605 
00619     virtual void parse(const UnicodeString& text,
00620                        Formattable& result,
00621                        UErrorCode& status) const;
00622 
00623 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
00643     virtual CurrencyAmount* parseCurrency(const UnicodeString& text,
00644                                           ParsePosition& pos) const;
00645 
00657     UBool isParseIntegerOnly(void) const;
00658 
00666     virtual void setParseIntegerOnly(UBool value);
00667 
00675     virtual void setLenient(UBool enable);
00676 
00685     virtual UBool isLenient(void) const;
00686 
00695     static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
00696 
00705     static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
00706                                         UErrorCode&);
00707 
00716     static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale,
00717                                                   UNumberFormatStyle style,
00718                                                   UErrorCode& errorCode);
00719 
00724     static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
00725 
00731     static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
00732                                                 UErrorCode&);
00733 
00738     static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
00739 
00745     static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
00746                                                UErrorCode&);
00747 
00752     static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
00753 
00759     static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
00760                                                 UErrorCode&);
00761 
00767     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00768 
00769 #if !UCONFIG_NO_SERVICE
00770 
00777     static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
00778 
00788     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00789 
00796     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00797 #endif /* UCONFIG_NO_SERVICE */
00798 
00808     UBool isGroupingUsed(void) const;
00809 
00816     virtual void setGroupingUsed(UBool newValue);
00817 
00826     int32_t getMaximumIntegerDigits(void) const;
00827 
00840     virtual void setMaximumIntegerDigits(int32_t newValue);
00841 
00850     int32_t getMinimumIntegerDigits(void) const;
00851 
00862     virtual void setMinimumIntegerDigits(int32_t newValue);
00863 
00872     int32_t getMaximumFractionDigits(void) const;
00873 
00884     virtual void setMaximumFractionDigits(int32_t newValue);
00885 
00894     int32_t getMinimumFractionDigits(void) const;
00895 
00906     virtual void setMinimumFractionDigits(int32_t newValue);
00907 
00920     virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
00921 
00929     const UChar* getCurrency() const;
00930 
00931 public:
00932 
00941     static UClassID U_EXPORT2 getStaticClassID(void);
00942 
00954     virtual UClassID getDynamicClassID(void) const = 0;
00955 
00956 protected:
00957 
00962     NumberFormat();
00963 
00968     NumberFormat(const NumberFormat&);
00969 
00974     NumberFormat& operator=(const NumberFormat&);
00975 
00984     virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
00985 
00986 private:
00987 
00988     static UBool isStyleSupported(UNumberFormatStyle style);
00989 
00997     static NumberFormat* makeInstance(const Locale& desiredLocale,
00998                                       UNumberFormatStyle style,
00999                                       UErrorCode& errorCode);
01000 
01001     UBool      fGroupingUsed;
01002     int32_t     fMaxIntegerDigits;
01003     int32_t     fMinIntegerDigits;
01004     int32_t     fMaxFractionDigits;
01005     int32_t     fMinFractionDigits;
01006     UBool      fParseIntegerOnly;
01007     UBool      fLenient; // TRUE => lenient parse is enabled
01008 
01009     // ISO currency code
01010     UChar      fCurrency[4];
01011 
01012     friend class ICUNumberFormatFactory; // access to makeInstance
01013     friend class ICUNumberFormatService;
01014     friend class ::NumberFormatTest;  // access to isStyleSupported()
01015 };
01016 
01017 #if !UCONFIG_NO_SERVICE
01018 
01026 class U_I18N_API NumberFormatFactory : public UObject {
01027 public:
01028 
01033     virtual ~NumberFormatFactory();
01034 
01041     virtual UBool visible(void) const = 0;
01042 
01048     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
01049 
01057     virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
01058 };
01059 
01064 class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory {
01065 protected:
01070     const UBool _visible;
01071 
01076     UnicodeString _id;
01077 
01078 public:
01082     SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
01083 
01087     virtual ~SimpleNumberFormatFactory();
01088 
01092     virtual UBool visible(void) const;
01093 
01097     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
01098 };
01099 #endif /* #if !UCONFIG_NO_SERVICE */
01100 
01101 // -------------------------------------
01102 
01103 inline UBool
01104 NumberFormat::isParseIntegerOnly() const
01105 {
01106     return fParseIntegerOnly;
01107 }
01108 
01109 inline UBool
01110 NumberFormat::isLenient() const
01111 {
01112     return fLenient;
01113 }
01114 
01115 inline UnicodeString&
01116 NumberFormat::format(const Formattable& obj,
01117                      UnicodeString& appendTo,
01118                      UErrorCode& status) const {
01119     return Format::format(obj, appendTo, status);
01120 }
01121 
01122 U_NAMESPACE_END
01123 
01124 #endif /* #if !UCONFIG_NO_FORMATTING */
01125 
01126 #endif // _NUMFMT
01127 //eof

Generated on 25 Nov 2014 for ICU 50.1.2 by  doxygen 1.4.7