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-2006, 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 __CURRENCYAMOUNT_H__
14*0e209d39SAndroid Build Coastguard Worker #define __CURRENCYAMOUNT_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/measure.h"
23*0e209d39SAndroid Build Coastguard Worker #include "unicode/currunit.h"
24*0e209d39SAndroid Build Coastguard Worker
25*0e209d39SAndroid Build Coastguard Worker /**
26*0e209d39SAndroid Build Coastguard Worker * \file
27*0e209d39SAndroid Build Coastguard Worker * \brief C++ API: Currency Amount Object.
28*0e209d39SAndroid Build Coastguard Worker */
29*0e209d39SAndroid Build Coastguard Worker
30*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
31*0e209d39SAndroid Build Coastguard Worker
32*0e209d39SAndroid Build Coastguard Worker /**
33*0e209d39SAndroid Build Coastguard Worker *
34*0e209d39SAndroid Build Coastguard Worker * A currency together with a numeric amount, such as 200 USD.
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 CurrencyAmount: public Measure {
40*0e209d39SAndroid Build Coastguard Worker public:
41*0e209d39SAndroid Build Coastguard Worker /**
42*0e209d39SAndroid Build Coastguard Worker * Construct an object with the given numeric amount and the given
43*0e209d39SAndroid Build Coastguard Worker * ISO currency code.
44*0e209d39SAndroid Build Coastguard Worker * @param amount a numeric object; amount.isNumeric() must be true
45*0e209d39SAndroid Build Coastguard Worker * @param isoCode the 3-letter ISO 4217 currency code; must not be
46*0e209d39SAndroid Build Coastguard Worker * nullptr and must have length 3
47*0e209d39SAndroid Build Coastguard Worker * @param ec input-output error code. If the amount or the isoCode
48*0e209d39SAndroid Build Coastguard Worker * is invalid, then this will be set to a failing value.
49*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
50*0e209d39SAndroid Build Coastguard Worker */
51*0e209d39SAndroid Build Coastguard Worker CurrencyAmount(const Formattable& amount, ConstChar16Ptr isoCode,
52*0e209d39SAndroid Build Coastguard Worker UErrorCode &ec);
53*0e209d39SAndroid Build Coastguard Worker
54*0e209d39SAndroid Build Coastguard Worker /**
55*0e209d39SAndroid Build Coastguard Worker * Construct an object with the given numeric amount and the given
56*0e209d39SAndroid Build Coastguard Worker * ISO currency code.
57*0e209d39SAndroid Build Coastguard Worker * @param amount the amount of the given currency
58*0e209d39SAndroid Build Coastguard Worker * @param isoCode the 3-letter ISO 4217 currency code; must not be
59*0e209d39SAndroid Build Coastguard Worker * nullptr and must have length 3
60*0e209d39SAndroid Build Coastguard Worker * @param ec input-output error code. If the isoCode is invalid,
61*0e209d39SAndroid Build Coastguard Worker * then this will be set to a failing value.
62*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
63*0e209d39SAndroid Build Coastguard Worker */
64*0e209d39SAndroid Build Coastguard Worker CurrencyAmount(double amount, ConstChar16Ptr isoCode,
65*0e209d39SAndroid Build Coastguard Worker UErrorCode &ec);
66*0e209d39SAndroid Build Coastguard Worker
67*0e209d39SAndroid Build Coastguard Worker /**
68*0e209d39SAndroid Build Coastguard Worker * Copy constructor
69*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
70*0e209d39SAndroid Build Coastguard Worker */
71*0e209d39SAndroid Build Coastguard Worker CurrencyAmount(const CurrencyAmount& other);
72*0e209d39SAndroid Build Coastguard Worker
73*0e209d39SAndroid Build Coastguard Worker /**
74*0e209d39SAndroid Build Coastguard Worker * Assignment operator
75*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
76*0e209d39SAndroid Build Coastguard Worker */
77*0e209d39SAndroid Build Coastguard Worker CurrencyAmount& operator=(const CurrencyAmount& other);
78*0e209d39SAndroid Build Coastguard Worker
79*0e209d39SAndroid Build Coastguard Worker /**
80*0e209d39SAndroid Build Coastguard Worker * Return a polymorphic clone of this object. The result will
81*0e209d39SAndroid Build Coastguard Worker * have the same class as returned by getDynamicClassID().
82*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
83*0e209d39SAndroid Build Coastguard Worker */
84*0e209d39SAndroid Build Coastguard Worker virtual CurrencyAmount* clone() const override;
85*0e209d39SAndroid Build Coastguard Worker
86*0e209d39SAndroid Build Coastguard Worker /**
87*0e209d39SAndroid Build Coastguard Worker * Destructor
88*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
89*0e209d39SAndroid Build Coastguard Worker */
90*0e209d39SAndroid Build Coastguard Worker virtual ~CurrencyAmount();
91*0e209d39SAndroid Build Coastguard Worker
92*0e209d39SAndroid Build Coastguard Worker /**
93*0e209d39SAndroid Build Coastguard Worker * Returns a unique class ID for this object POLYMORPHICALLY.
94*0e209d39SAndroid Build Coastguard Worker * This method implements a simple form of RTTI used by ICU.
95*0e209d39SAndroid Build Coastguard Worker * @return The class ID for this object. All objects of a given
96*0e209d39SAndroid Build Coastguard Worker * class have the same class ID. Objects of other classes have
97*0e209d39SAndroid Build Coastguard Worker * different class IDs.
98*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
99*0e209d39SAndroid Build Coastguard Worker */
100*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override;
101*0e209d39SAndroid Build Coastguard Worker
102*0e209d39SAndroid Build Coastguard Worker /**
103*0e209d39SAndroid Build Coastguard Worker * Returns the class ID for this class. This is used to compare to
104*0e209d39SAndroid Build Coastguard Worker * the return value of getDynamicClassID().
105*0e209d39SAndroid Build Coastguard Worker * @return The class ID for all objects of this class.
106*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
107*0e209d39SAndroid Build Coastguard Worker */
108*0e209d39SAndroid Build Coastguard Worker static UClassID U_EXPORT2 getStaticClassID();
109*0e209d39SAndroid Build Coastguard Worker
110*0e209d39SAndroid Build Coastguard Worker /**
111*0e209d39SAndroid Build Coastguard Worker * Return the currency unit object of this object.
112*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
113*0e209d39SAndroid Build Coastguard Worker */
114*0e209d39SAndroid Build Coastguard Worker const CurrencyUnit& getCurrency() const;
115*0e209d39SAndroid Build Coastguard Worker
116*0e209d39SAndroid Build Coastguard Worker /**
117*0e209d39SAndroid Build Coastguard Worker * Return the ISO currency code of this object.
118*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0
119*0e209d39SAndroid Build Coastguard Worker */
120*0e209d39SAndroid Build Coastguard Worker inline const char16_t* getISOCurrency() const;
121*0e209d39SAndroid Build Coastguard Worker };
122*0e209d39SAndroid Build Coastguard Worker
getISOCurrency()123*0e209d39SAndroid Build Coastguard Worker inline const char16_t* CurrencyAmount::getISOCurrency() const {
124*0e209d39SAndroid Build Coastguard Worker return getCurrency().getISOCurrency();
125*0e209d39SAndroid Build Coastguard Worker }
126*0e209d39SAndroid Build Coastguard Worker
127*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
128*0e209d39SAndroid Build Coastguard Worker
129*0e209d39SAndroid Build Coastguard Worker #endif // !UCONFIG_NO_FORMATTING
130*0e209d39SAndroid Build Coastguard Worker
131*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */
132*0e209d39SAndroid Build Coastguard Worker
133*0e209d39SAndroid Build Coastguard Worker #endif // __CURRENCYAMOUNT_H__
134