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