00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#ifndef NUMFMT_H
00020
#define NUMFMT_H
00021
00022
00023
#include "unicode/utypes.h"
00024
00025
#if !UCONFIG_NO_FORMATTING
00026
00027
#include "unicode/unistr.h"
00028
#include "unicode/format.h"
00029
#include "unicode/unum.h"
00030
#include "unicode/locid.h"
00031
00032
U_NAMESPACE_BEGIN
00033
00034
class NumberFormatFactory;
00035
class StringEnumeration;
00036
00037
typedef const void* URegistryKey;
00038
00133 class U_I18N_API NumberFormat :
public Format {
00134
public:
00135
00144 enum EAlignmentFields {
00145 kIntegerField,
00146 kFractionField,
00147
00148
00154 INTEGER_FIELD = kIntegerField,
00155 FRACTION_FIELD = kFractionField
00156 };
00157
00162
virtual ~NumberFormat();
00163
00170
virtual UBool operator==(
const Format& other)
const;
00171
00187
virtual UnicodeString& format(
const Formattable& obj,
00188
UnicodeString& appendTo,
00189
FieldPosition& pos,
00190 UErrorCode& status)
const;
00191
00220
virtual void parseObject(
const UnicodeString& source,
00221
Formattable& result,
00222
ParsePosition& parse_pos)
const;
00223
00234
UnicodeString& format(
double number,
00235
UnicodeString& appendTo)
const;
00236
00247
UnicodeString& format( int32_t number,
00248
UnicodeString& appendTo)
const;
00249
00260
UnicodeString& format( int64_t number,
00261
UnicodeString& appendTo)
const;
00262
00275
virtual UnicodeString& format(
double number,
00276
UnicodeString& appendTo,
00277
FieldPosition& pos)
const = 0;
00290
virtual UnicodeString& format(int32_t number,
00291
UnicodeString& appendTo,
00292
FieldPosition& pos)
const = 0;
00293
00307
virtual UnicodeString& format(int64_t number,
00308
UnicodeString& appendTo,
00309
FieldPosition& pos)
const;
00320
UnicodeString& format(
const Formattable& obj,
00321
UnicodeString& appendTo,
00322 UErrorCode& status)
const;
00323
00345
virtual void parse(
const UnicodeString& text,
00346
Formattable& result,
00347
ParsePosition& parsePosition)
const = 0;
00348
00364
virtual void parse(
const UnicodeString& text,
00365
Formattable& result,
00366 UErrorCode& status)
const;
00367
00379
UBool isParseIntegerOnly(
void) const;
00380
00388 virtual
void setParseIntegerOnly(UBool value);
00389
00398 static NumberFormat* createInstance(UErrorCode&);
00399
00408 static NumberFormat* createInstance(const
Locale& inLocale,
00409 UErrorCode&);
00410
00415 static NumberFormat* createCurrencyInstance(UErrorCode&);
00416
00422 static NumberFormat* createCurrencyInstance(const
Locale& inLocale,
00423 UErrorCode&);
00424
00429 static NumberFormat* createPercentInstance(UErrorCode&);
00430
00436 static NumberFormat* createPercentInstance(const
Locale& inLocale,
00437 UErrorCode&);
00438
00443 static NumberFormat* createScientificInstance(UErrorCode&);
00444
00450 static NumberFormat* createScientificInstance(const
Locale& inLocale,
00451 UErrorCode&);
00452
00458 static const
Locale* getAvailableLocales(int32_t& count);
00459
00467 static URegistryKey registerFactory(
NumberFormatFactory* toAdopt, UErrorCode& status);
00468
00478 static UBool unregister(URegistryKey key, UErrorCode& status);
00479
00486 static
StringEnumeration* getAvailableLocales(
void);
00487
00497 UBool isGroupingUsed(
void) const;
00498
00505 virtual
void setGroupingUsed(UBool newValue);
00506
00515 int32_t getMaximumIntegerDigits(
void) const;
00516
00529 virtual
void setMaximumIntegerDigits(int32_t newValue);
00530
00539 int32_t getMinimumIntegerDigits(
void) const;
00540
00551 virtual
void setMinimumIntegerDigits(int32_t newValue);
00552
00561 int32_t getMaximumFractionDigits(
void) const;
00562
00573 virtual
void setMaximumFractionDigits(int32_t newValue);
00574
00583 int32_t getMinimumFractionDigits(
void) const;
00584
00595 virtual
void setMinimumFractionDigits(int32_t newValue);
00596
00608 virtual
void setCurrency(const UChar* theCurrency);
00609
00617 const UChar* getCurrency() const;
00618
00619 public:
00620
00632 virtual UClassID getDynamicClassID(
void) const = 0;
00633
00634 protected:
00635
00640 NumberFormat();
00641
00646 NumberFormat(const NumberFormat&);
00647
00652 NumberFormat& operator=(const NumberFormat&);
00653
00654 private:
00655 static const int32_t fgMaxIntegerDigits;
00656 static const int32_t fgMinIntegerDigits;
00657
00658 private:
00659
00660 enum EStyles {
00661 kNumberStyle,
00662 kCurrencyStyle,
00663 kPercentStyle,
00664 kScientificStyle,
00665 kStyleCount
00666 };
00667
00677
static NumberFormat* createInstance(
const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00678
00686
static NumberFormat* makeInstance(
const Locale& desiredLocale, EStyles choice, UErrorCode& success);
00687
static const int32_t fgNumberPatternsCount;
00688
static const UChar*
const fgLastResortNumberPatterns[];
00689
00690
UBool fGroupingUsed;
00691 int32_t fMaxIntegerDigits;
00692 int32_t fMinIntegerDigits;
00693 int32_t fMaxFractionDigits;
00694 int32_t fMinFractionDigits;
00695
UBool fParseIntegerOnly;
00696
00697
00698
UChar currency[4];
00699
00700
friend class ICUNumberFormatFactory;
00701
friend class ICUNumberFormatService;
00702 };
00703
00712 class U_I18N_API NumberFormatFactory :
public UObject {
00713
public:
00714
00721
virtual UBool visible(
void)
const = 0;
00722
00728
virtual const UnicodeString * getSupportedIDs(int32_t &count,
UErrorCode& status)
const = 0;
00729
00737
virtual NumberFormat* createFormat(
const Locale& loc,
UNumberFormatStyle formatType) = 0;
00738 };
00739
00744 class U_I18N_API SimpleNumberFormatFactory :
public NumberFormatFactory {
00745
protected:
00750 const UBool _visible;
00751
00756 UnicodeString _id;
00757
00758
public:
00762 SimpleNumberFormatFactory(
const Locale& locale, UBool visible = TRUE)
00763 : _visible(visible)
00764 , _id(locale.getName())
00765 {
00766 }
00767
00771 virtual UBool visible(
void)
const {
00772
return _visible;
00773 }
00774
00778 virtual const UnicodeString * getSupportedIDs(int32_t &count,
UErrorCode& status)
const
00779
{
00780
if (
U_SUCCESS(status)) {
00781 count = 1;
00782
return &_id;
00783 }
00784 count = 0;
00785
return NULL;
00786 }
00787 };
00788
00789
00790
00791
00792
inline UBool
00793 NumberFormat::isParseIntegerOnly()
const
00794
{
00795
return fParseIntegerOnly;
00796 }
00797
00798
inline UnicodeString&
00799 NumberFormat::format(
const Formattable& obj,
00800
UnicodeString& appendTo,
00801
UErrorCode& status)
const {
00802
return Format::format(obj, appendTo, status);
00803 }
00804
00805
U_NAMESPACE_END
00806
00807
#endif
00808
00809
#endif // _NUMFMT
00810