ICU 4.4.2 4.4.2

numfmt.h

Go to the documentation of this file.
00001 /*
00002 ********************************************************************************
00003 * Copyright (C) 1997-2010, 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 U_NAMESPACE_BEGIN
00041 
00042 #if !UCONFIG_NO_SERVICE
00043 class NumberFormatFactory;
00044 class StringEnumeration;
00045 #endif
00046 
00163 class U_I18N_API NumberFormat : public Format {
00164 public:
00165 
00179     enum EStyles {
00180         kNumberStyle,
00181         kCurrencyStyle,
00182         kPercentStyle,
00183         kScientificStyle,
00184         kIsoCurrencyStyle,
00185         kPluralCurrencyStyle,
00186         kStyleCount // ALWAYS LAST ENUM: number of styles
00187     };
00188 
00201     enum EAlignmentFields {
00202         kIntegerField,
00203         kFractionField,
00204         kDecimalSeparatorField,
00205         kExponentSymbolField,
00206         kExponentSignField,
00207         kExponentField,
00208         kGroupingSeparatorField,
00209         kCurrencyField,
00210         kPercentField,
00211         kPermillField,
00212         kSignField,
00213 
00219         INTEGER_FIELD        = kIntegerField,
00220         FRACTION_FIELD        = kFractionField
00221     };
00222 
00227     virtual ~NumberFormat();
00228 
00235     virtual UBool operator==(const Format& other) const;
00236 
00237 
00238     using Format::format;
00239 
00255     virtual UnicodeString& format(const Formattable& obj,
00256                                   UnicodeString& appendTo,
00257                                   FieldPosition& pos,
00258                                   UErrorCode& status) const;
00259 
00276     virtual UnicodeString& format(const Formattable& obj,
00277                                   UnicodeString& appendTo,
00278                                   FieldPositionIterator* posIter,
00279                                   UErrorCode& status) const;
00280 
00309     virtual void parseObject(const UnicodeString& source,
00310                              Formattable& result,
00311                              ParsePosition& parse_pos) const;
00312 
00323     UnicodeString& format(  double number,
00324                             UnicodeString& appendTo) const;
00325 
00336     UnicodeString& format(  int32_t number,
00337                             UnicodeString& appendTo) const;
00338 
00349     UnicodeString& format(  int64_t number,
00350                             UnicodeString& appendTo) const;
00351 
00364     virtual UnicodeString& format(double number,
00365                                   UnicodeString& appendTo,
00366                                   FieldPosition& pos) const = 0;
00381     virtual UnicodeString& format(double number,
00382                                   UnicodeString& appendTo,
00383                                   FieldPositionIterator* posIter,
00384                                   UErrorCode& status) const;
00397     virtual UnicodeString& format(int32_t number,
00398                                   UnicodeString& appendTo,
00399                                   FieldPosition& pos) const = 0;
00400 
00415     virtual UnicodeString& format(int32_t number,
00416                                   UnicodeString& appendTo,
00417                                   FieldPositionIterator* posIter,
00418                                   UErrorCode& status) const;
00432     virtual UnicodeString& format(int64_t number,
00433                                   UnicodeString& appendTo,
00434                                   FieldPosition& pos) const;
00449     virtual UnicodeString& format(int64_t number,
00450                                   UnicodeString& appendTo,
00451                                   FieldPositionIterator* posIter,
00452                                   UErrorCode& status) const;
00453 
00470     virtual UnicodeString& format(const StringPiece &number,
00471                                   UnicodeString& appendTo,
00472                                   FieldPositionIterator* posIter,
00473                                   UErrorCode& status) const;
00474 public:
00492     virtual UnicodeString& format(const DigitList &number,
00493                                   UnicodeString& appendTo,
00494                                   FieldPositionIterator* posIter,
00495                                   UErrorCode& status) const;
00496 
00514     virtual UnicodeString& format(const DigitList &number,
00515                                   UnicodeString& appendTo,
00516                                   FieldPosition& pos,
00517                                   UErrorCode& status) const;
00518 
00519 public:
00520 
00531     UnicodeString& format(const Formattable& obj,
00532                           UnicodeString& appendTo,
00533                           UErrorCode& status) const;
00534 
00556     virtual void parse(const UnicodeString& text,
00557                        Formattable& result,
00558                        ParsePosition& parsePosition) const = 0;
00559 
00575     virtual void parse( const UnicodeString& text,
00576                         Formattable& result,
00577                         UErrorCode& status) const;
00578 
00598     virtual Formattable& parseCurrency(const UnicodeString& text,
00599                                        Formattable& result,
00600                                        ParsePosition& pos) const;
00601 
00613     UBool isParseIntegerOnly(void) const;
00614 
00622     virtual void setParseIntegerOnly(UBool value);
00623 
00632     static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
00633 
00642     static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
00643                                         UErrorCode&);
00644 
00653     static NumberFormat* U_EXPORT2 createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00654 
00655 
00660     static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
00661 
00667     static NumberFormat* U_EXPORT2 createCurrencyInstance(const Locale& inLocale,
00668                                                 UErrorCode&);
00669 
00674     static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
00675 
00681     static NumberFormat* U_EXPORT2 createPercentInstance(const Locale& inLocale,
00682                                                UErrorCode&);
00683 
00688     static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
00689 
00695     static NumberFormat* U_EXPORT2 createScientificInstance(const Locale& inLocale,
00696                                                 UErrorCode&);
00697 
00703     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00704 
00705 #if !UCONFIG_NO_SERVICE
00706 
00713     static URegistryKey U_EXPORT2 registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
00714 
00724     static UBool U_EXPORT2 unregister(URegistryKey key, UErrorCode& status);
00725 
00732     static StringEnumeration* U_EXPORT2 getAvailableLocales(void);
00733 #endif /* UCONFIG_NO_SERVICE */
00734 
00744     UBool isGroupingUsed(void) const;
00745 
00752     virtual void setGroupingUsed(UBool newValue);
00753 
00762     int32_t getMaximumIntegerDigits(void) const;
00763 
00776     virtual void setMaximumIntegerDigits(int32_t newValue);
00777 
00786     int32_t getMinimumIntegerDigits(void) const;
00787 
00798     virtual void setMinimumIntegerDigits(int32_t newValue);
00799 
00808     int32_t getMaximumFractionDigits(void) const;
00809 
00820     virtual void setMaximumFractionDigits(int32_t newValue);
00821 
00830     int32_t getMinimumFractionDigits(void) const;
00831 
00842     virtual void setMinimumFractionDigits(int32_t newValue);
00843 
00856     virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec);
00857 
00865     const UChar* getCurrency() const;
00866 
00867 public:
00868 
00877     static UClassID U_EXPORT2 getStaticClassID(void);
00878 
00890     virtual UClassID getDynamicClassID(void) const = 0;
00891 
00892 protected:
00893 
00898     NumberFormat();
00899 
00904     NumberFormat(const NumberFormat&);
00905 
00910     NumberFormat& operator=(const NumberFormat&);
00911 
00920     virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const;
00921 
00922 private:
00923 
00931     static NumberFormat* makeInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00932 
00933     UBool      fGroupingUsed;
00934     int32_t     fMaxIntegerDigits;
00935     int32_t     fMinIntegerDigits;
00936     int32_t     fMaxFractionDigits;
00937     int32_t     fMinFractionDigits;
00938     UBool      fParseIntegerOnly;
00939 
00940     // ISO currency code
00941     UChar      fCurrency[4];
00942 
00943     friend class ICUNumberFormatFactory; // access to makeInstance, EStyles
00944     friend class ICUNumberFormatService;
00945 };
00946 
00947 #if !UCONFIG_NO_SERVICE
00948 
00956 class U_I18N_API NumberFormatFactory : public UObject {
00957 public:
00958 
00963     virtual ~NumberFormatFactory();
00964 
00971     virtual UBool visible(void) const = 0;
00972 
00978     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
00979 
00987     virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
00988 };
00989 
00994 class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory {
00995 protected:
01000     const UBool _visible;
01001 
01006     UnicodeString _id;
01007 
01008 public:
01012     SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE);
01013 
01017     virtual ~SimpleNumberFormatFactory();
01018 
01022     virtual UBool visible(void) const;
01023 
01027     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
01028 };
01029 #endif /* #if !UCONFIG_NO_SERVICE */
01030 
01031 // -------------------------------------
01032 
01033 inline UBool
01034 NumberFormat::isParseIntegerOnly() const
01035 {
01036     return fParseIntegerOnly;
01037 }
01038 
01039 inline UnicodeString&
01040 NumberFormat::format(const Formattable& obj,
01041                      UnicodeString& appendTo,
01042                      UErrorCode& status) const {
01043     return Format::format(obj, appendTo, status);
01044 }
01045 
01046 U_NAMESPACE_END
01047 
01048 #endif /* #if !UCONFIG_NO_FORMATTING */
01049 
01050 #endif // _NUMFMT
01051 //eof
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines