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,
00116 kFormatSymbolCount
00117 };
00118
00127 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
00128
00139 DecimalFormatSymbols( UErrorCode& status);
00140
00145 DecimalFormatSymbols(const DecimalFormatSymbols&);
00146
00151 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
00152
00157 ~DecimalFormatSymbols();
00158
00166 UBool operator==(const DecimalFormatSymbols& other) const;
00167
00175 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
00176
00186 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
00187
00197 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value);
00198
00203 inline Locale getLocale() const;
00204
00210 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00211
00217 virtual UClassID getDynamicClassID() const;
00218
00224 static UClassID getStaticClassID();
00225
00226 private:
00227 DecimalFormatSymbols();
00228
00239 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
00240
00248 void initialize(const UnicodeString* numberElements, int32_t numberElementsLength);
00249
00253 void initialize();
00254
00255 void setCurrencyForSymbols();
00256
00257 public:
00269 inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
00270
00271 private:
00287 UnicodeString fSymbols[kFormatSymbolCount];
00288
00293 UnicodeString fNoSymbol;
00294
00295 Locale locale;
00296
00297 char actualLocale[ULOC_FULLNAME_CAPACITY];
00298 char validLocale[ULOC_FULLNAME_CAPACITY];
00299 };
00300
00301
00302
00303 inline UnicodeString
00304 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
00305 const UnicodeString *strPtr;
00306 if(symbol < kFormatSymbolCount) {
00307 strPtr = &fSymbols[symbol];
00308 } else {
00309 strPtr = &fNoSymbol;
00310 }
00311 return *strPtr;
00312 }
00313
00314 inline const UnicodeString &
00315 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
00316 const UnicodeString *strPtr;
00317 if(symbol < kFormatSymbolCount) {
00318 strPtr = &fSymbols[symbol];
00319 } else {
00320 strPtr = &fNoSymbol;
00321 }
00322 return *strPtr;
00323 }
00324
00325
00326
00327 inline void
00328 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value) {
00329 if(symbol<kFormatSymbolCount) {
00330 fSymbols[symbol]=value;
00331 }
00332 }
00333
00334
00335
00336 inline Locale
00337 DecimalFormatSymbols::getLocale() const {
00338 return locale;
00339 }
00340
00341
00342 U_NAMESPACE_END
00343
00344 #endif
00345
00346 #endif // _DCFMTSYM
00347