Home | History | Annotate | Download | only in unicode
      1 /*
      2 **********************************************************************
      3 *   Copyright (C) 1997-2012,2014, International Business Machines
      4 *   Corporation and others.  All Rights Reserved.
      5 **********************************************************************
      6 *
      7 * File URES.H (formerly CRESBUND.H)
      8 *
      9 * Modification History:
     10 *
     11 *   Date        Name        Description
     12 *   04/01/97    aliu        Creation.
     13 *   02/22/99    damiba      overhaul.
     14 *   04/04/99    helena      Fixed internal header inclusion.
     15 *   04/15/99    Madhu       Updated Javadoc
     16 *   06/14/99    stephen     Removed functions taking a filename suffix.
     17 *   07/20/99    stephen     Language-independent ypedef to void*
     18 *   11/09/99    weiv        Added ures_getLocale()
     19 *   06/24/02    weiv        Added support for resource sharing
     20 ******************************************************************************
     21 */
     22 
     23 #ifndef URES_H
     24 #define URES_H
     25 
     26 #include "unicode/utypes.h"
     27 #include "unicode/uloc.h"
     28 #include "unicode/localpointer.h"
     29 
     30 /**
     31  * \file
     32  * \brief C API: Resource Bundle
     33  *
     34  * <h2>C API: Resource Bundle</h2>
     35  *
     36  * C API representing a collection of resource information pertaining to a given
     37  * locale. A resource bundle provides a way of accessing locale- specific information in
     38  * a data file. You create a resource bundle that manages the resources for a given
     39  * locale and then ask it for individual resources.
     40  * <P>
     41  * Resource bundles in ICU4C are currently defined using text files which conform to the following
     42  * <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt">BNF definition</a>.
     43  * More on resource bundle concepts and syntax can be found in the
     44  * <a href="http://icu-project.org/userguide/ResourceManagement.html">Users Guide</a>.
     45  * <P>
     46  */
     47 
     48 /**
     49  * UResourceBundle is an opaque type for handles for resource bundles in C APIs.
     50  * @stable ICU 2.0
     51  */
     52 struct UResourceBundle;
     53 
     54 /**
     55  * @stable ICU 2.0
     56  */
     57 typedef struct UResourceBundle UResourceBundle;
     58 
     59 /**
     60  * Numeric constants for types of resource items.
     61  * @see ures_getType
     62  * @stable ICU 2.0
     63  */
     64 typedef enum {
     65     /** Resource type constant for "no resource". @stable ICU 2.6 */
     66     URES_NONE=-1,
     67 
     68     /** Resource type constant for 16-bit Unicode strings. @stable ICU 2.6 */
     69     URES_STRING=0,
     70 
     71     /** Resource type constant for binary data. @stable ICU 2.6 */
     72     URES_BINARY=1,
     73 
     74     /** Resource type constant for tables of key-value pairs. @stable ICU 2.6 */
     75     URES_TABLE=2,
     76 
     77     /**
     78      * Resource type constant for aliases;
     79      * internally stores a string which identifies the actual resource
     80      * storing the data (can be in a different resource bundle).
     81      * Resolved internally before delivering the actual resource through the API.
     82      * @stable ICU 2.6
     83      */
     84     URES_ALIAS=3,
     85 
     86     /**
     87      * Resource type constant for a single 28-bit integer, interpreted as
     88      * signed or unsigned by the ures_getInt() or ures_getUInt() function.
     89      * @see ures_getInt
     90      * @see ures_getUInt
     91      * @stable ICU 2.6
     92      */
     93     URES_INT=7,
     94 
     95     /** Resource type constant for arrays of resources. @stable ICU 2.6 */
     96     URES_ARRAY=8,
     97 
     98     /**
     99      * Resource type constant for vectors of 32-bit integers.
    100      * @see ures_getIntVector
    101      * @stable ICU 2.6
    102      */
    103     URES_INT_VECTOR = 14,
    104 #ifndef U_HIDE_DEPRECATED_API
    105     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    106     RES_NONE=URES_NONE,
    107     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    108     RES_STRING=URES_STRING,
    109     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    110     RES_BINARY=URES_BINARY,
    111     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    112     RES_TABLE=URES_TABLE,
    113     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    114     RES_ALIAS=URES_ALIAS,
    115     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    116     RES_INT=URES_INT,
    117     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    118     RES_ARRAY=URES_ARRAY,
    119     /** @deprecated ICU 2.6 Use the URES_ constant instead. */
    120     RES_INT_VECTOR=URES_INT_VECTOR,
    121     /** @deprecated ICU 2.6 Not used. */
    122     RES_RESERVED=15,
    123 #endif /* U_HIDE_DEPRECATED_API */
    124 
    125     URES_LIMIT = 16
    126 } UResType;
    127 
    128 /*
    129  * Functions to create and destroy resource bundles.
    130  */
    131 
    132 /**
    133  * Opens a UResourceBundle, from which users can extract strings by using
    134  * their corresponding keys.
    135  * Note that the caller is responsible of calling <TT>ures_close</TT> on each succesfully
    136  * opened resource bundle.
    137  * @param packageName   The packageName and locale together point to an ICU udata object,
    138  *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
    139  *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
    140  *                      a package registered with udata_setAppData(). Using a full file or directory
    141  *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
    142  * @param locale  specifies the locale for which we want to open the resource
    143  *                if NULL, the default locale will be used. If strlen(locale) == 0
    144  *                root locale will be used.
    145  *
    146  * @param status  fills in the outgoing error code.
    147  * The UErrorCode err parameter is used to return status information to the user. To
    148  * check whether the construction succeeded or not, you should check the value of
    149  * U_SUCCESS(err). If you wish more detailed information, you can check for
    150  * informational status results which still indicate success. U_USING_FALLBACK_WARNING
    151  * indicates that a fall back locale was used. For example, 'de_CH' was requested,
    152  * but nothing was found there, so 'de' was used. U_USING_DEFAULT_WARNING indicates that
    153  * the default locale data or root locale data was used; neither the requested locale
    154  * nor any of its fall back locales could be found. Please see the users guide for more
    155  * information on this topic.
    156  * @return      a newly allocated resource bundle.
    157  * @see ures_close
    158  * @stable ICU 2.0
    159  */
    160 U_STABLE UResourceBundle*  U_EXPORT2
    161 ures_open(const char*    packageName,
    162           const char*  locale,
    163           UErrorCode*     status);
    164 
    165 
    166 /** This function does not care what kind of localeID is passed in. It simply opens a bundle with
    167  *  that name. Fallback mechanism is disabled for the new bundle. If the requested bundle contains
    168  *  an %%ALIAS directive, the results are undefined.
    169  * @param packageName   The packageName and locale together point to an ICU udata object,
    170  *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
    171  *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
    172  *                      a package registered with udata_setAppData(). Using a full file or directory
    173  *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
    174  * @param locale  specifies the locale for which we want to open the resource
    175  *                if NULL, the default locale will be used. If strlen(locale) == 0
    176  *                root locale will be used.
    177  *
    178  * @param status fills in the outgoing error code. Either U_ZERO_ERROR or U_MISSING_RESOURCE_ERROR
    179  * @return      a newly allocated resource bundle or NULL if it doesn't exist.
    180  * @see ures_close
    181  * @stable ICU 2.0
    182  */
    183 U_STABLE UResourceBundle* U_EXPORT2
    184 ures_openDirect(const char* packageName,
    185                 const char* locale,
    186                 UErrorCode* status);
    187 
    188 /**
    189  * Same as ures_open() but takes a const UChar *path.
    190  * This path will be converted to char * using the default converter,
    191  * then ures_open() is called.
    192  *
    193  * @param packageName   The packageName and locale together point to an ICU udata object,
    194  *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
    195  *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
    196  *                      a package registered with udata_setAppData(). Using a full file or directory
    197  *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
    198  * @param locale  specifies the locale for which we want to open the resource
    199  *                if NULL, the default locale will be used. If strlen(locale) == 0
    200  *                root locale will be used.
    201  * @param status  fills in the outgoing error code.
    202  * @return      a newly allocated resource bundle.
    203  * @see ures_open
    204  * @stable ICU 2.0
    205  */
    206 U_STABLE UResourceBundle* U_EXPORT2
    207 ures_openU(const UChar* packageName,
    208            const char* locale,
    209            UErrorCode* status);
    210 
    211 #ifndef U_HIDE_DEPRECATED_API
    212 /**
    213  * Returns the number of strings/arrays in resource bundles.
    214  * Better to use ures_getSize, as this function will be deprecated.
    215  *
    216  *@param resourceBundle resource bundle containing the desired strings
    217  *@param resourceKey key tagging the resource
    218  *@param err fills in the outgoing error code
    219  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    220  *                could be a non-failing error
    221  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_FALLBACK_WARNING </TT>
    222  *@return: for    <STRONG>Arrays</STRONG>: returns the number of resources in the array
    223  *                <STRONG>Tables</STRONG>: returns the number of resources in the table
    224  *                <STRONG>single string</STRONG>: returns 1
    225  *@see ures_getSize
    226  * @deprecated ICU 2.8 User ures_getSize instead
    227  */
    228 U_DEPRECATED int32_t U_EXPORT2
    229 ures_countArrayItems(const UResourceBundle* resourceBundle,
    230                      const char* resourceKey,
    231                      UErrorCode* err);
    232 #endif  /* U_HIDE_DEPRECATED_API */
    233 
    234 /**
    235  * Close a resource bundle, all pointers returned from the various ures_getXXX calls
    236  * on this particular bundle should be considered invalid henceforth.
    237  *
    238  * @param resourceBundle a pointer to a resourceBundle struct. Can be NULL.
    239  * @see ures_open
    240  * @stable ICU 2.0
    241  */
    242 U_STABLE void U_EXPORT2
    243 ures_close(UResourceBundle* resourceBundle);
    244 
    245 #if U_SHOW_CPLUSPLUS_API
    246 
    247 U_NAMESPACE_BEGIN
    248 
    249 /**
    250  * \class LocalUResourceBundlePointer
    251  * "Smart pointer" class, closes a UResourceBundle via ures_close().
    252  * For most methods see the LocalPointerBase base class.
    253  *
    254  * @see LocalPointerBase
    255  * @see LocalPointer
    256  * @stable ICU 4.4
    257  */
    258 U_DEFINE_LOCAL_OPEN_POINTER(LocalUResourceBundlePointer, UResourceBundle, ures_close);
    259 
    260 U_NAMESPACE_END
    261 
    262 #endif
    263 
    264 #ifndef U_HIDE_DEPRECATED_API
    265 /**
    266  * Return the version number associated with this ResourceBundle as a string. Please
    267  * use ures_getVersion as this function is going to be deprecated.
    268  *
    269  * @param resourceBundle The resource bundle for which the version is checked.
    270  * @return  A version number string as specified in the resource bundle or its parent.
    271  *          The caller does not own this string.
    272  * @see ures_getVersion
    273  * @deprecated ICU 2.8 Use ures_getVersion instead.
    274  */
    275 U_DEPRECATED const char* U_EXPORT2
    276 ures_getVersionNumber(const UResourceBundle*   resourceBundle);
    277 #endif  /* U_HIDE_DEPRECATED_API */
    278 
    279 /**
    280  * Return the version number associated with this ResourceBundle as an
    281  * UVersionInfo array.
    282  *
    283  * @param resB The resource bundle for which the version is checked.
    284  * @param versionInfo A UVersionInfo array that is filled with the version number
    285  *                    as specified in the resource bundle or its parent.
    286  * @stable ICU 2.0
    287  */
    288 U_STABLE void U_EXPORT2
    289 ures_getVersion(const UResourceBundle* resB,
    290                 UVersionInfo versionInfo);
    291 
    292 #ifndef U_HIDE_DEPRECATED_API
    293 /**
    294  * Return the name of the Locale associated with this ResourceBundle. This API allows
    295  * you to query for the real locale of the resource. For example, if you requested
    296  * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned.
    297  * For subresources, the locale where this resource comes from will be returned.
    298  * If fallback has occured, getLocale will reflect this.
    299  *
    300  * @param resourceBundle resource bundle in question
    301  * @param status just for catching illegal arguments
    302  * @return  A Locale name
    303  * @deprecated ICU 2.8 Use ures_getLocaleByType instead.
    304  */
    305 U_DEPRECATED const char* U_EXPORT2
    306 ures_getLocale(const UResourceBundle* resourceBundle,
    307                UErrorCode* status);
    308 #endif  /* U_HIDE_DEPRECATED_API */
    309 
    310 /**
    311  * Return the name of the Locale associated with this ResourceBundle.
    312  * You can choose between requested, valid and real locale.
    313  *
    314  * @param resourceBundle resource bundle in question
    315  * @param type You can choose between requested, valid and actual
    316  *             locale. For description see the definition of
    317  *             ULocDataLocaleType in uloc.h
    318  * @param status just for catching illegal arguments
    319  * @return  A Locale name
    320  * @stable ICU 2.8
    321  */
    322 U_STABLE const char* U_EXPORT2
    323 ures_getLocaleByType(const UResourceBundle* resourceBundle,
    324                      ULocDataLocaleType type,
    325                      UErrorCode* status);
    326 
    327 
    328 #ifndef U_HIDE_INTERNAL_API
    329 /**
    330  * Same as ures_open() but uses the fill-in parameter instead of allocating
    331  * a bundle, if r!=NULL.
    332  * TODO need to revisit usefulness of this function
    333  *      and usage model for fillIn parameters without knowing sizeof(UResourceBundle)
    334  * @param r The resourcebundle to open
    335  * @param packageName   The packageName and locale together point to an ICU udata object,
    336  *                      as defined by <code> udata_open( packageName, "res", locale, err) </code>
    337  *                      or equivalent.  Typically, packageName will refer to a (.dat) file, or to
    338  *                      a package registered with udata_setAppData(). Using a full file or directory
    339  *                      pathname for packageName is deprecated. If NULL, ICU data will be used.
    340  * @param localeID specifies the locale for which we want to open the resource
    341  * @param status The error code
    342  * @return a newly allocated resource bundle or NULL if it doesn't exist.
    343  * @internal
    344  */
    345 U_INTERNAL void U_EXPORT2
    346 ures_openFillIn(UResourceBundle *r,
    347                 const char* packageName,
    348                 const char* localeID,
    349                 UErrorCode* status);
    350 #endif  /* U_HIDE_INTERNAL_API */
    351 
    352 /**
    353  * Returns a string from a string resource type
    354  *
    355  * @param resourceBundle a string resource
    356  * @param len    fills in the length of resulting string
    357  * @param status fills in the outgoing error code
    358  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    359  *                Always check the value of status. Don't count on returning NULL.
    360  *                could be a non-failing error
    361  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
    362  * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
    363  * @see ures_getBinary
    364  * @see ures_getIntVector
    365  * @see ures_getInt
    366  * @see ures_getUInt
    367  * @stable ICU 2.0
    368  */
    369 U_STABLE const UChar* U_EXPORT2
    370 ures_getString(const UResourceBundle* resourceBundle,
    371                int32_t* len,
    372                UErrorCode* status);
    373 
    374 /**
    375  * Returns a UTF-8 string from a string resource.
    376  * The UTF-8 string may be returnable directly as a pointer, or
    377  * it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
    378  * or equivalent.
    379  *
    380  * If forceCopy==TRUE, then the string is always written to the dest buffer
    381  * and dest is returned.
    382  *
    383  * If forceCopy==FALSE, then the string is returned as a pointer if possible,
    384  * without needing a dest buffer (it can be NULL). If the string needs to be
    385  * copied or transformed, then it may be placed into dest at an arbitrary offset.
    386  *
    387  * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and
    388  * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual.
    389  *
    390  * If the string is transformed from UTF-16, then a conversion error may occur
    391  * if an unpaired surrogate is encountered. If the function is successful, then
    392  * the output UTF-8 string is always well-formed.
    393  *
    394  * @param resB Resource bundle.
    395  * @param dest Destination buffer. Can be NULL only if capacity=*length==0.
    396  * @param length Input: Capacity of destination buffer.
    397  *               Output: Actual length of the UTF-8 string, not counting the
    398  *               terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
    399  *               Can be NULL, meaning capacity=0 and the string length is not
    400  *               returned to the caller.
    401  * @param forceCopy If TRUE, then the output string will always be written to
    402  *                  dest, with U_BUFFER_OVERFLOW_ERROR and
    403  *                  U_STRING_NOT_TERMINATED_WARNING set if appropriate.
    404  *                  If FALSE, then the dest buffer may or may not contain a
    405  *                  copy of the string. dest may or may not be modified.
    406  *                  If a copy needs to be written, then the UErrorCode parameter
    407  *                  indicates overflow etc. as usual.
    408  * @param status Pointer to a standard ICU error code. Its input value must
    409  *               pass the U_SUCCESS() test, or else the function returns
    410  *               immediately. Check for U_FAILURE() on output or use with
    411  *               function chaining. (See User Guide for details.)
    412  * @return The pointer to the UTF-8 string. It may be dest, or at some offset
    413  *         from dest (only if !forceCopy), or in unrelated memory.
    414  *         Always NUL-terminated unless the string was written to dest and
    415  *         length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set).
    416  *
    417  * @see ures_getString
    418  * @see u_strToUTF8
    419  * @stable ICU 3.6
    420  */
    421 U_STABLE const char * U_EXPORT2
    422 ures_getUTF8String(const UResourceBundle *resB,
    423                    char *dest, int32_t *length,
    424                    UBool forceCopy,
    425                    UErrorCode *status);
    426 
    427 /**
    428  * Returns a binary data from a binary resource.
    429  *
    430  * @param resourceBundle a string resource
    431  * @param len    fills in the length of resulting byte chunk
    432  * @param status fills in the outgoing error code
    433  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    434  *                Always check the value of status. Don't count on returning NULL.
    435  *                could be a non-failing error
    436  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
    437  * @return a pointer to a chunk of unsigned bytes which live in a memory mapped/DLL file.
    438  * @see ures_getString
    439  * @see ures_getIntVector
    440  * @see ures_getInt
    441  * @see ures_getUInt
    442  * @stable ICU 2.0
    443  */
    444 U_STABLE const uint8_t* U_EXPORT2
    445 ures_getBinary(const UResourceBundle* resourceBundle,
    446                int32_t* len,
    447                UErrorCode* status);
    448 
    449 /**
    450  * Returns a 32 bit integer array from a resource.
    451  *
    452  * @param resourceBundle an int vector resource
    453  * @param len    fills in the length of resulting byte chunk
    454  * @param status fills in the outgoing error code
    455  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    456  *                Always check the value of status. Don't count on returning NULL.
    457  *                could be a non-failing error
    458  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
    459  * @return a pointer to a chunk of integers which live in a memory mapped/DLL file.
    460  * @see ures_getBinary
    461  * @see ures_getString
    462  * @see ures_getInt
    463  * @see ures_getUInt
    464  * @stable ICU 2.0
    465  */
    466 U_STABLE const int32_t* U_EXPORT2
    467 ures_getIntVector(const UResourceBundle* resourceBundle,
    468                   int32_t* len,
    469                   UErrorCode* status);
    470 
    471 /**
    472  * Returns an unsigned integer from a resource.
    473  * This integer is originally 28 bits.
    474  *
    475  * @param resourceBundle a string resource
    476  * @param status fills in the outgoing error code
    477  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    478  *                could be a non-failing error
    479  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
    480  * @return an integer value
    481  * @see ures_getInt
    482  * @see ures_getIntVector
    483  * @see ures_getBinary
    484  * @see ures_getString
    485  * @stable ICU 2.0
    486  */
    487 U_STABLE uint32_t U_EXPORT2
    488 ures_getUInt(const UResourceBundle* resourceBundle,
    489              UErrorCode *status);
    490 
    491 /**
    492  * Returns a signed integer from a resource.
    493  * This integer is originally 28 bit and the sign gets propagated.
    494  *
    495  * @param resourceBundle a string resource
    496  * @param status  fills in the outgoing error code
    497  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    498  *                could be a non-failing error
    499  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
    500  * @return an integer value
    501  * @see ures_getUInt
    502  * @see ures_getIntVector
    503  * @see ures_getBinary
    504  * @see ures_getString
    505  * @stable ICU 2.0
    506  */
    507 U_STABLE int32_t U_EXPORT2
    508 ures_getInt(const UResourceBundle* resourceBundle,
    509             UErrorCode *status);
    510 
    511 /**
    512  * Returns the size of a resource. Size for scalar types is always 1,
    513  * and for vector/table types is the number of child resources.
    514  * @warning Integer array is treated as a scalar type. There are no
    515  *          APIs to access individual members of an integer array. It
    516  *          is always returned as a whole.
    517  * @param resourceBundle a resource
    518  * @return number of resources in a given resource.
    519  * @stable ICU 2.0
    520  */
    521 U_STABLE int32_t U_EXPORT2
    522 ures_getSize(const UResourceBundle *resourceBundle);
    523 
    524 /**
    525  * Returns the type of a resource. Available types are defined in enum UResType
    526  *
    527  * @param resourceBundle a resource
    528  * @return type of the given resource.
    529  * @see UResType
    530  * @stable ICU 2.0
    531  */
    532 U_STABLE UResType U_EXPORT2
    533 ures_getType(const UResourceBundle *resourceBundle);
    534 
    535 /**
    536  * Returns the key associated with a given resource. Not all the resources have a key - only
    537  * those that are members of a table.
    538  *
    539  * @param resourceBundle a resource
    540  * @return a key associated to this resource, or NULL if it doesn't have a key
    541  * @stable ICU 2.0
    542  */
    543 U_STABLE const char * U_EXPORT2
    544 ures_getKey(const UResourceBundle *resourceBundle);
    545 
    546 /* ITERATION API
    547     This API provides means for iterating through a resource
    548 */
    549 
    550 /**
    551  * Resets the internal context of a resource so that iteration starts from the first element.
    552  *
    553  * @param resourceBundle a resource
    554  * @stable ICU 2.0
    555  */
    556 U_STABLE void U_EXPORT2
    557 ures_resetIterator(UResourceBundle *resourceBundle);
    558 
    559 /**
    560  * Checks whether the given resource has another element to iterate over.
    561  *
    562  * @param resourceBundle a resource
    563  * @return TRUE if there are more elements, FALSE if there is no more elements
    564  * @stable ICU 2.0
    565  */
    566 U_STABLE UBool U_EXPORT2
    567 ures_hasNext(const UResourceBundle *resourceBundle);
    568 
    569 /**
    570  * Returns the next resource in a given resource or NULL if there are no more resources
    571  * to iterate over. Features a fill-in parameter.
    572  *
    573  * @param resourceBundle    a resource
    574  * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be closed by the caller.
    575  *                          Alternatively, you can supply a struct to be filled by this function.
    576  * @param status            fills in the outgoing error code. You may still get a non NULL result even if an
    577  *                          error occured. Check status instead.
    578  * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
    579  * @stable ICU 2.0
    580  */
    581 U_STABLE UResourceBundle* U_EXPORT2
    582 ures_getNextResource(UResourceBundle *resourceBundle,
    583                      UResourceBundle *fillIn,
    584                      UErrorCode *status);
    585 
    586 /**
    587  * Returns the next string in a given resource or NULL if there are no more resources
    588  * to iterate over.
    589  *
    590  * @param resourceBundle    a resource
    591  * @param len               fill in length of the string
    592  * @param key               fill in for key associated with this string. NULL if no key
    593  * @param status            fills in the outgoing error code. If an error occured, we may return NULL, but don't
    594  *                          count on it. Check status instead!
    595  * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
    596  * @stable ICU 2.0
    597  */
    598 U_STABLE const UChar* U_EXPORT2
    599 ures_getNextString(UResourceBundle *resourceBundle,
    600                    int32_t* len,
    601                    const char ** key,
    602                    UErrorCode *status);
    603 
    604 /**
    605  * Returns the resource in a given resource at the specified index. Features a fill-in parameter.
    606  *
    607  * @param resourceBundle    the resource bundle from which to get a sub-resource
    608  * @param indexR            an index to the wanted resource.
    609  * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be closed by the caller.
    610  *                          Alternatively, you can supply a struct to be filled by this function.
    611  * @param status            fills in the outgoing error code. Don't count on NULL being returned if an error has
    612  *                          occured. Check status instead.
    613  * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
    614  * @stable ICU 2.0
    615  */
    616 U_STABLE UResourceBundle* U_EXPORT2
    617 ures_getByIndex(const UResourceBundle *resourceBundle,
    618                 int32_t indexR,
    619                 UResourceBundle *fillIn,
    620                 UErrorCode *status);
    621 
    622 /**
    623  * Returns the string in a given resource at the specified index.
    624  *
    625  * @param resourceBundle    a resource
    626  * @param indexS            an index to the wanted string.
    627  * @param len               fill in length of the string
    628  * @param status            fills in the outgoing error code. If an error occured, we may return NULL, but don't
    629  *                          count on it. Check status instead!
    630  * @return                  a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
    631  * @stable ICU 2.0
    632  */
    633 U_STABLE const UChar* U_EXPORT2
    634 ures_getStringByIndex(const UResourceBundle *resourceBundle,
    635                       int32_t indexS,
    636                       int32_t* len,
    637                       UErrorCode *status);
    638 
    639 /**
    640  * Returns a UTF-8 string from a resource at the specified index.
    641  * The UTF-8 string may be returnable directly as a pointer, or
    642  * it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
    643  * or equivalent.
    644  *
    645  * If forceCopy==TRUE, then the string is always written to the dest buffer
    646  * and dest is returned.
    647  *
    648  * If forceCopy==FALSE, then the string is returned as a pointer if possible,
    649  * without needing a dest buffer (it can be NULL). If the string needs to be
    650  * copied or transformed, then it may be placed into dest at an arbitrary offset.
    651  *
    652  * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and
    653  * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual.
    654  *
    655  * If the string is transformed from UTF-16, then a conversion error may occur
    656  * if an unpaired surrogate is encountered. If the function is successful, then
    657  * the output UTF-8 string is always well-formed.
    658  *
    659  * @param resB Resource bundle.
    660  * @param stringIndex An index to the wanted string.
    661  * @param dest Destination buffer. Can be NULL only if capacity=*length==0.
    662  * @param pLength Input: Capacity of destination buffer.
    663  *               Output: Actual length of the UTF-8 string, not counting the
    664  *               terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
    665  *               Can be NULL, meaning capacity=0 and the string length is not
    666  *               returned to the caller.
    667  * @param forceCopy If TRUE, then the output string will always be written to
    668  *                  dest, with U_BUFFER_OVERFLOW_ERROR and
    669  *                  U_STRING_NOT_TERMINATED_WARNING set if appropriate.
    670  *                  If FALSE, then the dest buffer may or may not contain a
    671  *                  copy of the string. dest may or may not be modified.
    672  *                  If a copy needs to be written, then the UErrorCode parameter
    673  *                  indicates overflow etc. as usual.
    674  * @param status Pointer to a standard ICU error code. Its input value must
    675  *               pass the U_SUCCESS() test, or else the function returns
    676  *               immediately. Check for U_FAILURE() on output or use with
    677  *               function chaining. (See User Guide for details.)
    678  * @return The pointer to the UTF-8 string. It may be dest, or at some offset
    679  *         from dest (only if !forceCopy), or in unrelated memory.
    680  *         Always NUL-terminated unless the string was written to dest and
    681  *         length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set).
    682  *
    683  * @see ures_getStringByIndex
    684  * @see u_strToUTF8
    685  * @stable ICU 3.6
    686  */
    687 U_STABLE const char * U_EXPORT2
    688 ures_getUTF8StringByIndex(const UResourceBundle *resB,
    689                           int32_t stringIndex,
    690                           char *dest, int32_t *pLength,
    691                           UBool forceCopy,
    692                           UErrorCode *status);
    693 
    694 /**
    695  * Returns a resource in a given resource that has a given key. This procedure works only with table
    696  * resources. Features a fill-in parameter.
    697  *
    698  * @param resourceBundle    a resource
    699  * @param key               a key associated with the wanted resource
    700  * @param fillIn            if NULL a new UResourceBundle struct is allocated and must be closed by the caller.
    701  *                          Alternatively, you can supply a struct to be filled by this function.
    702  * @param status            fills in the outgoing error code.
    703  * @return                  a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it
    704  * @stable ICU 2.0
    705  */
    706 U_STABLE UResourceBundle* U_EXPORT2
    707 ures_getByKey(const UResourceBundle *resourceBundle,
    708               const char* key,
    709               UResourceBundle *fillIn,
    710               UErrorCode *status);
    711 
    712 /**
    713  * Returns a string in a given resource that has a given key. This procedure works only with table
    714  * resources.
    715  *
    716  * @param resB              a resource
    717  * @param key               a key associated with the wanted string
    718  * @param len               fill in length of the string
    719  * @param status            fills in the outgoing error code. If an error occured, we may return NULL, but don't
    720  *                          count on it. Check status instead!
    721  * @return                  a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file.
    722  * @stable ICU 2.0
    723  */
    724 U_STABLE const UChar* U_EXPORT2
    725 ures_getStringByKey(const UResourceBundle *resB,
    726                     const char* key,
    727                     int32_t* len,
    728                     UErrorCode *status);
    729 
    730 /**
    731  * Returns a UTF-8 string from a resource and a key.
    732  * This function works only with table resources.
    733  *
    734  * The UTF-8 string may be returnable directly as a pointer, or
    735  * it may need to be copied, or transformed from UTF-16 using u_strToUTF8()
    736  * or equivalent.
    737  *
    738  * If forceCopy==TRUE, then the string is always written to the dest buffer
    739  * and dest is returned.
    740  *
    741  * If forceCopy==FALSE, then the string is returned as a pointer if possible,
    742  * without needing a dest buffer (it can be NULL). If the string needs to be
    743  * copied or transformed, then it may be placed into dest at an arbitrary offset.
    744  *
    745  * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and
    746  * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual.
    747  *
    748  * If the string is transformed from UTF-16, then a conversion error may occur
    749  * if an unpaired surrogate is encountered. If the function is successful, then
    750  * the output UTF-8 string is always well-formed.
    751  *
    752  * @param resB Resource bundle.
    753  * @param key  A key associated with the wanted resource
    754  * @param dest Destination buffer. Can be NULL only if capacity=*length==0.
    755  * @param pLength Input: Capacity of destination buffer.
    756  *               Output: Actual length of the UTF-8 string, not counting the
    757  *               terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR.
    758  *               Can be NULL, meaning capacity=0 and the string length is not
    759  *               returned to the caller.
    760  * @param forceCopy If TRUE, then the output string will always be written to
    761  *                  dest, with U_BUFFER_OVERFLOW_ERROR and
    762  *                  U_STRING_NOT_TERMINATED_WARNING set if appropriate.
    763  *                  If FALSE, then the dest buffer may or may not contain a
    764  *                  copy of the string. dest may or may not be modified.
    765  *                  If a copy needs to be written, then the UErrorCode parameter
    766  *                  indicates overflow etc. as usual.
    767  * @param status Pointer to a standard ICU error code. Its input value must
    768  *               pass the U_SUCCESS() test, or else the function returns
    769  *               immediately. Check for U_FAILURE() on output or use with
    770  *               function chaining. (See User Guide for details.)
    771  * @return The pointer to the UTF-8 string. It may be dest, or at some offset
    772  *         from dest (only if !forceCopy), or in unrelated memory.
    773  *         Always NUL-terminated unless the string was written to dest and
    774  *         length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set).
    775  *
    776  * @see ures_getStringByKey
    777  * @see u_strToUTF8
    778  * @stable ICU 3.6
    779  */
    780 U_STABLE const char * U_EXPORT2
    781 ures_getUTF8StringByKey(const UResourceBundle *resB,
    782                         const char *key,
    783                         char *dest, int32_t *pLength,
    784                         UBool forceCopy,
    785                         UErrorCode *status);
    786 
    787 #if U_SHOW_CPLUSPLUS_API
    788 #include "unicode/unistr.h"
    789 
    790 U_NAMESPACE_BEGIN
    791 /**
    792  * returns a string from a string resource type
    793  *
    794  * @param resB    a resource
    795  * @param status: fills in the outgoing error code
    796  *                could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
    797  *                could be a non-failing error
    798  *                e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
    799  * @return        a UnicodeString object. If there is an error, string is bogus
    800  * @stable ICU 2.0
    801  */
    802 inline UnicodeString
    803 ures_getUnicodeString(const UResourceBundle *resB,
    804                       UErrorCode* status)
    805 {
    806     int32_t len = 0;
    807     const UChar *r = ures_getString(resB, &len, status);
    808     return UnicodeString(TRUE, r, len);
    809 }
    810 
    811 /**
    812  * Returns the next string in a resource or NULL if there are no more resources
    813  * to iterate over.
    814  *
    815  * @param resB              a resource
    816  * @param key               fill in for key associated with this string
    817  * @param status            fills in the outgoing error code
    818  * @return an UnicodeString object.
    819  * @stable ICU 2.0
    820  */
    821 inline UnicodeString
    822 ures_getNextUnicodeString(UResourceBundle *resB,
    823                           const char ** key,
    824                           UErrorCode* status)
    825 {
    826     int32_t len = 0;
    827     const UChar* r = ures_getNextString(resB, &len, key, status);
    828     return UnicodeString(TRUE, r, len);
    829 }
    830 
    831 /**
    832  * Returns the string in a given resource at the specified index.
    833  *
    834  * @param resB              a resource
    835  * @param indexS            an index to the wanted string.
    836  * @param status            fills in the outgoing error code
    837  * @return                  an UnicodeString object. If there is an error, string is bogus
    838  * @stable ICU 2.0
    839  */
    840 inline UnicodeString
    841 ures_getUnicodeStringByIndex(const UResourceBundle *resB,
    842                              int32_t indexS,
    843                              UErrorCode* status)
    844 {
    845     int32_t len = 0;
    846     const UChar* r = ures_getStringByIndex(resB, indexS, &len, status);
    847     return UnicodeString(TRUE, r, len);
    848 }
    849 
    850 /**
    851  * Returns a string in a resource that has a given key. This procedure works only with table
    852  * resources.
    853  *
    854  * @param resB              a resource
    855  * @param key               a key associated with the wanted string
    856  * @param status            fills in the outgoing error code
    857  * @return                  an UnicodeString object. If there is an error, string is bogus
    858  * @stable ICU 2.0
    859  */
    860 inline UnicodeString
    861 ures_getUnicodeStringByKey(const UResourceBundle *resB,
    862                            const char* key,
    863                            UErrorCode* status)
    864 {
    865     int32_t len = 0;
    866     const UChar* r = ures_getStringByKey(resB, key, &len, status);
    867     return UnicodeString(TRUE, r, len);
    868 }
    869 
    870 U_NAMESPACE_END
    871 
    872 #endif
    873 
    874 /**
    875  * Create a string enumerator, owned by the caller, of all locales located within
    876  * the specified resource tree.
    877  * @param packageName name of the tree, such as (NULL) or U_ICUDATA_ALIAS or  or "ICUDATA-coll"
    878  * This call is similar to uloc_getAvailable().
    879  * @param status error code
    880  * @stable ICU 3.2
    881  */
    882 U_STABLE UEnumeration* U_EXPORT2
    883 ures_openAvailableLocales(const char *packageName, UErrorCode *status);
    884 
    885 
    886 #endif /*_URES*/
    887 /*eof*/
    888