xref: /aosp_15_r20/external/icu/libicu/cts_headers/unicode/resbund.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
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 *
6*0e209d39SAndroid Build Coastguard Worker *   Copyright (C) 1996-2013, International Business Machines Corporation
7*0e209d39SAndroid Build Coastguard Worker *   and others.  All Rights Reserved.
8*0e209d39SAndroid Build Coastguard Worker *
9*0e209d39SAndroid Build Coastguard Worker ******************************************************************************
10*0e209d39SAndroid Build Coastguard Worker *
11*0e209d39SAndroid Build Coastguard Worker * File resbund.h
12*0e209d39SAndroid Build Coastguard Worker *
13*0e209d39SAndroid Build Coastguard Worker *   CREATED BY
14*0e209d39SAndroid Build Coastguard Worker *       Richard Gillam
15*0e209d39SAndroid Build Coastguard Worker *
16*0e209d39SAndroid Build Coastguard Worker * Modification History:
17*0e209d39SAndroid Build Coastguard Worker *
18*0e209d39SAndroid Build Coastguard Worker *   Date        Name        Description
19*0e209d39SAndroid Build Coastguard Worker *   2/5/97      aliu        Added scanForLocaleInFile.  Added
20*0e209d39SAndroid Build Coastguard Worker *                           constructor which attempts to read resource bundle
21*0e209d39SAndroid Build Coastguard Worker *                           from a specific file, without searching other files.
22*0e209d39SAndroid Build Coastguard Worker *   2/11/97     aliu        Added UErrorCode return values to constructors.  Fixed
23*0e209d39SAndroid Build Coastguard Worker *                           infinite loops in scanForFile and scanForLocale.
24*0e209d39SAndroid Build Coastguard Worker *                           Modified getRawResourceData to not delete storage
25*0e209d39SAndroid Build Coastguard Worker *                           in localeData and resourceData which it doesn't own.
26*0e209d39SAndroid Build Coastguard Worker *                           Added Mac compatibility #ifdefs for tellp() and
27*0e209d39SAndroid Build Coastguard Worker *                           ios::nocreate.
28*0e209d39SAndroid Build Coastguard Worker *   2/18/97     helena      Updated with 100% documentation coverage.
29*0e209d39SAndroid Build Coastguard Worker *   3/13/97     aliu        Rewrote to load in entire resource bundle and store
30*0e209d39SAndroid Build Coastguard Worker *                           it as a Hashtable of ResourceBundleData objects.
31*0e209d39SAndroid Build Coastguard Worker *                           Added state table to govern parsing of files.
32*0e209d39SAndroid Build Coastguard Worker *                           Modified to load locale index out of new file
33*0e209d39SAndroid Build Coastguard Worker *                           distinct from default.txt.
34*0e209d39SAndroid Build Coastguard Worker *   3/25/97     aliu        Modified to support 2-d arrays, needed for timezone
35*0e209d39SAndroid Build Coastguard Worker *                           data. Added support for custom file suffixes.  Again,
36*0e209d39SAndroid Build Coastguard Worker *                           needed to support timezone data.
37*0e209d39SAndroid Build Coastguard Worker *   4/7/97      aliu        Cleaned up.
38*0e209d39SAndroid Build Coastguard Worker * 03/02/99      stephen     Removed dependency on FILE*.
39*0e209d39SAndroid Build Coastguard Worker * 03/29/99      helena      Merged Bertrand and Stephen's changes.
40*0e209d39SAndroid Build Coastguard Worker * 06/11/99      stephen     Removed parsing of .txt files.
41*0e209d39SAndroid Build Coastguard Worker *                           Reworked to use new binary format.
42*0e209d39SAndroid Build Coastguard Worker *                           Cleaned up.
43*0e209d39SAndroid Build Coastguard Worker * 06/14/99      stephen     Removed methods taking a filename suffix.
44*0e209d39SAndroid Build Coastguard Worker * 11/09/99      weiv        Added getLocale(), fRealLocale, removed fRealLocaleID
45*0e209d39SAndroid Build Coastguard Worker ******************************************************************************
46*0e209d39SAndroid Build Coastguard Worker */
47*0e209d39SAndroid Build Coastguard Worker 
48*0e209d39SAndroid Build Coastguard Worker #ifndef RESBUND_H
49*0e209d39SAndroid Build Coastguard Worker #define RESBUND_H
50*0e209d39SAndroid Build Coastguard Worker 
51*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
52*0e209d39SAndroid Build Coastguard Worker 
53*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
54*0e209d39SAndroid Build Coastguard Worker 
55*0e209d39SAndroid Build Coastguard Worker #include "unicode/uobject.h"
56*0e209d39SAndroid Build Coastguard Worker #include "unicode/ures.h"
57*0e209d39SAndroid Build Coastguard Worker #include "unicode/unistr.h"
58*0e209d39SAndroid Build Coastguard Worker #include "unicode/locid.h"
59*0e209d39SAndroid Build Coastguard Worker 
60*0e209d39SAndroid Build Coastguard Worker /**
61*0e209d39SAndroid Build Coastguard Worker  * \file
62*0e209d39SAndroid Build Coastguard Worker  * \brief C++ API: Resource Bundle
63*0e209d39SAndroid Build Coastguard Worker  */
64*0e209d39SAndroid Build Coastguard Worker 
65*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
66*0e209d39SAndroid Build Coastguard Worker 
67*0e209d39SAndroid Build Coastguard Worker /**
68*0e209d39SAndroid Build Coastguard Worker  * A class representing a collection of resource information pertaining to a given
69*0e209d39SAndroid Build Coastguard Worker  * locale. A resource bundle provides a way of accessing locale- specific information in
70*0e209d39SAndroid Build Coastguard Worker  * a data file. You create a resource bundle that manages the resources for a given
71*0e209d39SAndroid Build Coastguard Worker  * locale and then ask it for individual resources.
72*0e209d39SAndroid Build Coastguard Worker  * <P>
73*0e209d39SAndroid Build Coastguard Worker  * Resource bundles in ICU4C are currently defined using text files which conform to the following
74*0e209d39SAndroid Build Coastguard Worker  * <a href="https://github.com/unicode-org/icu-docs/blob/main/design/bnf_rb.txt">BNF definition</a>.
75*0e209d39SAndroid Build Coastguard Worker  * More on resource bundle concepts and syntax can be found in the
76*0e209d39SAndroid Build Coastguard Worker  * <a href="https://unicode-org.github.io/icu/userguide/locale/resources">Users Guide</a>.
77*0e209d39SAndroid Build Coastguard Worker  * <P>
78*0e209d39SAndroid Build Coastguard Worker  *
79*0e209d39SAndroid Build Coastguard Worker  * The ResourceBundle class is not suitable for subclassing.
80*0e209d39SAndroid Build Coastguard Worker  *
81*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
82*0e209d39SAndroid Build Coastguard Worker  */
83*0e209d39SAndroid Build Coastguard Worker class U_COMMON_API ResourceBundle : public UObject {
84*0e209d39SAndroid Build Coastguard Worker public:
85*0e209d39SAndroid Build Coastguard Worker     /**
86*0e209d39SAndroid Build Coastguard Worker      * Constructor
87*0e209d39SAndroid Build Coastguard Worker      *
88*0e209d39SAndroid Build Coastguard Worker      * @param packageName   The packageName and locale together point to an ICU udata object,
89*0e209d39SAndroid Build Coastguard Worker      *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
90*0e209d39SAndroid Build Coastguard Worker      *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
91*0e209d39SAndroid Build Coastguard Worker      *                      a package registered with udata_setAppData(). Using a full file or directory
92*0e209d39SAndroid Build Coastguard Worker      *                      pathname for packageName is deprecated.
93*0e209d39SAndroid Build Coastguard Worker      * @param locale  This is the locale this resource bundle is for. To get resources
94*0e209d39SAndroid Build Coastguard Worker      *                for the French locale, for example, you would create a
95*0e209d39SAndroid Build Coastguard Worker      *                ResourceBundle passing Locale::FRENCH for the "locale" parameter,
96*0e209d39SAndroid Build Coastguard Worker      *                and all subsequent calls to that resource bundle will return
97*0e209d39SAndroid Build Coastguard Worker      *                resources that pertain to the French locale. If the caller doesn't
98*0e209d39SAndroid Build Coastguard Worker      *                pass a locale parameter, the default locale for the system (as
99*0e209d39SAndroid Build Coastguard Worker      *                returned by Locale::getDefault()) will be used.
100*0e209d39SAndroid Build Coastguard Worker      * @param err     The Error Code.
101*0e209d39SAndroid Build Coastguard Worker      * The UErrorCode& err parameter is used to return status information to the user. To
102*0e209d39SAndroid Build Coastguard Worker      * check whether the construction succeeded or not, you should check the value of
103*0e209d39SAndroid Build Coastguard Worker      * U_SUCCESS(err). If you wish more detailed information, you can check for
104*0e209d39SAndroid Build Coastguard Worker      * informational error results which still indicate success. U_USING_FALLBACK_WARNING
105*0e209d39SAndroid Build Coastguard Worker      * indicates that a fall back locale was used. For example, 'de_CH' was requested,
106*0e209d39SAndroid Build Coastguard Worker      * but nothing was found there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that
107*0e209d39SAndroid Build Coastguard Worker      * the default locale data was used; neither the requested locale nor any of its
108*0e209d39SAndroid Build Coastguard Worker      * fall back locales could be found.
109*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
110*0e209d39SAndroid Build Coastguard Worker      */
111*0e209d39SAndroid Build Coastguard Worker     ResourceBundle(const UnicodeString&    packageName,
112*0e209d39SAndroid Build Coastguard Worker                    const Locale&           locale,
113*0e209d39SAndroid Build Coastguard Worker                    UErrorCode&              err);
114*0e209d39SAndroid Build Coastguard Worker 
115*0e209d39SAndroid Build Coastguard Worker     /**
116*0e209d39SAndroid Build Coastguard Worker      * Construct a resource bundle for the default bundle in the specified package.
117*0e209d39SAndroid Build Coastguard Worker      *
118*0e209d39SAndroid Build Coastguard Worker      * @param packageName   The packageName and locale together point to an ICU udata object,
119*0e209d39SAndroid Build Coastguard Worker      *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
120*0e209d39SAndroid Build Coastguard Worker      *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
121*0e209d39SAndroid Build Coastguard Worker      *                      a package registered with udata_setAppData(). Using a full file or directory
122*0e209d39SAndroid Build Coastguard Worker      *                      pathname for packageName is deprecated.
123*0e209d39SAndroid Build Coastguard Worker      * @param err A UErrorCode value
124*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
125*0e209d39SAndroid Build Coastguard Worker      */
126*0e209d39SAndroid Build Coastguard Worker     ResourceBundle(const UnicodeString&    packageName,
127*0e209d39SAndroid Build Coastguard Worker                    UErrorCode&              err);
128*0e209d39SAndroid Build Coastguard Worker 
129*0e209d39SAndroid Build Coastguard Worker     /**
130*0e209d39SAndroid Build Coastguard Worker      * Construct a resource bundle for the ICU default bundle.
131*0e209d39SAndroid Build Coastguard Worker      *
132*0e209d39SAndroid Build Coastguard Worker      * @param err A UErrorCode value
133*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
134*0e209d39SAndroid Build Coastguard Worker      */
135*0e209d39SAndroid Build Coastguard Worker     ResourceBundle(UErrorCode &err);
136*0e209d39SAndroid Build Coastguard Worker 
137*0e209d39SAndroid Build Coastguard Worker     /**
138*0e209d39SAndroid Build Coastguard Worker      * Standard constructor, constructs a resource bundle for the locale-specific
139*0e209d39SAndroid Build Coastguard Worker      * bundle in the specified package.
140*0e209d39SAndroid Build Coastguard Worker      *
141*0e209d39SAndroid Build Coastguard Worker      * @param packageName   The packageName and locale together point to an ICU udata object,
142*0e209d39SAndroid Build Coastguard Worker      *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
143*0e209d39SAndroid Build Coastguard Worker      *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
144*0e209d39SAndroid Build Coastguard Worker      *                      a package registered with udata_setAppData(). Using a full file or directory
145*0e209d39SAndroid Build Coastguard Worker      *                      pathname for packageName is deprecated.
146*0e209d39SAndroid Build Coastguard Worker      *                      nullptr is used to refer to ICU data.
147*0e209d39SAndroid Build Coastguard Worker      * @param locale The locale for which to open a resource bundle.
148*0e209d39SAndroid Build Coastguard Worker      * @param err A UErrorCode value
149*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
150*0e209d39SAndroid Build Coastguard Worker      */
151*0e209d39SAndroid Build Coastguard Worker     ResourceBundle(const char* packageName,
152*0e209d39SAndroid Build Coastguard Worker                    const Locale& locale,
153*0e209d39SAndroid Build Coastguard Worker                    UErrorCode& err);
154*0e209d39SAndroid Build Coastguard Worker 
155*0e209d39SAndroid Build Coastguard Worker     /**
156*0e209d39SAndroid Build Coastguard Worker      * Copy constructor.
157*0e209d39SAndroid Build Coastguard Worker      *
158*0e209d39SAndroid Build Coastguard Worker      * @param original The resource bundle to copy.
159*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
160*0e209d39SAndroid Build Coastguard Worker      */
161*0e209d39SAndroid Build Coastguard Worker     ResourceBundle(const ResourceBundle &original);
162*0e209d39SAndroid Build Coastguard Worker 
163*0e209d39SAndroid Build Coastguard Worker     /**
164*0e209d39SAndroid Build Coastguard Worker      * Constructor from a C UResourceBundle. The resource bundle is
165*0e209d39SAndroid Build Coastguard Worker      * copied and not adopted. ures_close will still need to be used on the
166*0e209d39SAndroid Build Coastguard Worker      * original resource bundle.
167*0e209d39SAndroid Build Coastguard Worker      *
168*0e209d39SAndroid Build Coastguard Worker      * @param res A pointer to the C resource bundle.
169*0e209d39SAndroid Build Coastguard Worker      * @param status A UErrorCode value.
170*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
171*0e209d39SAndroid Build Coastguard Worker      */
172*0e209d39SAndroid Build Coastguard Worker     ResourceBundle(UResourceBundle *res,
173*0e209d39SAndroid Build Coastguard Worker                    UErrorCode &status);
174*0e209d39SAndroid Build Coastguard Worker 
175*0e209d39SAndroid Build Coastguard Worker     /**
176*0e209d39SAndroid Build Coastguard Worker      * Assignment operator.
177*0e209d39SAndroid Build Coastguard Worker      *
178*0e209d39SAndroid Build Coastguard Worker      * @param other The resource bundle to copy.
179*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
180*0e209d39SAndroid Build Coastguard Worker      */
181*0e209d39SAndroid Build Coastguard Worker     ResourceBundle&
182*0e209d39SAndroid Build Coastguard Worker       operator=(const ResourceBundle& other);
183*0e209d39SAndroid Build Coastguard Worker 
184*0e209d39SAndroid Build Coastguard Worker     /** Destructor.
185*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
186*0e209d39SAndroid Build Coastguard Worker      */
187*0e209d39SAndroid Build Coastguard Worker     virtual ~ResourceBundle();
188*0e209d39SAndroid Build Coastguard Worker 
189*0e209d39SAndroid Build Coastguard Worker     /**
190*0e209d39SAndroid Build Coastguard Worker      * Clone this object.
191*0e209d39SAndroid Build Coastguard Worker      * Clones can be used concurrently in multiple threads.
192*0e209d39SAndroid Build Coastguard Worker      * If an error occurs, then nullptr is returned.
193*0e209d39SAndroid Build Coastguard Worker      * The caller must delete the clone.
194*0e209d39SAndroid Build Coastguard Worker      *
195*0e209d39SAndroid Build Coastguard Worker      * @return a clone of this object
196*0e209d39SAndroid Build Coastguard Worker      *
197*0e209d39SAndroid Build Coastguard Worker      * @see getDynamicClassID
198*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.8
199*0e209d39SAndroid Build Coastguard Worker      */
200*0e209d39SAndroid Build Coastguard Worker     ResourceBundle *clone() const;
201*0e209d39SAndroid Build Coastguard Worker 
202*0e209d39SAndroid Build Coastguard Worker     /**
203*0e209d39SAndroid Build Coastguard Worker      * Returns the size of a resource. Size for scalar types is always 1, and for vector/table types is
204*0e209d39SAndroid Build Coastguard Worker      * the number of child resources.
205*0e209d39SAndroid Build Coastguard Worker      * @warning Integer array is treated as a scalar type. There are no
206*0e209d39SAndroid Build Coastguard Worker      *          APIs to access individual members of an integer array. It
207*0e209d39SAndroid Build Coastguard Worker      *          is always returned as a whole.
208*0e209d39SAndroid Build Coastguard Worker      *
209*0e209d39SAndroid Build Coastguard Worker      * @return number of resources in a given resource.
210*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
211*0e209d39SAndroid Build Coastguard Worker      */
212*0e209d39SAndroid Build Coastguard Worker     int32_t getSize() const;
213*0e209d39SAndroid Build Coastguard Worker 
214*0e209d39SAndroid Build Coastguard Worker     /**
215*0e209d39SAndroid Build Coastguard Worker      * returns a string from a string resource type
216*0e209d39SAndroid Build Coastguard Worker      *
217*0e209d39SAndroid Build Coastguard Worker      * @param status  fills in the outgoing error code
218*0e209d39SAndroid Build Coastguard Worker      *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
219*0e209d39SAndroid Build Coastguard Worker      *                could be a warning
220*0e209d39SAndroid Build Coastguard Worker      *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
221*0e209d39SAndroid Build Coastguard Worker      * @return a pointer to a zero-terminated char16_t array which lives in a memory mapped/DLL file.
222*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
223*0e209d39SAndroid Build Coastguard Worker      */
224*0e209d39SAndroid Build Coastguard Worker     UnicodeString
225*0e209d39SAndroid Build Coastguard Worker       getString(UErrorCode& status) const;
226*0e209d39SAndroid Build Coastguard Worker 
227*0e209d39SAndroid Build Coastguard Worker     /**
228*0e209d39SAndroid Build Coastguard Worker      * returns a binary data from a resource. Can be used at most primitive resource types (binaries,
229*0e209d39SAndroid Build Coastguard Worker      * strings, ints)
230*0e209d39SAndroid Build Coastguard Worker      *
231*0e209d39SAndroid Build Coastguard Worker      * @param len     fills in the length of resulting byte chunk
232*0e209d39SAndroid Build Coastguard Worker      * @param status  fills in the outgoing error code
233*0e209d39SAndroid Build Coastguard Worker      *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
234*0e209d39SAndroid Build Coastguard Worker      *                could be a warning
235*0e209d39SAndroid Build Coastguard Worker      *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
236*0e209d39SAndroid Build Coastguard Worker      * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file.
237*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
238*0e209d39SAndroid Build Coastguard Worker      */
239*0e209d39SAndroid Build Coastguard Worker     const uint8_t*
240*0e209d39SAndroid Build Coastguard Worker       getBinary(int32_t& len, UErrorCode& status) const;
241*0e209d39SAndroid Build Coastguard Worker 
242*0e209d39SAndroid Build Coastguard Worker 
243*0e209d39SAndroid Build Coastguard Worker     /**
244*0e209d39SAndroid Build Coastguard Worker      * returns an integer vector from a resource.
245*0e209d39SAndroid Build Coastguard Worker      *
246*0e209d39SAndroid Build Coastguard Worker      * @param len     fills in the length of resulting integer vector
247*0e209d39SAndroid Build Coastguard Worker      * @param status  fills in the outgoing error code
248*0e209d39SAndroid Build Coastguard Worker      *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
249*0e209d39SAndroid Build Coastguard Worker      *                could be a warning
250*0e209d39SAndroid Build Coastguard Worker      *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
251*0e209d39SAndroid Build Coastguard Worker      * @return a pointer to a vector of integers that lives in a memory mapped/DLL file.
252*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
253*0e209d39SAndroid Build Coastguard Worker      */
254*0e209d39SAndroid Build Coastguard Worker     const int32_t*
255*0e209d39SAndroid Build Coastguard Worker       getIntVector(int32_t& len, UErrorCode& status) const;
256*0e209d39SAndroid Build Coastguard Worker 
257*0e209d39SAndroid Build Coastguard Worker     /**
258*0e209d39SAndroid Build Coastguard Worker      * returns an unsigned integer from a resource.
259*0e209d39SAndroid Build Coastguard Worker      * This integer is originally 28 bits.
260*0e209d39SAndroid Build Coastguard Worker      *
261*0e209d39SAndroid Build Coastguard Worker      * @param status  fills in the outgoing error code
262*0e209d39SAndroid Build Coastguard Worker      *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
263*0e209d39SAndroid Build Coastguard Worker      *                could be a warning
264*0e209d39SAndroid Build Coastguard Worker      *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
265*0e209d39SAndroid Build Coastguard Worker      * @return an unsigned integer value
266*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
267*0e209d39SAndroid Build Coastguard Worker      */
268*0e209d39SAndroid Build Coastguard Worker     uint32_t
269*0e209d39SAndroid Build Coastguard Worker       getUInt(UErrorCode& status) const;
270*0e209d39SAndroid Build Coastguard Worker 
271*0e209d39SAndroid Build Coastguard Worker     /**
272*0e209d39SAndroid Build Coastguard Worker      * returns a signed integer from a resource.
273*0e209d39SAndroid Build Coastguard Worker      * This integer is originally 28 bit and the sign gets propagated.
274*0e209d39SAndroid Build Coastguard Worker      *
275*0e209d39SAndroid Build Coastguard Worker      * @param status  fills in the outgoing error code
276*0e209d39SAndroid Build Coastguard Worker      *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
277*0e209d39SAndroid Build Coastguard Worker      *                could be a warning
278*0e209d39SAndroid Build Coastguard Worker      *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
279*0e209d39SAndroid Build Coastguard Worker      * @return a signed integer value
280*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
281*0e209d39SAndroid Build Coastguard Worker      */
282*0e209d39SAndroid Build Coastguard Worker     int32_t
283*0e209d39SAndroid Build Coastguard Worker       getInt(UErrorCode& status) const;
284*0e209d39SAndroid Build Coastguard Worker 
285*0e209d39SAndroid Build Coastguard Worker     /**
286*0e209d39SAndroid Build Coastguard Worker      * Checks whether the resource has another element to iterate over.
287*0e209d39SAndroid Build Coastguard Worker      *
288*0e209d39SAndroid Build Coastguard Worker      * @return true if there are more elements, false if there is no more elements
289*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
290*0e209d39SAndroid Build Coastguard Worker      */
291*0e209d39SAndroid Build Coastguard Worker     UBool hasNext() const;
292*0e209d39SAndroid Build Coastguard Worker 
293*0e209d39SAndroid Build Coastguard Worker     /**
294*0e209d39SAndroid Build Coastguard Worker      * Resets the internal context of a resource so that iteration starts from the first element.
295*0e209d39SAndroid Build Coastguard Worker      *
296*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
297*0e209d39SAndroid Build Coastguard Worker      */
298*0e209d39SAndroid Build Coastguard Worker     void resetIterator();
299*0e209d39SAndroid Build Coastguard Worker 
300*0e209d39SAndroid Build Coastguard Worker     /**
301*0e209d39SAndroid Build Coastguard Worker      * Returns the key associated with this resource. Not all the resources have a key - only
302*0e209d39SAndroid Build Coastguard Worker      * those that are members of a table.
303*0e209d39SAndroid Build Coastguard Worker      *
304*0e209d39SAndroid Build Coastguard Worker      * @return a key associated to this resource, or nullptr if it doesn't have a key
305*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
306*0e209d39SAndroid Build Coastguard Worker      */
307*0e209d39SAndroid Build Coastguard Worker     const char* getKey() const;
308*0e209d39SAndroid Build Coastguard Worker 
309*0e209d39SAndroid Build Coastguard Worker     /**
310*0e209d39SAndroid Build Coastguard Worker      * Gets the locale ID of the resource bundle as a string.
311*0e209d39SAndroid Build Coastguard Worker      * Same as getLocale().getName() .
312*0e209d39SAndroid Build Coastguard Worker      *
313*0e209d39SAndroid Build Coastguard Worker      * @return the locale ID of the resource bundle as a string
314*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
315*0e209d39SAndroid Build Coastguard Worker      */
316*0e209d39SAndroid Build Coastguard Worker     const char* getName() const;
317*0e209d39SAndroid Build Coastguard Worker 
318*0e209d39SAndroid Build Coastguard Worker     /**
319*0e209d39SAndroid Build Coastguard Worker      * Returns the type of a resource. Available types are defined in enum UResType
320*0e209d39SAndroid Build Coastguard Worker      *
321*0e209d39SAndroid Build Coastguard Worker      * @return type of the given resource.
322*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
323*0e209d39SAndroid Build Coastguard Worker      */
324*0e209d39SAndroid Build Coastguard Worker     UResType getType() const;
325*0e209d39SAndroid Build Coastguard Worker 
326*0e209d39SAndroid Build Coastguard Worker     /**
327*0e209d39SAndroid Build Coastguard Worker      * Returns the next resource in a given resource or nullptr if there are no more resources
328*0e209d39SAndroid Build Coastguard Worker      *
329*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code
330*0e209d39SAndroid Build Coastguard Worker      * @return                  ResourceBundle object.
331*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
332*0e209d39SAndroid Build Coastguard Worker      */
333*0e209d39SAndroid Build Coastguard Worker     ResourceBundle
334*0e209d39SAndroid Build Coastguard Worker       getNext(UErrorCode& status);
335*0e209d39SAndroid Build Coastguard Worker 
336*0e209d39SAndroid Build Coastguard Worker     /**
337*0e209d39SAndroid Build Coastguard Worker      * Returns the next string in a resource or nullptr if there are no more resources
338*0e209d39SAndroid Build Coastguard Worker      * to iterate over.
339*0e209d39SAndroid Build Coastguard Worker      *
340*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code
341*0e209d39SAndroid Build Coastguard Worker      * @return an UnicodeString object.
342*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
343*0e209d39SAndroid Build Coastguard Worker      */
344*0e209d39SAndroid Build Coastguard Worker     UnicodeString
345*0e209d39SAndroid Build Coastguard Worker       getNextString(UErrorCode& status);
346*0e209d39SAndroid Build Coastguard Worker 
347*0e209d39SAndroid Build Coastguard Worker     /**
348*0e209d39SAndroid Build Coastguard Worker      * Returns the next string in a resource or nullptr if there are no more resources
349*0e209d39SAndroid Build Coastguard Worker      * to iterate over.
350*0e209d39SAndroid Build Coastguard Worker      *
351*0e209d39SAndroid Build Coastguard Worker      * @param key               fill in for key associated with this string
352*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code
353*0e209d39SAndroid Build Coastguard Worker      * @return an UnicodeString object.
354*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
355*0e209d39SAndroid Build Coastguard Worker      */
356*0e209d39SAndroid Build Coastguard Worker     UnicodeString
357*0e209d39SAndroid Build Coastguard Worker       getNextString(const char ** key,
358*0e209d39SAndroid Build Coastguard Worker                     UErrorCode& status);
359*0e209d39SAndroid Build Coastguard Worker 
360*0e209d39SAndroid Build Coastguard Worker     /**
361*0e209d39SAndroid Build Coastguard Worker      * Returns the resource in a resource at the specified index.
362*0e209d39SAndroid Build Coastguard Worker      *
363*0e209d39SAndroid Build Coastguard Worker      * @param index             an index to the wanted resource.
364*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code
365*0e209d39SAndroid Build Coastguard Worker      * @return                  ResourceBundle object. If there is an error, resource is invalid.
366*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
367*0e209d39SAndroid Build Coastguard Worker      */
368*0e209d39SAndroid Build Coastguard Worker     ResourceBundle
369*0e209d39SAndroid Build Coastguard Worker       get(int32_t index,
370*0e209d39SAndroid Build Coastguard Worker           UErrorCode& status) const;
371*0e209d39SAndroid Build Coastguard Worker 
372*0e209d39SAndroid Build Coastguard Worker     /**
373*0e209d39SAndroid Build Coastguard Worker      * Returns the string in a given resource at the specified index.
374*0e209d39SAndroid Build Coastguard Worker      *
375*0e209d39SAndroid Build Coastguard Worker      * @param index             an index to the wanted string.
376*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code
377*0e209d39SAndroid Build Coastguard Worker      * @return                  an UnicodeString object. If there is an error, string is bogus
378*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
379*0e209d39SAndroid Build Coastguard Worker      */
380*0e209d39SAndroid Build Coastguard Worker     UnicodeString
381*0e209d39SAndroid Build Coastguard Worker       getStringEx(int32_t index,
382*0e209d39SAndroid Build Coastguard Worker                   UErrorCode& status) const;
383*0e209d39SAndroid Build Coastguard Worker 
384*0e209d39SAndroid Build Coastguard Worker     /**
385*0e209d39SAndroid Build Coastguard Worker      * Returns a resource in a resource that has a given key. This procedure works only with table
386*0e209d39SAndroid Build Coastguard Worker      * resources.
387*0e209d39SAndroid Build Coastguard Worker      *
388*0e209d39SAndroid Build Coastguard Worker      * @param key               a key associated with the wanted resource
389*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code.
390*0e209d39SAndroid Build Coastguard Worker      * @return                  ResourceBundle object. If there is an error, resource is invalid.
391*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
392*0e209d39SAndroid Build Coastguard Worker      */
393*0e209d39SAndroid Build Coastguard Worker     ResourceBundle
394*0e209d39SAndroid Build Coastguard Worker       get(const char* key,
395*0e209d39SAndroid Build Coastguard Worker           UErrorCode& status) const;
396*0e209d39SAndroid Build Coastguard Worker 
397*0e209d39SAndroid Build Coastguard Worker     /**
398*0e209d39SAndroid Build Coastguard Worker      * Returns a string in a resource that has a given key. This procedure works only with table
399*0e209d39SAndroid Build Coastguard Worker      * resources.
400*0e209d39SAndroid Build Coastguard Worker      *
401*0e209d39SAndroid Build Coastguard Worker      * @param key               a key associated with the wanted string
402*0e209d39SAndroid Build Coastguard Worker      * @param status            fills in the outgoing error code
403*0e209d39SAndroid Build Coastguard Worker      * @return                  an UnicodeString object. If there is an error, string is bogus
404*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
405*0e209d39SAndroid Build Coastguard Worker      */
406*0e209d39SAndroid Build Coastguard Worker     UnicodeString
407*0e209d39SAndroid Build Coastguard Worker       getStringEx(const char* key,
408*0e209d39SAndroid Build Coastguard Worker                   UErrorCode& status) const;
409*0e209d39SAndroid Build Coastguard Worker 
410*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
411*0e209d39SAndroid Build Coastguard Worker     /**
412*0e209d39SAndroid Build Coastguard Worker      * Return the version number associated with this ResourceBundle as a string. Please
413*0e209d39SAndroid Build Coastguard Worker      * use getVersion, as this method is going to be deprecated.
414*0e209d39SAndroid Build Coastguard Worker      *
415*0e209d39SAndroid Build Coastguard Worker      * @return  A version number string as specified in the resource bundle or its parent.
416*0e209d39SAndroid Build Coastguard Worker      *          The caller does not own this string.
417*0e209d39SAndroid Build Coastguard Worker      * @see getVersion
418*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 2.8 Use getVersion instead.
419*0e209d39SAndroid Build Coastguard Worker      */
420*0e209d39SAndroid Build Coastguard Worker     const char* getVersionNumber() const;
421*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_DEPRECATED_API */
422*0e209d39SAndroid Build Coastguard Worker 
423*0e209d39SAndroid Build Coastguard Worker     /**
424*0e209d39SAndroid Build Coastguard Worker      * Return the version number associated with this ResourceBundle as a UVersionInfo array.
425*0e209d39SAndroid Build Coastguard Worker      *
426*0e209d39SAndroid Build Coastguard Worker      * @param versionInfo A UVersionInfo array that is filled with the version number
427*0e209d39SAndroid Build Coastguard Worker      *                    as specified in the resource bundle or its parent.
428*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.0
429*0e209d39SAndroid Build Coastguard Worker      */
430*0e209d39SAndroid Build Coastguard Worker     void
431*0e209d39SAndroid Build Coastguard Worker       getVersion(UVersionInfo versionInfo) const;
432*0e209d39SAndroid Build Coastguard Worker 
433*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
434*0e209d39SAndroid Build Coastguard Worker     /**
435*0e209d39SAndroid Build Coastguard Worker      * Return the Locale associated with this ResourceBundle.
436*0e209d39SAndroid Build Coastguard Worker      *
437*0e209d39SAndroid Build Coastguard Worker      * @return a Locale object
438*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 2.8 Use getLocale(ULocDataLocaleType type, UErrorCode &status) overload instead.
439*0e209d39SAndroid Build Coastguard Worker      */
440*0e209d39SAndroid Build Coastguard Worker     const Locale& getLocale() const;
441*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_DEPRECATED_API */
442*0e209d39SAndroid Build Coastguard Worker 
443*0e209d39SAndroid Build Coastguard Worker     /**
444*0e209d39SAndroid Build Coastguard Worker      * Return the Locale associated with this ResourceBundle.
445*0e209d39SAndroid Build Coastguard Worker      * @param type You can choose between requested, valid and actual
446*0e209d39SAndroid Build Coastguard Worker      *             locale. For description see the definition of
447*0e209d39SAndroid Build Coastguard Worker      *             ULocDataLocaleType in uloc.h
448*0e209d39SAndroid Build Coastguard Worker      * @param status just for catching illegal arguments
449*0e209d39SAndroid Build Coastguard Worker      *
450*0e209d39SAndroid Build Coastguard Worker      * @return a Locale object
451*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.8
452*0e209d39SAndroid Build Coastguard Worker      */
453*0e209d39SAndroid Build Coastguard Worker     const Locale
454*0e209d39SAndroid Build Coastguard Worker       getLocale(ULocDataLocaleType type, UErrorCode &status) const;
455*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
456*0e209d39SAndroid Build Coastguard Worker     /**
457*0e209d39SAndroid Build Coastguard Worker      * This API implements multilevel fallback
458*0e209d39SAndroid Build Coastguard Worker      * @internal
459*0e209d39SAndroid Build Coastguard Worker      */
460*0e209d39SAndroid Build Coastguard Worker     ResourceBundle
461*0e209d39SAndroid Build Coastguard Worker         getWithFallback(const char* key, UErrorCode& status);
462*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_INTERNAL_API */
463*0e209d39SAndroid Build Coastguard Worker     /**
464*0e209d39SAndroid Build Coastguard Worker      * ICU "poor man's RTTI", returns a UClassID for the actual class.
465*0e209d39SAndroid Build Coastguard Worker      *
466*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.2
467*0e209d39SAndroid Build Coastguard Worker      */
468*0e209d39SAndroid Build Coastguard Worker     virtual UClassID getDynamicClassID() const override;
469*0e209d39SAndroid Build Coastguard Worker 
470*0e209d39SAndroid Build Coastguard Worker     /**
471*0e209d39SAndroid Build Coastguard Worker      * ICU "poor man's RTTI", returns a UClassID for this class.
472*0e209d39SAndroid Build Coastguard Worker      *
473*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 2.2
474*0e209d39SAndroid Build Coastguard Worker      */
475*0e209d39SAndroid Build Coastguard Worker     static UClassID U_EXPORT2 getStaticClassID();
476*0e209d39SAndroid Build Coastguard Worker 
477*0e209d39SAndroid Build Coastguard Worker private:
478*0e209d39SAndroid Build Coastguard Worker     ResourceBundle() = delete; // default constructor not implemented
479*0e209d39SAndroid Build Coastguard Worker 
480*0e209d39SAndroid Build Coastguard Worker     UResourceBundle *fResource;
481*0e209d39SAndroid Build Coastguard Worker     void constructForLocale(const UnicodeString& path, const Locale& locale, UErrorCode& error);
482*0e209d39SAndroid Build Coastguard Worker     Locale *fLocale;
483*0e209d39SAndroid Build Coastguard Worker };
484*0e209d39SAndroid Build Coastguard Worker 
485*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
486*0e209d39SAndroid Build Coastguard Worker 
487*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */
488*0e209d39SAndroid Build Coastguard Worker 
489*0e209d39SAndroid Build Coastguard Worker #endif
490