00001 /* 00002 * Copyright © {1997-1999}, 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 #include "unicode/unistr.h" 00025 #include "unicode/format.h" 00026 00027 class Locale; 00028 00115 class U_I18N_API NumberFormat : public Format { 00116 public: 00117 00126 enum EAlignmentFields { 00127 kIntegerField, 00128 kFractionField, 00129 00130 00136 INTEGER_FIELD = kIntegerField, 00137 FRACTION_FIELD = kFractionField 00138 }; 00139 00140 virtual ~NumberFormat(); 00141 00147 virtual UBool operator==(const Format& other) const; 00148 00164 virtual UnicodeString& format(const Formattable& obj, 00165 UnicodeString& toAppendTo, 00166 FieldPosition& pos, 00167 UErrorCode& status) const; 00168 00197 virtual void parseObject(const UnicodeString& source, 00198 Formattable& result, 00199 ParsePosition& parse_pos) const; 00200 00210 UnicodeString& format( double number, 00211 UnicodeString& output) const; 00212 00213 UnicodeString& format( int32_t number, 00214 UnicodeString& output) const; 00215 00228 virtual UnicodeString& format(double number, 00229 UnicodeString& toAppendTo, 00230 FieldPosition& pos) const = 0; 00231 virtual UnicodeString& format(int32_t number, 00232 UnicodeString& toAppendTo, 00233 FieldPosition& pos) const = 0; 00234 00239 UnicodeString& format(const Formattable& obj, 00240 UnicodeString& result, 00241 UErrorCode& status) const; 00242 00264 virtual void parse(const UnicodeString& text, 00265 Formattable& result, 00266 ParsePosition& parsePosition) const = 0; 00267 00282 virtual void parse( const UnicodeString& text, 00283 Formattable& result, 00284 UErrorCode& status) const; 00285 00295 UBool isParseIntegerOnly(void) const; 00296 00302 virtual void setParseIntegerOnly(UBool value); 00303 00312 static NumberFormat* createInstance(UErrorCode&); 00313 00321 static NumberFormat* createInstance(const Locale& inLocale, 00322 UErrorCode&); 00323 00328 static NumberFormat* createCurrencyInstance(UErrorCode&); 00329 00334 static NumberFormat* createCurrencyInstance(const Locale& inLocale, 00335 UErrorCode&); 00336 00341 static NumberFormat* createPercentInstance(UErrorCode&); 00342 00347 static NumberFormat* createPercentInstance(const Locale& inLocale, 00348 UErrorCode&); 00349 00354 static NumberFormat* createScientificInstance(UErrorCode&); 00355 00360 static NumberFormat* createScientificInstance(const Locale& inLocale, 00361 UErrorCode&); 00362 00367 static const Locale* getAvailableLocales(int32_t& count); 00368 00378 UBool isGroupingUsed(void) const; 00379 00385 virtual void setGroupingUsed(UBool newValue); 00386 00393 int32_t getMaximumIntegerDigits(void) const; 00394 00405 virtual void setMaximumIntegerDigits(int32_t newValue); 00406 00413 int32_t getMinimumIntegerDigits(void) const; 00414 00424 virtual void setMinimumIntegerDigits(int32_t newValue); 00425 00432 int32_t getMaximumFractionDigits(void) const; 00433 00443 virtual void setMaximumFractionDigits(int32_t newValue); 00444 00451 int32_t getMinimumFractionDigits(void) const; 00452 00462 virtual void setMinimumFractionDigits(int32_t newValue); 00463 00464 public: 00465 00477 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } 00478 00491 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } 00492 00493 protected: 00494 00499 NumberFormat(); 00500 00505 NumberFormat(const NumberFormat&); 00506 00511 NumberFormat& operator=(const NumberFormat&); 00512 00513 protected: 00514 static const int32_t fgMaxIntegerDigits; 00515 static const int32_t fgMinIntegerDigits; 00516 00517 private: 00518 static char fgClassID; 00519 00520 enum EStyles { 00521 kNumberStyle, 00522 kCurrencyStyle, 00523 kPercentStyle, 00524 kScientificStyle, 00525 kStyleCount // ALWAYS LAST ENUM: number of styles 00526 }; 00527 00528 static NumberFormat* createInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success); 00529 00530 static const int32_t fgNumberPatternsCount; 00531 static const UnicodeString fgLastResortNumberPatterns[]; 00532 00533 UBool fGroupingUsed; 00534 int32_t fMaxIntegerDigits; 00535 int32_t fMinIntegerDigits; 00536 int32_t fMaxFractionDigits; 00537 int32_t fMinFractionDigits; 00538 UBool fParseIntegerOnly; 00539 }; 00540 00541 // ------------------------------------- 00542 00543 inline UBool 00544 NumberFormat::isParseIntegerOnly() const 00545 { 00546 return fParseIntegerOnly; 00547 } 00548 00549 inline UnicodeString& 00550 NumberFormat::format(const Formattable& obj, 00551 UnicodeString& result, 00552 UErrorCode& status) const { 00553 return Format::format(obj, result, status); 00554 } 00555 00556 #endif // _NUMFMT 00557 //eof