1 | /* |
2 | ******************************************************************************* |
3 | * |
4 | * Copyright (C) 2002-2013, International Business Machines |
5 | * Corporation and others. All Rights Reserved. |
6 | * |
7 | ******************************************************************************* |
8 | * file name: uenum.h |
9 | * encoding: US-ASCII |
10 | * tab size: 8 (not used) |
11 | * indentation:2 |
12 | * |
13 | * created on: 2002jul08 |
14 | * created by: Vladimir Weinstein |
15 | */ |
16 | |
17 | #ifndef __UENUM_H |
18 | #define __UENUM_H |
19 | |
20 | #include "unicode/utypes.h" |
21 | #include "unicode/localpointer.h" |
22 | |
23 | #if U_SHOW_CPLUSPLUS_API |
24 | #include "unicode/strenum.h" |
25 | #endif |
26 | |
27 | /** |
28 | * \file |
29 | * \brief C API: String Enumeration |
30 | */ |
31 | |
32 | /** |
33 | * An enumeration object. |
34 | * For usage in C programs. |
35 | * @stable ICU 2.2 |
36 | */ |
37 | struct UEnumeration; |
38 | /** structure representing an enumeration object instance @stable ICU 2.2 */ |
39 | typedef struct UEnumeration UEnumeration; |
40 | |
41 | /** |
42 | * Disposes of resources in use by the iterator. If en is NULL, |
43 | * does nothing. After this call, any char* or UChar* pointer |
44 | * returned by uenum_unext() or uenum_next() is invalid. |
45 | * @param en UEnumeration structure pointer |
46 | * @stable ICU 2.2 |
47 | */ |
48 | U_STABLE void U_EXPORT2 |
49 | uenum_close(UEnumeration* en); |
50 | |
51 | #if U_SHOW_CPLUSPLUS_API |
52 | |
53 | U_NAMESPACE_BEGIN |
54 | |
55 | /** |
56 | * \class LocalUEnumerationPointer |
57 | * "Smart pointer" class, closes a UEnumeration via uenum_close(). |
58 | * For most methods see the LocalPointerBase base class. |
59 | * |
60 | * @see LocalPointerBase |
61 | * @see LocalPointer |
62 | * @stable ICU 4.4 |
63 | */ |
64 | U_DEFINE_LOCAL_OPEN_POINTER(LocalUEnumerationPointer, UEnumeration, uenum_close); |
65 | |
66 | U_NAMESPACE_END |
67 | |
68 | #endif |
69 | |
70 | /** |
71 | * Returns the number of elements that the iterator traverses. If |
72 | * the iterator is out-of-sync with its service, status is set to |
73 | * U_ENUM_OUT_OF_SYNC_ERROR. |
74 | * This is a convenience function. It can end up being very |
75 | * expensive as all the items might have to be pre-fetched (depending |
76 | * on the type of data being traversed). Use with caution and only |
77 | * when necessary. |
78 | * @param en UEnumeration structure pointer |
79 | * @param status error code, can be U_ENUM_OUT_OF_SYNC_ERROR if the |
80 | * iterator is out of sync. |
81 | * @return number of elements in the iterator |
82 | * @stable ICU 2.2 |
83 | */ |
84 | U_STABLE int32_t U_EXPORT2 |
85 | uenum_count(UEnumeration* en, UErrorCode* status); |
86 | |
87 | /** |
88 | * Returns the next element in the iterator's list. If there are |
89 | * no more elements, returns NULL. If the iterator is out-of-sync |
90 | * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and |
91 | * NULL is returned. If the native service string is a char* string, |
92 | * it is converted to UChar* with the invariant converter. |
93 | * The result is terminated by (UChar)0. |
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. |
100 | * @return a pointer to the string. The string will be |
101 | * zero-terminated. The return pointer is owned by this iterator |
102 | * and must not be deleted by the caller. The pointer is valid |
103 | * until the next call to any uenum_... method, including |
104 | * uenum_next() or uenum_unext(). When all strings have been |
105 | * traversed, returns NULL. |
106 | * @stable ICU 2.2 |
107 | */ |
108 | U_STABLE const UChar* U_EXPORT2 |
109 | uenum_unext(UEnumeration* en, |
110 | int32_t* resultLength, |
111 | UErrorCode* status); |
112 | |
113 | /** |
114 | * Returns the next element in the iterator's list. If there are |
115 | * no more elements, returns NULL. If the iterator is out-of-sync |
116 | * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and |
117 | * NULL is returned. If the native service string is a UChar* |
118 | * string, it is converted to char* with the invariant converter. |
119 | * The result is terminated by (char)0. If the conversion fails |
120 | * (because a character cannot be converted) then status is set to |
121 | * U_INVARIANT_CONVERSION_ERROR and the return value is undefined |
122 | * (but non-NULL). |
123 | * @param en the iterator object |
124 | * @param resultLength pointer to receive the length of the result |
125 | * (not including the terminating \\0). |
126 | * If the pointer is NULL it is ignored. |
127 | * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if |
128 | * the iterator is out of sync with its service. Set to |
129 | * U_INVARIANT_CONVERSION_ERROR if the underlying native string is |
130 | * UChar* and conversion to char* with the invariant converter |
131 | * fails. This error pertains only to current string, so iteration |
132 | * might be able to continue successfully. |
133 | * @return a pointer to the string. The string will be |
134 | * zero-terminated. The return pointer is owned by this iterator |
135 | * and must not be deleted by the caller. The pointer is valid |
136 | * until the next call to any uenum_... method, including |
137 | * uenum_next() or uenum_unext(). When all strings have been |
138 | * traversed, returns NULL. |
139 | * @stable ICU 2.2 |
140 | */ |
141 | U_STABLE const char* U_EXPORT2 |
142 | uenum_next(UEnumeration* en, |
143 | int32_t* resultLength, |
144 | UErrorCode* status); |
145 | |
146 | /** |
147 | * Resets the iterator to the current list of service IDs. This |
148 | * re-establishes sync with the service and rewinds the iterator |
149 | * to start at the first element. |
150 | * @param en the iterator object |
151 | * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if |
152 | * the iterator is out of sync with its service. |
153 | * @stable ICU 2.2 |
154 | */ |
155 | U_STABLE void U_EXPORT2 |
156 | uenum_reset(UEnumeration* en, UErrorCode* status); |
157 | |
158 | #if U_SHOW_CPLUSPLUS_API |
159 | |
160 | /** |
161 | * Given a StringEnumeration, wrap it in a UEnumeration. The |
162 | * StringEnumeration is adopted; after this call, the caller must not |
163 | * delete it (regardless of error status). |
164 | * @param adopted the C++ StringEnumeration to be wrapped in a UEnumeration. |
165 | * @param ec the error code. |
166 | * @return a UEnumeration wrapping the adopted StringEnumeration. |
167 | * @stable ICU 4.2 |
168 | */ |
169 | U_STABLE UEnumeration* U_EXPORT2 |
170 | uenum_openFromStringEnumeration(icu::StringEnumeration* adopted, UErrorCode* ec); |
171 | |
172 | #endif |
173 | |
174 | /** |
175 | * Given an array of const UChar* strings, return a UEnumeration. String pointers from 0..count-1 must not be null. |
176 | * Do not free or modify either the string array or the characters it points to until this object has been destroyed with uenum_close. |
177 | * \snippet test/cintltst/uenumtst.c uenum_openUCharStringsEnumeration |
178 | * @param strings array of const UChar* strings (each null terminated). All storage is owned by the caller. |
179 | * @param count length of the array |
180 | * @param ec error code |
181 | * @return the new UEnumeration object. Caller is responsible for calling uenum_close to free memory. |
182 | * @see uenum_close |
183 | * @stable ICU 50 |
184 | */ |
185 | U_STABLE UEnumeration* U_EXPORT2 |
186 | uenum_openUCharStringsEnumeration(const UChar* const strings[], int32_t count, |
187 | UErrorCode* ec); |
188 | |
189 | /* Note: next function is not hidden as draft, as it is used internally (it was formerly an internal function). */ |
190 | |
191 | /** |
192 | * Given an array of const char* strings (invariant chars only), return a UEnumeration. String pointers from 0..count-1 must not be null. |
193 | * Do not free or modify either the string array or the characters it points to until this object has been destroyed with uenum_close. |
194 | * \snippet test/cintltst/uenumtst.c uenum_openCharStringsEnumeration |
195 | * @param strings array of char* strings (each null terminated). All storage is owned by the caller. |
196 | * @param count length of the array |
197 | * @param ec error code |
198 | * @return the new UEnumeration object. Caller is responsible for calling uenum_close to free memory |
199 | * @see uenum_close |
200 | * @stable ICU 50 |
201 | */ |
202 | U_STABLE UEnumeration* U_EXPORT2 |
203 | uenum_openCharStringsEnumeration(const char* const strings[], int32_t count, |
204 | UErrorCode* ec); |
205 | |
206 | #endif |
207 | |