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
00250 class U_I18N_API ChoiceFormat: public NumberFormat {
00251 public:
00261 ChoiceFormat(const UnicodeString& pattern,
00262 UErrorCode& status);
00263
00264
00275 ChoiceFormat(const double* limits,
00276 const UnicodeString* formats,
00277 int32_t count );
00278
00296 ChoiceFormat(const double* limits,
00297 const UBool* closures,
00298 const UnicodeString* formats,
00299 int32_t count);
00300
00307 ChoiceFormat(const ChoiceFormat& that);
00308
00315 const ChoiceFormat& operator=(const ChoiceFormat& that);
00316
00321 virtual ~ChoiceFormat();
00322
00330 virtual Format* clone(void) const;
00331
00340 virtual UBool operator==(const Format& other) const;
00341
00350 virtual void applyPattern(const UnicodeString& pattern,
00351 UErrorCode& status);
00352
00363 virtual void applyPattern(const UnicodeString& pattern,
00364 UParseError& parseError,
00365 UErrorCode& status);
00374 virtual UnicodeString& toPattern(UnicodeString &pattern) const;
00375
00376 #ifdef U_USE_CHOICE_FORMAT_DEPRECATES
00377
00390 virtual void adoptChoices(double* limitsToAdopt,
00391 UnicodeString* formatsToAdopt,
00392 int32_t count );
00393
00404 virtual void adoptChoices(double* limitsToAdopt,
00405 UBool* closuresToAdopt,
00406 UnicodeString* formatsToAdopt,
00407 int32_t count);
00408 #endif
00409
00422 virtual void setChoices(const double* limitsToCopy,
00423 const UnicodeString* formatsToCopy,
00424 int32_t count );
00425
00435 virtual void setChoices(const double* limits,
00436 const UBool* closures,
00437 const UnicodeString* formats,
00438 int32_t count);
00439
00447 virtual const double* getLimits(int32_t& count) const;
00448
00457 virtual const UBool* getClosures(int32_t& count) const;
00458
00466 virtual const UnicodeString* getFormats(int32_t& count) const;
00467
00479 virtual UnicodeString& format(double number,
00480 UnicodeString& appendTo,
00481 FieldPosition& pos) const;
00493 virtual UnicodeString& format(int32_t number,
00494 UnicodeString& appendTo,
00495 FieldPosition& pos) const;
00496
00508 virtual UnicodeString& format(int64_t number,
00509 UnicodeString& appendTo,
00510 FieldPosition& pos) const;
00511
00526 virtual UnicodeString& format(const Formattable* objs,
00527 int32_t cnt,
00528 UnicodeString& appendTo,
00529 FieldPosition& pos,
00530 UErrorCode& success) const;
00545 virtual UnicodeString& format(const Formattable& obj,
00546 UnicodeString& appendTo,
00547 FieldPosition& pos,
00548 UErrorCode& status) const;
00549
00561 UnicodeString& format(const Formattable& obj,
00562 UnicodeString& appendTo,
00563 UErrorCode& status) const;
00564
00576 UnicodeString& format( double number,
00577 UnicodeString& appendTo) const;
00578
00590 UnicodeString& format( int32_t number,
00591 UnicodeString& appendTo) const;
00592
00611 virtual void parse(const UnicodeString& text,
00612 Formattable& result,
00613 ParsePosition& parsePosition) const;
00614
00631 virtual void parse(const UnicodeString& text,
00632 Formattable& result,
00633 UErrorCode& status) const;
00634
00635
00636 public:
00648 virtual UClassID getDynamicClassID(void) const;
00649
00661 static UClassID getStaticClassID(void);
00662
00663 private:
00664
00665
00666
00667
00674 static double stod(const UnicodeString& string);
00675
00683 static UnicodeString& dtos(double value, UnicodeString& string);
00684
00685 ChoiceFormat();
00686
00698 ChoiceFormat(const UnicodeString& newPattern,
00699 UParseError& parseError,
00700 UErrorCode& status);
00701
00702 friend class MessageFormat;
00740 double* fChoiceLimits;
00741 UBool* fClosures;
00742 UnicodeString* fChoiceFormats;
00743 int32_t fCount;
00744 };
00745
00746 inline UnicodeString&
00747 ChoiceFormat::format(const Formattable& obj,
00748 UnicodeString& appendTo,
00749 UErrorCode& status) const {
00750
00751
00752 return NumberFormat::format(obj, appendTo, status);
00753 }
00754
00755 inline UnicodeString&
00756 ChoiceFormat::format(double number,
00757 UnicodeString& appendTo) const {
00758 return NumberFormat::format(number, appendTo);
00759 }
00760
00761 inline UnicodeString&
00762 ChoiceFormat::format(int32_t number,
00763 UnicodeString& appendTo) const {
00764 return NumberFormat::format(number, appendTo);
00765 }
00766 U_NAMESPACE_END
00767
00768 #endif
00769
00770 #endif // _CHOICFMT
00771