ICU 51.2  51.2
dcfmtsym.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2013, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 ********************************************************************************
6 *
7 * File DCFMTSYM.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 02/19/97 aliu Converted from java.
13 * 03/18/97 clhuang Updated per C++ implementation.
14 * 03/27/97 helena Updated to pass the simple test after code review.
15 * 08/26/97 aliu Added currency/intl currency symbol support.
16 * 07/22/98 stephen Changed to match C++ style
17 * currencySymbol -> fCurrencySymbol
18 * Constants changed from CAPS to kCaps
19 * 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes
20 * 09/22/00 grhoten Marked deprecation tags with a pointer to replacement
21 * functions.
22 ********************************************************************************
23 */
24 
25 #ifndef DCFMTSYM_H
26 #define DCFMTSYM_H
27 
28 #include "unicode/utypes.h"
29 #include "unicode/uchar.h"
30 
31 #if !UCONFIG_NO_FORMATTING
32 
33 #include "unicode/uobject.h"
34 #include "unicode/locid.h"
35 #include "unicode/unum.h"
36 
44 
85 public:
167  kFormatSymbolCount
168  };
169 
178  DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
179 
191 
197 
202  DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
203 
208  virtual ~DecimalFormatSymbols();
209 
217  UBool operator==(const DecimalFormatSymbols& other) const;
218 
226  UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
227 
237  inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
238 
251  void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
252 
257  inline Locale getLocale() const;
258 
264  Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
265 
282  const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
283  UBool beforeCurrency,
284  UErrorCode& status) const;
295  void setPatternForCurrencySpacing(UCurrencySpacing type,
296  UBool beforeCurrency,
297  const UnicodeString& pattern);
298 
304  virtual UClassID getDynamicClassID() const;
305 
311  static UClassID U_EXPORT2 getStaticClassID();
312 
313 private:
314  DecimalFormatSymbols(); // default constructor not implemented
315 
326  void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
327 
331  void initialize();
332 
333  void setCurrencyForSymbols();
334 
335 public:
336 #ifndef U_HIDE_INTERNAL_API
337 
348  inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
349 
354  inline const UChar* getCurrencyPattern(void) const;
355 #endif /* U_HIDE_INTERNAL_API */
356 
357 private:
373  UnicodeString fSymbols[kFormatSymbolCount];
374 
379  UnicodeString fNoSymbol;
380 
381  Locale locale;
382 
383  char actualLocale[ULOC_FULLNAME_CAPACITY];
384  char validLocale[ULOC_FULLNAME_CAPACITY];
385  const UChar* currPattern;
386 
387  UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
388  UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
389 };
390 
391 // -------------------------------------
392 
393 inline UnicodeString
394 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
395  const UnicodeString *strPtr;
396  if(symbol < kFormatSymbolCount) {
397  strPtr = &fSymbols[symbol];
398  } else {
399  strPtr = &fNoSymbol;
400  }
401  return *strPtr;
402 }
403 
404 inline const UnicodeString &
405 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
406  const UnicodeString *strPtr;
407  if(symbol < kFormatSymbolCount) {
408  strPtr = &fSymbols[symbol];
409  } else {
410  strPtr = &fNoSymbol;
411  }
412  return *strPtr;
413 }
414 
415 
416 // -------------------------------------
417 
418 inline void
419 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
420  if(symbol<kFormatSymbolCount) {
421  fSymbols[symbol]=value;
422  }
423 
424  // If the zero digit is being set to a known zero digit according to Unicode,
425  // then we automatically set the corresponding 1-9 digits
426  if ( propogateDigits && symbol == kZeroDigitSymbol && value.countChar32() == 1 ) {
427  UChar32 sym = value.char32At(0);
428  if ( u_charDigitValue(sym) == 0 ) {
429  for ( int8_t i = 1 ; i<= 9 ; i++ ) {
430  sym++;
431  fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
432  }
433  }
434  }
435 }
436 
437 // -------------------------------------
438 
439 inline Locale
440 DecimalFormatSymbols::getLocale() const {
441  return locale;
442 }
443 
444 inline const UChar*
445 DecimalFormatSymbols::getCurrencyPattern() const {
446  return currPattern;
447 }
448 
450 
451 #endif /* #if !UCONFIG_NO_FORMATTING */
452 
453 #endif // _DCFMTSYM
454 //eof