/* * Copyright © {1997-1999}, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************** * * File NUMFMT.H * * Modification History: * * Date Name Description * 02/19/97 aliu Converted from java. * 03/18/97 clhuang Updated per C++ implementation. * 04/17/97 aliu Changed DigitCount to int per code review. * 07/20/98 stephen JDK 1.2 sync up. Added scientific support. * Changed naming conventions to match C++ guidelines * Derecated Java style constants (eg, INTEGER_FIELD) ******************************************************************************** */ #ifndef NUMFMT_H #define NUMFMT_H #include "unicode/utypes.h" #include "unicode/unistr.h" #include "unicode/format.h" class Locale; class U_I18N_API NumberFormat : public Format { public: enum EAlignmentFields { kIntegerField, kFractionField, INTEGER_FIELD = kIntegerField, FRACTION_FIELD = kFractionField }; virtual ~NumberFormat(); virtual bool_t operator==(const Format& other) const; virtual UnicodeString& format(const Formattable& obj, UnicodeString& toAppendTo, FieldPosition& pos, UErrorCode& status) const; virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const; UnicodeString& format( double number, UnicodeString& output) const; UnicodeString& format( int32_t number, UnicodeString& output) const; virtual UnicodeString& format(double number, UnicodeString& toAppendTo, FieldPosition& pos) const = 0; virtual UnicodeString& format(int32_t number, UnicodeString& toAppendTo, FieldPosition& pos) const = 0; UnicodeString& format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const; virtual void parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const = 0; virtual void parse( const UnicodeString& text, Formattable& result, UErrorCode& status) const; bool_t isParseIntegerOnly(void) const; virtual void setParseIntegerOnly(bool_t value); static NumberFormat* createInstance(UErrorCode&); static NumberFormat* createInstance(const Locale& inLocale, UErrorCode&); static NumberFormat* createCurrencyInstance(UErrorCode&); static NumberFormat* createCurrencyInstance(const Locale& inLocale, UErrorCode&); static NumberFormat* createPercentInstance(UErrorCode&); static NumberFormat* createPercentInstance(const Locale& inLocale, UErrorCode&); static NumberFormat* createScientificInstance(UErrorCode&); static NumberFormat* createScientificInstance(const Locale& inLocale, UErrorCode&); static const Locale* getAvailableLocales(int32_t& count); bool_t isGroupingUsed(void) const; virtual void setGroupingUsed(bool_t newValue); int32_t getMaximumIntegerDigits(void) const; virtual void setMaximumIntegerDigits(int32_t newValue); int32_t getMinimumIntegerDigits(void) const; virtual void setMinimumIntegerDigits(int32_t newValue); int32_t getMaximumFractionDigits(void) const; virtual void setMaximumFractionDigits(int32_t newValue); int32_t getMinimumFractionDigits(void) const; virtual void setMinimumFractionDigits(int32_t newValue); public: static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } protected: NumberFormat(); NumberFormat(const NumberFormat&); NumberFormat& operator=(const NumberFormat&); protected: static const int32_t fgMaxIntegerDigits; static const int32_t fgMinIntegerDigits; private: static char fgClassID; enum EStyles { kNumberStyle, kCurrencyStyle, kPercentStyle, kScientificStyle, kStyleCount // ALWAYS LAST ENUM: number of styles }; static NumberFormat* createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success); static const int32_t fgNumberPatternsCount; static const UnicodeString fgLastResortNumberPatterns[]; bool_t fGroupingUsed; int32_t fMaxIntegerDigits; int32_t fMinIntegerDigits; int32_t fMaxFractionDigits; int32_t fMinFractionDigits; bool_t fParseIntegerOnly; }; // ------------------------------------- inline bool_t NumberFormat::isParseIntegerOnly() const { return fParseIntegerOnly; } inline UnicodeString& NumberFormat::format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const { return Format::format(obj, result, status); } #endif // _NUMFMT //eof