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
00032 #if !UCONFIG_NO_FORMATTING
00033
00034 #include "unicode/unistr.h"
00035 #include "unicode/numfmt.h"
00036 #include "unicode/fieldpos.h"
00037 #include "unicode/format.h"
00038
00039 U_NAMESPACE_BEGIN
00040
00041 class MessageFormat;
00042
00259 class U_I18N_API ChoiceFormat: public NumberFormat {
00260 public:
00270 ChoiceFormat(const UnicodeString& pattern,
00271 UErrorCode& status);
00272
00273
00284 ChoiceFormat(const double* limits,
00285 const UnicodeString* formats,
00286 int32_t count );
00287
00305 ChoiceFormat(const double* limits,
00306 const UBool* closures,
00307 const UnicodeString* formats,
00308 int32_t count);
00309
00316 ChoiceFormat(const ChoiceFormat& that);
00317
00324 const ChoiceFormat& operator=(const ChoiceFormat& that);
00325
00330 virtual ~ChoiceFormat();
00331
00339 virtual Format* clone(void) const;
00340
00349 virtual UBool operator==(const Format& other) const;
00350
00359 virtual void applyPattern(const UnicodeString& pattern,
00360 UErrorCode& status);
00361
00372 virtual void applyPattern(const UnicodeString& pattern,
00373 UParseError& parseError,
00374 UErrorCode& status);
00383 virtual UnicodeString& toPattern(UnicodeString &pattern) const;
00384
00397 virtual void setChoices(const double* limitsToCopy,
00398 const UnicodeString* formatsToCopy,
00399 int32_t count );
00400
00410 virtual void setChoices(const double* limits,
00411 const UBool* closures,
00412 const UnicodeString* formats,
00413 int32_t count);
00414
00422 virtual const double* getLimits(int32_t& count) const;
00423
00432 virtual const UBool* getClosures(int32_t& count) const;
00433
00441 virtual const UnicodeString* getFormats(int32_t& count) const;
00442
00454 virtual UnicodeString& format(double number,
00455 UnicodeString& appendTo,
00456 FieldPosition& pos) const;
00468 virtual UnicodeString& format(int32_t number,
00469 UnicodeString& appendTo,
00470 FieldPosition& pos) const;
00471
00483 virtual UnicodeString& format(int64_t number,
00484 UnicodeString& appendTo,
00485 FieldPosition& pos) const;
00486
00501 virtual UnicodeString& format(const Formattable* objs,
00502 int32_t cnt,
00503 UnicodeString& appendTo,
00504 FieldPosition& pos,
00505 UErrorCode& success) const;
00520 virtual UnicodeString& format(const Formattable& obj,
00521 UnicodeString& appendTo,
00522 FieldPosition& pos,
00523 UErrorCode& status) const;
00524
00536 UnicodeString& format(const Formattable& obj,
00537 UnicodeString& appendTo,
00538 UErrorCode& status) const;
00539
00551 UnicodeString& format( double number,
00552 UnicodeString& appendTo) const;
00553
00565 UnicodeString& format( int32_t number,
00566 UnicodeString& appendTo) const;
00567
00586 virtual void parse(const UnicodeString& text,
00587 Formattable& result,
00588 ParsePosition& parsePosition) const;
00589
00606 virtual void parse(const UnicodeString& text,
00607 Formattable& result,
00608 UErrorCode& status) const;
00609
00610
00611 public:
00623 virtual UClassID getDynamicClassID(void) const;
00624
00636 static UClassID U_EXPORT2 getStaticClassID(void);
00637
00638 private:
00639
00640
00641
00642
00649 static double stod(const UnicodeString& string);
00650
00658 static UnicodeString& dtos(double value, UnicodeString& string);
00659
00660 ChoiceFormat();
00661
00673 ChoiceFormat(const UnicodeString& newPattern,
00674 UParseError& parseError,
00675 UErrorCode& status);
00676
00677 friend class MessageFormat;
00715 double* fChoiceLimits;
00716 UBool* fClosures;
00717 UnicodeString* fChoiceFormats;
00718 int32_t fCount;
00719 };
00720
00721 inline UnicodeString&
00722 ChoiceFormat::format(const Formattable& obj,
00723 UnicodeString& appendTo,
00724 UErrorCode& status) const {
00725
00726
00727 return NumberFormat::format(obj, appendTo, status);
00728 }
00729
00730 inline UnicodeString&
00731 ChoiceFormat::format(double number,
00732 UnicodeString& appendTo) const {
00733 return NumberFormat::format(number, appendTo);
00734 }
00735
00736 inline UnicodeString&
00737 ChoiceFormat::format(int32_t number,
00738 UnicodeString& appendTo) const {
00739 return NumberFormat::format(number, appendTo);
00740 }
00741 U_NAMESPACE_END
00742
00743 #endif
00744
00745 #endif // _CHOICFMT
00746