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
00026 #include "unicode/utypes.h"
00027 #include "unicode/unistr.h"
00028 #include "unicode/numfmt.h"
00029 #include "unicode/fieldpos.h"
00030 #include "unicode/format.h"
00031
00032 U_NAMESPACE_BEGIN
00033
00034 class MessageFormat;
00035
00243 class U_I18N_API ChoiceFormat: public NumberFormat {
00244 public:
00254 ChoiceFormat(const UnicodeString& newPattern,
00255 UErrorCode& status);
00256
00257
00268 ChoiceFormat(const double* limits,
00269 const UnicodeString* formats,
00270 int32_t count );
00271
00288 ChoiceFormat(const double* limits,
00289 const UBool* closures,
00290 const UnicodeString* formats,
00291 int32_t count);
00292
00297 ChoiceFormat(const ChoiceFormat&);
00298
00303 const ChoiceFormat& operator=(const ChoiceFormat&);
00304
00309 virtual ~ChoiceFormat();
00310
00316 virtual Format* clone(void) const;
00317
00323 virtual UBool operator==(const Format& other) const;
00324
00333 virtual void applyPattern(const UnicodeString& pattern,
00334 UErrorCode& status);
00335
00346 virtual void applyPattern(const UnicodeString& pattern,
00347 UParseError& parseError,
00348 UErrorCode& status);
00353 virtual UnicodeString& toPattern(UnicodeString &pattern) const;
00354
00368 virtual void adoptChoices(double* limitsToAdopt,
00369 UnicodeString* formatsToAdopt,
00370 int32_t count );
00371
00382 virtual void adoptChoices(double* limitsToAdopt,
00383 UBool* closuresToAdopt,
00384 UnicodeString* formatsToAdopt,
00385 int32_t count);
00386
00399 virtual void setChoices(const double* limitsToCopy,
00400 const UnicodeString* formatsToCopy,
00401 int32_t count );
00402
00411 virtual void setChoices(const double* limits,
00412 const UBool* closures,
00413 const UnicodeString* formats,
00414 int32_t count);
00415
00421 virtual const double* getLimits(int32_t& count) const;
00422
00428 virtual const UBool* getClosures(int32_t& count) const;
00429
00435 virtual const UnicodeString* getFormats(int32_t& count) const;
00436
00448 virtual UnicodeString& format(double number,
00449 UnicodeString& toAppendTo,
00450 FieldPosition& pos) const;
00456 virtual UnicodeString& format(int32_t number,
00457 UnicodeString& toAppendTo,
00458 FieldPosition& pos) const;
00464 virtual UnicodeString& format(const Formattable* objs,
00465 int32_t cnt,
00466 UnicodeString& toAppendTo,
00467 FieldPosition& pos,
00468 UErrorCode& success) const;
00474 virtual UnicodeString& format(const Formattable& obj,
00475 UnicodeString& toAppendTo,
00476 FieldPosition& pos,
00477 UErrorCode& status) const;
00478
00483 UnicodeString& format(const Formattable& obj,
00484 UnicodeString& result,
00485 UErrorCode& status) const;
00486
00491 UnicodeString& format( double number,
00492 UnicodeString& output) const;
00493
00498 UnicodeString& format( int32_t number,
00499 UnicodeString& output) const;
00500
00521 virtual void parse(const UnicodeString& text,
00522 Formattable& result,
00523 ParsePosition& parsePosition) const;
00524 virtual void parse(const UnicodeString& text,
00525 Formattable& result,
00526 UErrorCode& status) const;
00527
00528
00529 public:
00541 virtual UClassID getDynamicClassID(void) const;
00542
00554 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564 static double nextDouble(double d, UBool positive);
00565
00573 static double nextDouble(double d );
00574
00581 static double previousDouble(double d );
00582
00583 private:
00584
00585
00586
00587
00595 static double stod(const UnicodeString& string);
00596
00605 static UnicodeString& dtos(double value, UnicodeString& string);
00606
00607
00608
00609 static const char fgClassID;
00610
00611 static const UChar fgPositiveInfinity[];
00612 static const UChar fgNegativeInfinity[];
00622 ChoiceFormat(const UnicodeString& newPattern,
00623 UParseError& parseError,
00624 UErrorCode& status);
00625
00626 friend class MessageFormat;
00664 double* fChoiceLimits;
00665 UBool* fClosures;
00666 UnicodeString* fChoiceFormats;
00667 int32_t fCount;
00668 };
00669
00670 inline UClassID
00671 ChoiceFormat::getDynamicClassID() const
00672 {
00673 return ChoiceFormat::getStaticClassID();
00674 }
00675
00676 inline double ChoiceFormat::nextDouble( double d )
00677 {
00678 return ChoiceFormat::nextDouble( d, TRUE );
00679 }
00680
00681 inline double ChoiceFormat::previousDouble( double d )
00682 {
00683 return ChoiceFormat::nextDouble( d, FALSE );
00684 }
00685
00686 inline UnicodeString&
00687 ChoiceFormat::format(const Formattable& obj,
00688 UnicodeString& result,
00689 UErrorCode& status) const {
00690
00691
00692 return NumberFormat::format(obj, result, status);
00693 }
00694
00695 inline UnicodeString&
00696 ChoiceFormat::format(double number,
00697 UnicodeString& output) const {
00698 return NumberFormat::format(number, output);
00699 }
00700
00701 inline UnicodeString&
00702 ChoiceFormat::format(int32_t number,
00703 UnicodeString& output) const {
00704 return NumberFormat::format(number, output);
00705 }
00706 U_NAMESPACE_END
00707
00708 #endif // _CHOICFMT
00709