Main Page   Class Hierarchy   Compound List   File List   Header Files   Sources   Compound Members   File Members  

dcfmtsym.h

00001 /*
00002 ********************************************************************************
00003 *   Copyright (C) 1997-1999, International Business Machines
00004 *   Corporation and others.  All Rights Reserved.
00005 ********************************************************************************
00006 *
00007 * File DCFMTSYM.H
00008 *
00009 * Modification History:
00010 * 
00011 *   Date        Name        Description
00012 *   02/19/97    aliu        Converted from java.
00013 *   03/18/97    clhuang     Updated per C++ implementation.
00014 *   03/27/97    helena      Updated to pass the simple test after code review.
00015 *   08/26/97    aliu        Added currency/intl currency symbol support.
00016 *    07/22/98    stephen        Changed to match C++ style 
00017 *                            currencySymbol -> fCurrencySymbol
00018 *                            Constants changed from CAPS to kCaps
00019 *   06/24/99    helena      Integrated Alan's NF enhancements and Java2 bug fixes
00020 ********************************************************************************
00021 */
00022  
00023 #ifndef DCFMTSYM_H
00024 #define DCFMTSYM_H
00025  
00026 #include "unicode/utypes.h"
00027 #include "unicode/locid.h"
00028 
00067 class U_I18N_API DecimalFormatSymbols {
00068 public:
00073     enum ENumberFormatSymbol {
00075         kDecimalSeparatorSymbol,
00077         kGroupingSeparatorSymbol,
00079         kPatternSeparatorSymbol,
00081         kPercentSymbol,
00083         kZeroDigitSymbol,
00085         kDigitSymbol,
00087         kMinusSignSymbol,
00089         kPlusSignSymbol,
00091         kCurrencySymbol,
00093         kIntlCurrencySymbol,
00095         kMonetarySeparatorSymbol,
00097         kExponentialSymbol,
00099         kPermillSymbol,
00101         kPadEscapeSymbol,
00103         kInfinitySymbol,
00105         kNaNSymbol,
00107         kFormatSymbolCount
00108     };
00109 
00118     DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
00119 
00130     DecimalFormatSymbols( UErrorCode& status);
00131 
00136     DecimalFormatSymbols(const DecimalFormatSymbols&);
00137 
00142     DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
00143 
00148     ~DecimalFormatSymbols();
00149 
00154     UBool operator==(const DecimalFormatSymbols& other) const;
00155 
00160     UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
00161 
00168     UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
00169 
00176     void setSymbol(ENumberFormatSymbol symbol, UnicodeString value);
00177 
00184     UChar getZeroDigit(void) const;
00191     void setZeroDigit(UChar zeroDigit);
00192 
00199     UChar getGroupingSeparator(void) const;
00206     void setGroupingSeparator(UChar groupingSeparator);
00207 
00214     UChar getDecimalSeparator(void) const;
00221     void setDecimalSeparator(UChar decimalSeparator);
00222 
00229     UChar getPerMill(void) const;
00236     void setPerMill(UChar permill);
00237 
00244     UChar getPercent(void) const;
00251     void setPercent(UChar percent);
00252 
00259     UChar getDigit(void) const;
00266     void setDigit(UChar digit);
00267 
00275     UChar getPatternSeparator(void) const;
00283     void setPatternSeparator(UChar patternSeparator);
00284 
00290     UnicodeString& getInfinity(UnicodeString& result) const;
00296     void setInfinity(const UnicodeString& infinity);
00303     int32_t compareInfinity(const UnicodeString& text, UTextOffset offset) const;
00304 
00310     UnicodeString& getNaN(UnicodeString& result) const;
00316     void setNaN(const UnicodeString& NaN);
00323     int32_t compareNaN(const UnicodeString& text, UTextOffset offset) const;
00324 
00331     UChar getPlusSign(void) const;
00338     void setPlusSign(UChar minusSign);
00339 
00348     UChar getMinusSign(void) const;
00357     void setMinusSign(UChar minusSign);
00358  
00366     UChar getExponentialSymbol(void) const;
00374     void setExponentialSymbol(UChar exponential);
00375 
00380     UnicodeString& getCurrencySymbol(UnicodeString& result) const;
00385     void setCurrencySymbol(const UnicodeString& currency);
00393     int32_t compareCurrencySymbol(const UnicodeString& text, UTextOffset offset) const;
00394 
00399     UnicodeString& getInternationalCurrencySymbol(UnicodeString& result) const;
00404     void setInternationalCurrencySymbol(const UnicodeString& currency);
00413     int32_t compareInternationalCurrencySymbol(const UnicodeString& text, UTextOffset offset) const;
00414 
00421     UChar getMonetaryDecimalSeparator(void) const;
00428     void setMonetaryDecimalSeparator(UChar sep);
00429 
00444     UChar getPadEscape(void) const;
00445 
00459     void setPadEscape(UChar c);
00460 
00461 private:
00467     void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
00468 
00473     void initialize(const UnicodeString* numberElements, const UnicodeString* currencyElements);
00474 
00478     void initialize();
00479 
00480     UnicodeString fSymbols[kFormatSymbolCount];
00481 };
00482 
00483 
00484 // -------------------------------------
00485 
00486 inline UnicodeString
00487 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
00488     if(symbol<kFormatSymbolCount) {
00489         return fSymbols[symbol];
00490     } else {
00491         return UnicodeString();
00492     }
00493 }
00494 
00495 // -------------------------------------
00496 
00497 inline void
00498 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, UnicodeString value) {
00499     if(symbol<kFormatSymbolCount) {
00500         fSymbols[symbol]=value;
00501     }
00502 }
00503 
00504 // -------------------------------------
00505 
00506 inline UChar
00507 DecimalFormatSymbols::getZeroDigit() const
00508 {
00509     return fSymbols[kZeroDigitSymbol].charAt(0);
00510 }
00511 
00512 // -------------------------------------
00513  
00514 inline void
00515 DecimalFormatSymbols::setZeroDigit(UChar zeroDigit)
00516 {
00517     fSymbols[kZeroDigitSymbol] = zeroDigit;
00518 }
00519 
00520 // -------------------------------------
00521 
00522 inline UChar
00523 DecimalFormatSymbols::getGroupingSeparator() const
00524 {
00525     return fSymbols[kGroupingSeparatorSymbol].charAt(0);
00526 }
00527 
00528 // -------------------------------------
00529 
00530 inline void
00531 DecimalFormatSymbols::setGroupingSeparator(UChar groupingSeparator)
00532 {
00533     fSymbols[kGroupingSeparatorSymbol] = groupingSeparator;
00534 }
00535 
00536 // -------------------------------------
00537 
00538 inline UChar
00539 DecimalFormatSymbols::getDecimalSeparator() const
00540 {
00541     return fSymbols[kDecimalSeparatorSymbol].charAt(0);
00542 }
00543 
00544 // -------------------------------------
00545 
00546 inline void
00547 DecimalFormatSymbols::setDecimalSeparator(UChar decimalSeparator)
00548 {
00549     fSymbols[kDecimalSeparatorSymbol] = decimalSeparator;
00550 }
00551 
00552 // -------------------------------------
00553 
00554 inline UChar
00555 DecimalFormatSymbols::getPerMill() const
00556 {
00557     return fSymbols[kPermillSymbol].charAt(0);
00558 }
00559 
00560 // -------------------------------------
00561 
00562 inline void
00563 DecimalFormatSymbols::setPerMill(UChar permill)
00564 {
00565     fSymbols[kPermillSymbol] = permill;
00566 }
00567 
00568 // -------------------------------------
00569 
00570 inline UChar
00571 DecimalFormatSymbols::getPercent() const
00572 {
00573     return fSymbols[kPercentSymbol].charAt(0);
00574 }
00575 
00576 // -------------------------------------
00577 
00578 inline void
00579 DecimalFormatSymbols::setPercent(UChar percent)
00580 {
00581     fSymbols[kPercentSymbol] = percent;
00582 }
00583 
00584 // -------------------------------------
00585 
00586 inline UChar
00587 DecimalFormatSymbols::getDigit() const
00588 {
00589     return fSymbols[kDigitSymbol].charAt(0);
00590 }
00591 
00592 // -------------------------------------
00593 
00594 inline void
00595 DecimalFormatSymbols::setDigit(UChar digit)
00596 {
00597     fSymbols[kDigitSymbol] = digit;
00598 }
00599 
00600 // -------------------------------------
00601 
00602 inline UChar
00603 DecimalFormatSymbols::getPatternSeparator() const
00604 {
00605     return fSymbols[kPatternSeparatorSymbol].charAt(0);
00606 }
00607 
00608 // -------------------------------------
00609 
00610 inline void
00611 DecimalFormatSymbols::setPatternSeparator(UChar patternSeparator)
00612 {
00613     fSymbols[kPatternSeparatorSymbol] = patternSeparator;
00614 }
00615 
00616 // -------------------------------------
00617 
00618 inline UnicodeString&
00619 DecimalFormatSymbols::getInfinity(UnicodeString& result) const
00620 {
00621     return result = fSymbols[kInfinitySymbol];
00622 }
00623 
00624 // -------------------------------------
00625 
00626 inline void
00627 DecimalFormatSymbols::setInfinity(const UnicodeString& infinity)
00628 {
00629     fSymbols[kInfinitySymbol] = infinity;
00630 }
00631 
00632 // -------------------------------------
00633 
00634 inline int32_t
00635 DecimalFormatSymbols::compareInfinity(const UnicodeString& text,
00636                                       UTextOffset offset) const
00637 {
00638     return text.compare(offset,
00639                         fSymbols[kInfinitySymbol].length(),
00640                         fSymbols[kInfinitySymbol],
00641                         0,
00642                         fSymbols[kInfinitySymbol].length())
00643            ? 0 : fSymbols[kInfinitySymbol].length();
00644 }
00645 
00646 // -------------------------------------
00647 
00648 inline UnicodeString&
00649 DecimalFormatSymbols::getNaN(UnicodeString& result) const
00650 {
00651     return result = fSymbols[kNaNSymbol];
00652 }
00653 
00654 // -------------------------------------
00655 
00656 inline void
00657 DecimalFormatSymbols::setNaN(const UnicodeString& NaN)
00658 {
00659     fSymbols[kNaNSymbol] = NaN;
00660 }
00661 
00662 // -------------------------------------
00663 
00664 inline int32_t
00665 DecimalFormatSymbols::compareNaN(const UnicodeString& text, UTextOffset offset) const
00666 {
00667     return text.compare(offset,
00668                         fSymbols[kNaNSymbol].length(),
00669                         fSymbols[kNaNSymbol],
00670                         0,
00671                         fSymbols[kNaNSymbol].length())
00672            ? 0 : fSymbols[kNaNSymbol].length();
00673 }
00674 
00675 // -------------------------------------
00676 
00677 inline UChar
00678 DecimalFormatSymbols::getPlusSign() const
00679 {
00680     return fSymbols[kPlusSignSymbol].charAt(0);
00681 }
00682 
00683 // -------------------------------------
00684 
00685 inline void
00686 DecimalFormatSymbols::setPlusSign(UChar plusSign)
00687 {
00688     fSymbols[kPlusSignSymbol] = plusSign;
00689 }
00690 
00691 // -------------------------------------
00692 
00693 inline UChar
00694 DecimalFormatSymbols::getMinusSign() const
00695 {
00696     return fSymbols[kMinusSignSymbol].charAt(0);
00697 }
00698 
00699 // -------------------------------------
00700 
00701 inline void
00702 DecimalFormatSymbols::setMinusSign(UChar minusSign)
00703 {
00704     fSymbols[kMinusSignSymbol] = minusSign;
00705 }
00706 
00707 // -------------------------------------
00708 
00709 inline UChar
00710 DecimalFormatSymbols::getExponentialSymbol(void) const
00711 {
00712     return fSymbols[kExponentialSymbol].charAt(0);
00713 }
00714 
00715 // -------------------------------------
00716 
00717 inline void
00718 DecimalFormatSymbols::setExponentialSymbol(UChar exponential)
00719 {
00720     fSymbols[kExponentialSymbol] = exponential;
00721 }
00722 
00723 // -------------------------------------
00724 
00725 inline UnicodeString&
00726 DecimalFormatSymbols::getCurrencySymbol(UnicodeString& result) const
00727 {
00728     return result = fSymbols[kCurrencySymbol];
00729 }
00730 
00731 // -------------------------------------
00732 
00733 inline void
00734 DecimalFormatSymbols::setCurrencySymbol(const UnicodeString& str)
00735 {
00736     fSymbols[kCurrencySymbol] = str;
00737 }
00738 
00739 // -------------------------------------
00740 
00741 inline int32_t
00742 DecimalFormatSymbols::compareCurrencySymbol(const UnicodeString& text,
00743                                             UTextOffset offset) const
00744 {
00745     return text.compare(offset,
00746                         fSymbols[kCurrencySymbol].length(),
00747                         fSymbols[kCurrencySymbol],
00748                         0,
00749                         fSymbols[kCurrencySymbol].length())
00750            ? 0 : fSymbols[kCurrencySymbol].length();
00751 }
00752 
00753 // -------------------------------------
00754 
00755 inline UnicodeString&
00756 DecimalFormatSymbols::getInternationalCurrencySymbol(UnicodeString& result) const
00757 {
00758     return result = fSymbols[kIntlCurrencySymbol];
00759 }
00760 
00761 // -------------------------------------
00762 
00763 inline void
00764 DecimalFormatSymbols::setInternationalCurrencySymbol(const UnicodeString& str)
00765 {
00766     fSymbols[kIntlCurrencySymbol] = str;
00767 }
00768 
00769 // -------------------------------------
00770 
00771 inline int32_t
00772 DecimalFormatSymbols::compareInternationalCurrencySymbol(const UnicodeString& text,
00773                                                          UTextOffset offset) const
00774 {
00775     return text.compare(offset,
00776                         fSymbols[kIntlCurrencySymbol].length(),
00777                         fSymbols[kIntlCurrencySymbol],
00778                         0,
00779                         fSymbols[kIntlCurrencySymbol].length())
00780            ? 0 : fSymbols[kIntlCurrencySymbol].length();
00781 }
00782 
00783 // -------------------------------------
00784 
00785 inline UChar
00786 DecimalFormatSymbols::getMonetaryDecimalSeparator(void) const
00787 {
00788     return fSymbols[kMonetarySeparatorSymbol].charAt(0);
00789 }
00790 
00791 // -------------------------------------
00792 
00793 inline void
00794 DecimalFormatSymbols::setMonetaryDecimalSeparator(UChar sep)
00795 {
00796     fSymbols[kMonetarySeparatorSymbol] = sep;
00797 }
00798 
00799 inline UChar DecimalFormatSymbols::getPadEscape(void) const {
00800     return fSymbols[kPadEscapeSymbol].charAt(0);
00801 }
00802 
00803 inline void DecimalFormatSymbols::setPadEscape(UChar c) {
00804     fSymbols[kPadEscapeSymbol] = c;
00805 }
00806 
00807 #endif // _DCFMTSYM
00808 //eof

Generated at Wed Aug 16 16:05:33 2000 for ICU1.6 by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999