16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2009-2011, International Business Machines Corporation and         *
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved.                                                *
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *******************************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef CURRPINF_H
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CURRPINF_H
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Currency Plural Information used by Decimal Format
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Locale;
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PluralRules;
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Hashtable;
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This class represents the information needed by
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * DecimalFormat to format currency plural,
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * such as "3.00 US dollars" or "1.00 US dollar".
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * DecimalFormat creates for itself an instance of
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * CurrencyPluralInfo from its locale data.
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If you need to change any of these symbols, you can get the
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * CurrencyPluralInfo object from your
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * DecimalFormat and modify it.
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Following are the information needed for currency plural format and parse:
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale information,
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * plural rule of the locale,
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * currency plural pattern of the locale.
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass  U_I18N_API CurrencyPluralInfo : public UObject {
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create a CurrencyPluralInfo object for the default locale.
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status output param set to success/failure code on exit
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CurrencyPluralInfo(UErrorCode& status);
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Create a CurrencyPluralInfo object for the given locale.
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale the locale
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status output param set to success/failure code on exit
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CurrencyPluralInfo(const Locale& locale, UErrorCode& status);
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Copy constructor
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CurrencyPluralInfo(const CurrencyPluralInfo& info);
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Assignment operator
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CurrencyPluralInfo& operator=(const CurrencyPluralInfo& info);
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Destructor
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~CurrencyPluralInfo();
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Equal operator.
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool operator==(const CurrencyPluralInfo& info) const;
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Not equal operator
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool operator!=(const CurrencyPluralInfo& info) const;
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Clone
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CurrencyPluralInfo* clone() const;
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Gets plural rules of this locale, used for currency plural format
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return plural rule
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const PluralRules* getPluralRules() const;
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Given a plural count, gets currency plural pattern of this locale,
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * used for currency plural format
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param  pluralCount currency plural count
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param  result      output param to receive the pattern
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return a currency plural pattern based on plural count
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString& getCurrencyPluralPattern(const UnicodeString& pluralCount,
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            UnicodeString& result) const;
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get locale
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return locale
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const Locale& getLocale() const;
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set plural rules.
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The plural rule is set when CurrencyPluralInfo
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * instance is created.
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * You can call this method to reset plural rules only if you want
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * to modify the default plural rule of the locale.
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param ruleDescription new plural rule description
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status output param set to success/failure code on exit
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setPluralRules(const UnicodeString& ruleDescription,
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UErrorCode& status);
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set currency plural pattern.
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The currency plural pattern is set when CurrencyPluralInfo
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * instance is created.
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * You can call this method to reset currency plural pattern only if
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * you want to modify the default currency plural pattern of the locale.
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pluralCount the plural count for which the currency pattern will
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                    be overridden.
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern     the new currency plural pattern
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status      output param set to success/failure code on exit
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setCurrencyPluralPattern(const UnicodeString& pluralCount,
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                  const UnicodeString& pattern,
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                  UErrorCode& status);
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set locale
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param loc     the new locale to set
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status  output param set to success/failure code on exit
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setLocale(const Locale& loc, UErrorCode& status);
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * ICU "poor man's RTTI", returns a UClassID for the actual class.
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID() const;
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * ICU "poor man's RTTI", returns a UClassID for this class.
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UClassID U_EXPORT2 getStaticClassID();
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    friend class DecimalFormat;
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void initialize(const Locale& loc, UErrorCode& status);
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setupCurrencyPluralPattern(const Locale& loc, UErrorCode& status);
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * delete hash table
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param hTable  hash table to be deleted
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void deleteHash(Hashtable* hTable);
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * initialize hash table
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status   output param set to success/failure code on exit
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return         hash table initialized
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Hashtable* initHash(UErrorCode& status);
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * copy hash table
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param source   the source to copy from
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param target   the target to copy to
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status   error code
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void copyHash(const Hashtable* source, Hashtable* target, UErrorCode& status);
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //-------------------- private data member ---------------------
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // map from plural count to currency plural pattern, for example
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // a plural pattern defined in "CurrencyUnitPatterns" is
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // "one{{0} {1}}", in which "one" is a plural count
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // and "{0} {1}" is a currency plural pattern".
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // The currency plural pattern saved in this mapping is the pattern
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // defined in "CurrencyUnitPattern" by replacing
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // {0} with the number format pattern,
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // and {1} with 3 currency sign.
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Hashtable* fPluralCountToCurrencyUnitPattern;
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The plural rule is used to format currency plural name,
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * for example: "3.00 US Dollars".
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * If there are 3 currency signs in the currency patttern,
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the 3 currency signs will be replaced by currency plural name.
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PluralRules* fPluralRules;
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // locale
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale* fLocale;
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {              return !operator==(info);                                                   }
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // _CURRPINFO
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
259