00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef CHOICFMT_H
00023 #define CHOICFMT_H
00024
00025 #include "unicode/utypes.h"
00026
00027 #if !UCONFIG_NO_FORMATTING
00028
00029 #include "unicode/unistr.h"
00030 #include "unicode/numfmt.h"
00031 #include "unicode/fieldpos.h"
00032 #include "unicode/format.h"
00033
00034 U_NAMESPACE_BEGIN
00035
00036 class MessageFormat;
00037
00254 class U_I18N_API ChoiceFormat: public NumberFormat {
00255 public:
00265 ChoiceFormat(const UnicodeString& pattern,
00266 UErrorCode& status);
00267
00268
00279 ChoiceFormat(const double* limits,
00280 const UnicodeString* formats,
00281 int32_t count );
00282
00300 ChoiceFormat(const double* limits,
00301 const UBool* closures,
00302 const UnicodeString* formats,
00303 int32_t count);
00304
00311 ChoiceFormat(const ChoiceFormat& that);
00312
00319 const ChoiceFormat& operator=(const ChoiceFormat& that);
00320
00325 virtual ~ChoiceFormat();
00326
00334 virtual Format* clone(void) const;
00335
00344 virtual UBool operator==(const Format& other) const;
00345
00354 virtual void applyPattern(const UnicodeString& pattern,
00355 UErrorCode& status);
00356
00367 virtual void applyPattern(const UnicodeString& pattern,
00368 UParseError& parseError,
00369 UErrorCode& status);
00378 virtual UnicodeString& toPattern(UnicodeString &pattern) const;
00379
00380 #ifdef U_USE_CHOICE_FORMAT_DEPRECATES
00381
00394 virtual void adoptChoices(double* limitsToAdopt,
00395 UnicodeString* formatsToAdopt,
00396 int32_t count );
00397
00408 virtual void adoptChoices(double* limitsToAdopt,
00409 UBool* closuresToAdopt,
00410 UnicodeString* formatsToAdopt,
00411 int32_t count);
00412 #endif
00413
00426 virtual void setChoices(const double* limitsToCopy,
00427 const UnicodeString* formatsToCopy,
00428 int32_t count );
00429
00439 virtual void setChoices(const double* limits,
00440 const UBool* closures,
00441 const UnicodeString* formats,
00442 int32_t count);
00443
00451 virtual const double* getLimits(int32_t& count) const;
00452
00461 virtual const UBool* getClosures(int32_t& count) const;
00462
00470 virtual const UnicodeString* getFormats(int32_t& count) const;
00471
00483 virtual UnicodeString& format(double number,
00484 UnicodeString& appendTo,
00485 FieldPosition& pos) const;
00497 virtual UnicodeString& format(int32_t number,
00498 UnicodeString& appendTo,
00499 FieldPosition& pos) const;
00500
00512 virtual UnicodeString& format(int64_t number,
00513 UnicodeString& appendTo,
00514 FieldPosition& pos) const;
00515
00530 virtual UnicodeString& format(const Formattable* objs,
00531 int32_t cnt,
00532 UnicodeString& appendTo,
00533 FieldPosition& pos,
00534 UErrorCode& success) const;
00549 virtual UnicodeString& format(const Formattable& obj,
00550 UnicodeString& appendTo,
00551 FieldPosition& pos,
00552 UErrorCode& status) const;
00553
00565 UnicodeString& format(const Formattable& obj,
00566 UnicodeString& appendTo,
00567 UErrorCode& status) const;
00568
00580 UnicodeString& format( double number,
00581 UnicodeString& appendTo) const;
00582
00594 UnicodeString& format( int32_t number,
00595 UnicodeString& appendTo) const;
00596
00615 virtual void parse(const UnicodeString& text,
00616 Formattable& result,
00617 ParsePosition& parsePosition) const;
00618
00635 virtual void parse(const UnicodeString& text,
00636 Formattable& result,
00637 UErrorCode& status) const;
00638
00639
00640 public:
00652 virtual UClassID getDynamicClassID(void) const;
00653
00665 static UClassID U_EXPORT2 getStaticClassID(void);
00666
00667 private:
00668
00669
00670
00671
00678 static double stod(const UnicodeString& string);
00679
00687 static UnicodeString& dtos(double value, UnicodeString& string);
00688
00689 ChoiceFormat();
00690
00702 ChoiceFormat(const UnicodeString& newPattern,
00703 UParseError& parseError,
00704 UErrorCode& status);
00705
00706 friend class MessageFormat;
00744 double* fChoiceLimits;
00745 UBool* fClosures;
00746 UnicodeString* fChoiceFormats;
00747 int32_t fCount;
00748 };
00749
00750 inline UnicodeString&
00751 ChoiceFormat::format(const Formattable& obj,
00752 UnicodeString& appendTo,
00753 UErrorCode& status) const {
00754
00755
00756 return NumberFormat::format(obj, appendTo, status);
00757 }
00758
00759 inline UnicodeString&
00760 ChoiceFormat::format(double number,
00761 UnicodeString& appendTo) const {
00762 return NumberFormat::format(number, appendTo);
00763 }
00764
00765 inline UnicodeString&
00766 ChoiceFormat::format(int32_t number,
00767 UnicodeString& appendTo) const {
00768 return NumberFormat::format(number, appendTo);
00769 }
00770 U_NAMESPACE_END
00771
00772 #endif
00773
00774 #endif // _CHOICFMT
00775