1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker **********************************************************************
5*0e209d39SAndroid Build Coastguard Worker * Copyright (c) 2004-2014, International Business Machines
6*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker **********************************************************************
8*0e209d39SAndroid Build Coastguard Worker * Author: Alan Liu
9*0e209d39SAndroid Build Coastguard Worker * Created: April 26, 2004
10*0e209d39SAndroid Build Coastguard Worker * Since: ICU 3.0
11*0e209d39SAndroid Build Coastguard Worker **********************************************************************
12*0e209d39SAndroid Build Coastguard Worker */
13*0e209d39SAndroid Build Coastguard Worker #ifndef __CURRENCYUNIT_H__
14*0e209d39SAndroid Build Coastguard Worker #define __CURRENCYUNIT_H__
15*0e209d39SAndroid Build Coastguard Worker
16*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
17*0e209d39SAndroid Build Coastguard Worker
18*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
19*0e209d39SAndroid Build Coastguard Worker
20*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
21*0e209d39SAndroid Build Coastguard Worker
22*0e209d39SAndroid Build Coastguard Worker #include "unicode/measunit.h"
23*0e209d39SAndroid Build Coastguard Worker
24*0e209d39SAndroid Build Coastguard Worker /**
25*0e209d39SAndroid Build Coastguard Worker * \file
26*0e209d39SAndroid Build Coastguard Worker * \brief C++ API: Currency Unit Information.
27*0e209d39SAndroid Build Coastguard Worker */
28*0e209d39SAndroid Build Coastguard Worker
29*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
30*0e209d39SAndroid Build Coastguard Worker
31*0e209d39SAndroid Build Coastguard Worker /**
32*0e209d39SAndroid Build Coastguard Worker * A unit of currency, such as USD (U.S. dollars) or JPY (Japanese
33*0e209d39SAndroid Build Coastguard Worker * yen). This class is a thin wrapper over a char16_t string that
34*0e209d39SAndroid Build Coastguard Worker * subclasses MeasureUnit, for use with Measure and MeasureFormat.
35*0e209d39SAndroid Build Coastguard Worker *
36*0e209d39SAndroid Build Coastguard Worker * @author Alan Liu
37*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
38*0e209d39SAndroid Build Coastguard Worker */
39*0e209d39SAndroid Build Coastguard Worker class U_I18N_API CurrencyUnit: public MeasureUnit {
40*0e209d39SAndroid Build Coastguard Worker public:
41*0e209d39SAndroid Build Coastguard Worker /**
42*0e209d39SAndroid Build Coastguard Worker * Default constructor. Initializes currency code to "XXX" (no currency).
43*0e209d39SAndroid Build Coastguard Worker * @stable ICU 60
44*0e209d39SAndroid Build Coastguard Worker */
45*0e209d39SAndroid Build Coastguard Worker CurrencyUnit();
46*0e209d39SAndroid Build Coastguard Worker
47*0e209d39SAndroid Build Coastguard Worker /**
48*0e209d39SAndroid Build Coastguard Worker * Construct an object with the given ISO currency code.
49*0e209d39SAndroid Build Coastguard Worker *
50*0e209d39SAndroid Build Coastguard Worker * @param isoCode the 3-letter ISO 4217 currency code; must have
51*0e209d39SAndroid Build Coastguard Worker * length 3 and need not be NUL-terminated. If nullptr, the currency
52*0e209d39SAndroid Build Coastguard Worker * is initialized to the unknown currency XXX.
53*0e209d39SAndroid Build Coastguard Worker * @param ec input-output error code. If the isoCode is invalid,
54*0e209d39SAndroid Build Coastguard Worker * then this will be set to a failing value.
55*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
56*0e209d39SAndroid Build Coastguard Worker */
57*0e209d39SAndroid Build Coastguard Worker CurrencyUnit(ConstChar16Ptr isoCode, UErrorCode &ec);
58*0e209d39SAndroid Build Coastguard Worker
59*0e209d39SAndroid Build Coastguard Worker /**
60*0e209d39SAndroid Build Coastguard Worker * Construct an object with the given ISO currency code.
61*0e209d39SAndroid Build Coastguard Worker *
62*0e209d39SAndroid Build Coastguard Worker * @param isoCode the 3-letter ISO 4217 currency code; must have
63*0e209d39SAndroid Build Coastguard Worker * length 3. If invalid, the currency is initialized to XXX.
64*0e209d39SAndroid Build Coastguard Worker * @param ec input-output error code. If the isoCode is invalid,
65*0e209d39SAndroid Build Coastguard Worker * then this will be set to a failing value.
66*0e209d39SAndroid Build Coastguard Worker * @stable ICU 64
67*0e209d39SAndroid Build Coastguard Worker */
68*0e209d39SAndroid Build Coastguard Worker CurrencyUnit(StringPiece isoCode, UErrorCode &ec);
69*0e209d39SAndroid Build Coastguard Worker
70*0e209d39SAndroid Build Coastguard Worker /**
71*0e209d39SAndroid Build Coastguard Worker * Copy constructor
72*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
73*0e209d39SAndroid Build Coastguard Worker */
74*0e209d39SAndroid Build Coastguard Worker CurrencyUnit(const CurrencyUnit& other);
75*0e209d39SAndroid Build Coastguard Worker
76*0e209d39SAndroid Build Coastguard Worker /**
77*0e209d39SAndroid Build Coastguard Worker * Copy constructor from MeasureUnit. This constructor allows you to
78*0e209d39SAndroid Build Coastguard Worker * restore a CurrencyUnit that was sliced to MeasureUnit.
79*0e209d39SAndroid Build Coastguard Worker *
80*0e209d39SAndroid Build Coastguard Worker * @param measureUnit The MeasureUnit to copy from.
81*0e209d39SAndroid Build Coastguard Worker * @param ec Set to a failing value if the MeasureUnit is not a currency.
82*0e209d39SAndroid Build Coastguard Worker * @stable ICU 60
83*0e209d39SAndroid Build Coastguard Worker */
84*0e209d39SAndroid Build Coastguard Worker CurrencyUnit(const MeasureUnit& measureUnit, UErrorCode &ec);
85*0e209d39SAndroid Build Coastguard Worker
86*0e209d39SAndroid Build Coastguard Worker /**
87*0e209d39SAndroid Build Coastguard Worker * Assignment operator
88*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
89*0e209d39SAndroid Build Coastguard Worker */
90*0e209d39SAndroid Build Coastguard Worker CurrencyUnit& operator=(const CurrencyUnit& other);
91*0e209d39SAndroid Build Coastguard Worker
92*0e209d39SAndroid Build Coastguard Worker /**
93*0e209d39SAndroid Build Coastguard Worker * Return a polymorphic clone of this object. The result will
94*0e209d39SAndroid Build Coastguard Worker * have the same class as returned by getDynamicClassID().
95*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
96*0e209d39SAndroid Build Coastguard Worker */
97*0e209d39SAndroid Build Coastguard Worker virtual CurrencyUnit* clone() const override;
98*0e209d39SAndroid Build Coastguard Worker
99*0e209d39SAndroid Build Coastguard Worker /**
100*0e209d39SAndroid Build Coastguard Worker * Destructor
101*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
102*0e209d39SAndroid Build Coastguard Worker */
103*0e209d39SAndroid Build Coastguard Worker virtual ~CurrencyUnit();
104*0e209d39SAndroid Build Coastguard Worker
105*0e209d39SAndroid Build Coastguard Worker /**
106*0e209d39SAndroid Build Coastguard Worker * Returns a unique class ID for this object POLYMORPHICALLY.
107*0e209d39SAndroid Build Coastguard Worker * This method implements a simple form of RTTI used by ICU.
108*0e209d39SAndroid Build Coastguard Worker * @return The class ID for this object. All objects of a given
109*0e209d39SAndroid Build Coastguard Worker * class have the same class ID. Objects of other classes have
110*0e209d39SAndroid Build Coastguard Worker * different class IDs.
111*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
112*0e209d39SAndroid Build Coastguard Worker */
113*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override;
114*0e209d39SAndroid Build Coastguard Worker
115*0e209d39SAndroid Build Coastguard Worker /**
116*0e209d39SAndroid Build Coastguard Worker * Returns the class ID for this class. This is used to compare to
117*0e209d39SAndroid Build Coastguard Worker * the return value of getDynamicClassID().
118*0e209d39SAndroid Build Coastguard Worker * @return The class ID for all objects of this class.
119*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
120*0e209d39SAndroid Build Coastguard Worker */
121*0e209d39SAndroid Build Coastguard Worker static UClassID U_EXPORT2 getStaticClassID();
122*0e209d39SAndroid Build Coastguard Worker
123*0e209d39SAndroid Build Coastguard Worker /**
124*0e209d39SAndroid Build Coastguard Worker * Return the ISO currency code of this object.
125*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
126*0e209d39SAndroid Build Coastguard Worker */
127*0e209d39SAndroid Build Coastguard Worker inline const char16_t* getISOCurrency() const;
128*0e209d39SAndroid Build Coastguard Worker
129*0e209d39SAndroid Build Coastguard Worker private:
130*0e209d39SAndroid Build Coastguard Worker /**
131*0e209d39SAndroid Build Coastguard Worker * The ISO 4217 code of this object.
132*0e209d39SAndroid Build Coastguard Worker */
133*0e209d39SAndroid Build Coastguard Worker char16_t isoCode[4];
134*0e209d39SAndroid Build Coastguard Worker };
135*0e209d39SAndroid Build Coastguard Worker
getISOCurrency()136*0e209d39SAndroid Build Coastguard Worker inline const char16_t* CurrencyUnit::getISOCurrency() const {
137*0e209d39SAndroid Build Coastguard Worker return isoCode;
138*0e209d39SAndroid Build Coastguard Worker }
139*0e209d39SAndroid Build Coastguard Worker
140*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
141*0e209d39SAndroid Build Coastguard Worker
142*0e209d39SAndroid Build Coastguard Worker #endif // !UCONFIG_NO_FORMATTING
143*0e209d39SAndroid Build Coastguard Worker
144*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */
145*0e209d39SAndroid Build Coastguard Worker
146*0e209d39SAndroid Build Coastguard Worker #endif // __CURRENCYUNIT_H__
147