2 *******************************************************************************
4 * Copyright (C) 2002-2004, International Business Machines
5 * Corporation and others. All Rights Reserved.
7 *******************************************************************************
10 * tab size: 8 (not used)
13 * created on: 2002jul08
14 * created by: Vladimir Weinstein
20 #include "unicode/utypes.h"
23 * An enumeration object.
24 * For usage in C programs.
28 /** structure representing an enumeration object instance @stable ICU 2.2 */
29 typedef struct UEnumeration UEnumeration
;
32 * Disposes of resources in use by the iterator. If en is NULL,
33 * does nothing. After this call, any char* or UChar* pointer
34 * returned by uenum_unext() or uenum_next() is invalid.
35 * @param en UEnumeration structure pointer
38 U_STABLE
void U_EXPORT2
39 uenum_close(UEnumeration
* en
);
42 * Returns the number of elements that the iterator traverses. If
43 * the iterator is out-of-sync with its service, status is set to
44 * U_ENUM_OUT_OF_SYNC_ERROR.
45 * This is a convenience function. It can end up being very
46 * expensive as all the items might have to be pre-fetched (depending
47 * on the type of data being traversed). Use with caution and only
49 * @param en UEnumeration structure pointer
50 * @param status error code, can be U_ENUM_OUT_OF_SYNC_ERROR if the
51 * iterator is out of sync.
52 * @return number of elements in the iterator
55 U_STABLE
int32_t U_EXPORT2
56 uenum_count(UEnumeration
* en
, UErrorCode
* status
);
59 * Returns the next element in the iterator's list. If there are
60 * no more elements, returns NULL. If the iterator is out-of-sync
61 * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and
62 * NULL is returned. If the native service string is a char* string,
63 * it is converted to UChar* with the invariant converter.
64 * The result is terminated by (UChar)0.
65 * @param en the iterator object
66 * @param resultLength pointer to receive the length of the result
67 * (not including the terminating \\0).
68 * If the pointer is NULL it is ignored.
69 * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
70 * the iterator is out of sync with its service.
71 * @return a pointer to the string. The string will be
72 * zero-terminated. The return pointer is owned by this iterator
73 * and must not be deleted by the caller. The pointer is valid
74 * until the next call to any uenum_... method, including
75 * uenum_next() or uenum_unext(). When all strings have been
76 * traversed, returns NULL.
79 U_STABLE
const UChar
* U_EXPORT2
80 uenum_unext(UEnumeration
* en
,
81 int32_t* resultLength
,
85 * Returns the next element in the iterator's list. If there are
86 * no more elements, returns NULL. If the iterator is out-of-sync
87 * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and
88 * NULL is returned. If the native service string is a UChar*
89 * string, it is converted to char* with the invariant converter.
90 * The result is terminated by (char)0. If the conversion fails
91 * (because a character cannot be converted) then status is set to
92 * U_INVARIANT_CONVERSION_ERROR and the return value is undefined
94 * @param en the iterator object
95 * @param resultLength pointer to receive the length of the result
96 * (not including the terminating \\0).
97 * If the pointer is NULL it is ignored.
98 * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
99 * the iterator is out of sync with its service. Set to
100 * U_INVARIANT_CONVERSION_ERROR if the underlying native string is
101 * UChar* and conversion to char* with the invariant converter
102 * fails. This error pertains only to current string, so iteration
103 * might be able to continue successfully.
104 * @return a pointer to the string. The string will be
105 * zero-terminated. The return pointer is owned by this iterator
106 * and must not be deleted by the caller. The pointer is valid
107 * until the next call to any uenum_... method, including
108 * uenum_next() or uenum_unext(). When all strings have been
109 * traversed, returns NULL.
112 U_STABLE
const char* U_EXPORT2
113 uenum_next(UEnumeration
* en
,
114 int32_t* resultLength
,
118 * Resets the iterator to the current list of service IDs. This
119 * re-establishes sync with the service and rewinds the iterator
120 * to start at the first element.
121 * @param en the iterator object
122 * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
123 * the iterator is out of sync with its service.
126 U_STABLE
void U_EXPORT2
127 uenum_reset(UEnumeration
* en
, UErrorCode
* status
);