00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef DCFMTSYM_H
00026 #define DCFMTSYM_H
00027
00028 #include "unicode/utypes.h"
00029
00030 #if !UCONFIG_NO_FORMATTING
00031
00032 #include "unicode/uobject.h"
00033 #include "unicode/locid.h"
00034
00035 U_NAMESPACE_BEGIN
00036
00076 class U_I18N_API DecimalFormatSymbols : public UObject {
00077 public:
00082 enum ENumberFormatSymbol {
00084 kDecimalSeparatorSymbol,
00086 kGroupingSeparatorSymbol,
00088 kPatternSeparatorSymbol,
00090 kPercentSymbol,
00092 kZeroDigitSymbol,
00094 kDigitSymbol,
00096 kMinusSignSymbol,
00098 kPlusSignSymbol,
00100 kCurrencySymbol,
00102 kIntlCurrencySymbol,
00104 kMonetarySeparatorSymbol,
00106 kExponentialSymbol,
00108 kPerMillSymbol,
00110 kPadEscapeSymbol,
00112 kInfinitySymbol,
00114 kNaNSymbol,
00117 kSignificantDigitSymbol,
00119 kFormatSymbolCount
00120 };
00121
00130 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
00131
00142 DecimalFormatSymbols( UErrorCode& status);
00143
00148 DecimalFormatSymbols(const DecimalFormatSymbols&);
00149
00154 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
00155
00160 virtual ~DecimalFormatSymbols();
00161
00169 UBool operator==(const DecimalFormatSymbols& other) const;
00170
00178 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
00179
00189 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
00190
00200 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value);
00201
00206 inline Locale getLocale() const;
00207
00213 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00214
00220 virtual UClassID getDynamicClassID() const;
00221
00227 static UClassID U_EXPORT2 getStaticClassID();
00228
00229 private:
00230 DecimalFormatSymbols();
00231
00242 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
00243
00251 void initialize(const UChar** numberElements, int32_t *numberElementsStrLen, int32_t numberElementsLength);
00252
00256 void initialize();
00257
00258 void setCurrencyForSymbols();
00259
00260 public:
00272 inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
00273
00274 private:
00290 UnicodeString fSymbols[kFormatSymbolCount];
00291
00296 UnicodeString fNoSymbol;
00297
00298 Locale locale;
00299
00300 char actualLocale[ULOC_FULLNAME_CAPACITY];
00301 char validLocale[ULOC_FULLNAME_CAPACITY];
00302 };
00303
00304
00305
00306 inline UnicodeString
00307 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
00308 const UnicodeString *strPtr;
00309 if(symbol < kFormatSymbolCount) {
00310 strPtr = &fSymbols[symbol];
00311 } else {
00312 strPtr = &fNoSymbol;
00313 }
00314 return *strPtr;
00315 }
00316
00317 inline const UnicodeString &
00318 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
00319 const UnicodeString *strPtr;
00320 if(symbol < kFormatSymbolCount) {
00321 strPtr = &fSymbols[symbol];
00322 } else {
00323 strPtr = &fNoSymbol;
00324 }
00325 return *strPtr;
00326 }
00327
00328
00329
00330 inline void
00331 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value) {
00332 if(symbol<kFormatSymbolCount) {
00333 fSymbols[symbol]=value;
00334 }
00335 }
00336
00337
00338
00339 inline Locale
00340 DecimalFormatSymbols::getLocale() const {
00341 return locale;
00342 }
00343
00344
00345 U_NAMESPACE_END
00346
00347 #endif
00348
00349 #endif // _DCFMTSYM
00350