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