Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

numfmt.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) {1997-2003}, International Business Machines Corporation and others. All Rights Reserved.
00003 ********************************************************************************
00004 *
00005 * File NUMFMT.H
00006 *
00007 * Modification History:
00008 *
00009 *   Date        Name        Description
00010 *   02/19/97    aliu        Converted from java.
00011 *   03/18/97    clhuang     Updated per C++ implementation.
00012 *   04/17/97    aliu        Changed DigitCount to int per code review.
00013 *    07/20/98    stephen        JDK 1.2 sync up. Added scientific support.
00014 *                            Changed naming conventions to match C++ guidelines
00015 *                            Derecated Java style constants (eg, INTEGER_FIELD)
00016 ********************************************************************************
00017 */
00018 
00019 #ifndef NUMFMT_H
00020 #define NUMFMT_H
00021 
00022 
00023 #include "unicode/utypes.h"
00024 
00025 #if !UCONFIG_NO_FORMATTING
00026 
00027 #include "unicode/unistr.h"
00028 #include "unicode/format.h"
00029 #include "unicode/unum.h" // UNumberFormatStyle
00030 #include "unicode/locid.h"
00031 
00032 U_NAMESPACE_BEGIN
00033 
00034 class NumberFormatFactory;
00035 class StringEnumeration;
00036 
00037 typedef const void* URegistryKey;
00038 
00133 class U_I18N_API NumberFormat : public Format {
00134 public:
00135 
00144     enum EAlignmentFields {
00145         kIntegerField,
00146         kFractionField,
00147 
00148 
00154         INTEGER_FIELD        = kIntegerField,
00155         FRACTION_FIELD        = kFractionField
00156     };
00157 
00162     virtual ~NumberFormat();
00163 
00170     virtual UBool operator==(const Format& other) const;
00171 
00187     virtual UnicodeString& format(const Formattable& obj,
00188                                   UnicodeString& appendTo,
00189                                   FieldPosition& pos,
00190                                   UErrorCode& status) const;
00191 
00220     virtual void parseObject(const UnicodeString& source,
00221                              Formattable& result,
00222                              ParsePosition& parse_pos) const;
00223 
00234     UnicodeString& format(  double number,
00235                             UnicodeString& appendTo) const;
00236 
00247     UnicodeString& format(  int32_t number,
00248                             UnicodeString& appendTo) const;
00249 
00260     UnicodeString& format(  int64_t number,
00261                             UnicodeString& appendTo) const;
00262 
00275     virtual UnicodeString& format(double number,
00276                                   UnicodeString& appendTo,
00277                                   FieldPosition& pos) const = 0;
00290     virtual UnicodeString& format(int32_t number,
00291                                   UnicodeString& appendTo,
00292                                   FieldPosition& pos) const = 0;
00293 
00307     virtual UnicodeString& format(int64_t number,
00308                                   UnicodeString& appendTo,
00309                                   FieldPosition& pos) const;
00320     UnicodeString& format(const Formattable& obj,
00321                           UnicodeString& appendTo,
00322                           UErrorCode& status) const;
00323 
00345     virtual void parse(const UnicodeString& text,
00346                        Formattable& result,
00347                        ParsePosition& parsePosition) const = 0;
00348 
00364     virtual void parse( const UnicodeString& text,
00365                         Formattable& result,
00366                         UErrorCode& status) const;
00367 
00379     UBool isParseIntegerOnly(void) const;
00380 
00388     virtual void setParseIntegerOnly(UBool value);
00389 
00398     static NumberFormat* createInstance(UErrorCode&);
00399 
00408     static NumberFormat* createInstance(const Locale& inLocale,
00409                                         UErrorCode&);
00410 
00415     static NumberFormat* createCurrencyInstance(UErrorCode&);
00416 
00422     static NumberFormat* createCurrencyInstance(const Locale& inLocale,
00423                                                 UErrorCode&);
00424 
00429     static NumberFormat* createPercentInstance(UErrorCode&);
00430 
00436     static NumberFormat* createPercentInstance(const Locale& inLocale,
00437                                                UErrorCode&);
00438 
00443     static NumberFormat* createScientificInstance(UErrorCode&);
00444 
00450     static NumberFormat* createScientificInstance(const Locale& inLocale,
00451                                                 UErrorCode&);
00452 
00458     static const Locale* getAvailableLocales(int32_t& count);
00459 
00467     static URegistryKey registerFactory(NumberFormatFactory* toAdopt, UErrorCode& status);
00468 
00478     static UBool unregister(URegistryKey key, UErrorCode& status);
00479 
00486     static StringEnumeration* getAvailableLocales(void);
00487 
00497     UBool isGroupingUsed(void) const;
00498 
00505     virtual void setGroupingUsed(UBool newValue);
00506 
00515     int32_t getMaximumIntegerDigits(void) const;
00516 
00529     virtual void setMaximumIntegerDigits(int32_t newValue);
00530 
00539     int32_t getMinimumIntegerDigits(void) const;
00540 
00551     virtual void setMinimumIntegerDigits(int32_t newValue);
00552 
00561     int32_t getMaximumFractionDigits(void) const;
00562 
00573     virtual void setMaximumFractionDigits(int32_t newValue);
00574 
00583     int32_t getMinimumFractionDigits(void) const;
00584 
00595     virtual void setMinimumFractionDigits(int32_t newValue);
00596 
00608     virtual void setCurrency(const UChar* theCurrency);
00609 
00617     const UChar* getCurrency() const;
00618 
00625     virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00626 
00633     virtual const char* getLocaleInternal(ULocDataLocaleType type, UErrorCode &status) const;
00634 
00635 public:
00636 
00648     virtual UClassID getDynamicClassID(void) const = 0;
00649 
00650 protected:
00651 
00656     NumberFormat();
00657 
00662     NumberFormat(const NumberFormat&);
00663 
00668     NumberFormat& operator=(const NumberFormat&);
00669 
00670 private:
00671     static const int32_t fgMaxIntegerDigits;
00672     static const int32_t fgMinIntegerDigits;
00673 
00674 protected:
00675     char validLocale[50];
00676     char actualLocale[50];
00677 
00678 private:
00679 
00680     enum EStyles {
00681         kNumberStyle,
00682         kCurrencyStyle,
00683         kPercentStyle,
00684         kScientificStyle,
00685         kStyleCount // ALWAYS LAST ENUM: number of styles
00686     };
00687     
00697     static NumberFormat* createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00698 
00706         static NumberFormat* makeInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00707     static const int32_t    fgNumberPatternsCount;
00708     static const UChar* const fgLastResortNumberPatterns[];
00709 
00710     UBool      fGroupingUsed;
00711     int32_t     fMaxIntegerDigits;
00712     int32_t     fMinIntegerDigits;
00713     int32_t     fMaxFractionDigits;
00714     int32_t     fMinFractionDigits;
00715     UBool      fParseIntegerOnly;
00716 
00717     // ISO currency code
00718     UChar      currency[4];
00719 
00720     friend class ICUNumberFormatFactory; // access to makeInstance, EStyles
00721     friend class ICUNumberFormatService;
00722 };
00723 
00732 class U_I18N_API NumberFormatFactory : public UObject {
00733 public:
00734 
00741     virtual UBool visible(void) const = 0;
00742 
00748     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const = 0;
00749 
00757     virtual NumberFormat* createFormat(const Locale& loc, UNumberFormatStyle formatType) = 0;
00758 };
00759 
00764 class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory {
00765 protected:
00770     const UBool _visible;
00771 
00776     UnicodeString _id;
00777 
00778 public:
00782     SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE)
00783       : _visible(visible)
00784       , _id(locale.getName())
00785     {
00786     }
00787 
00791     virtual UBool visible(void) const {
00792         return _visible;
00793     }
00794 
00798     virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const 
00799       {
00800         if (U_SUCCESS(status)) {
00801           count = 1;
00802           return &_id;
00803         }
00804         count = 0;
00805         return NULL;
00806       }
00807 };
00808 
00809 
00810 // -------------------------------------
00811 
00812 inline UBool
00813 NumberFormat::isParseIntegerOnly() const
00814 {
00815     return fParseIntegerOnly;
00816 }
00817 
00818 inline UnicodeString&
00819 NumberFormat::format(const Formattable& obj,
00820                      UnicodeString& appendTo,
00821                      UErrorCode& status) const {
00822     return Format::format(obj, appendTo, status);
00823 }
00824 
00825 U_NAMESPACE_END
00826 
00827 #endif /* #if !UCONFIG_NO_FORMATTING */
00828 
00829 #endif // _NUMFMT
00830 //eof

Generated on Mon Nov 24 14:35:34 2003 for ICU 2.8 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001