1 /* 2 ******************************************************************************* 3 * 4 * Copyright (C) 2002-2004, 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 22 /** 23 * An enumeration object. 24 * For usage in C programs. 25 * @stable ICU 2.2 26 */ 27 struct UEnumeration; 28 /** structure representing an enumeration object instance @stable ICU 2.2 */ 29 typedef struct UEnumeration UEnumeration; 30 31 /** 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 36 * @stable ICU 2.2 37 */ 38 U_STABLE void U_EXPORT2 39 uenum_close(UEnumeration* en); 40 41 /** 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 48 * when necessary. 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 53 * @stable ICU 2.2 54 */ 55 U_STABLE int32_t U_EXPORT2 56 uenum_count(UEnumeration* en, UErrorCode* status); 57 58 /** 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. 77 * @stable ICU 2.2 78 */ 79 U_STABLE const UChar* U_EXPORT2 80 uenum_unext(UEnumeration* en, 81 int32_t* resultLength, 82 UErrorCode* status); 83 84 /** 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 93 * (but non-NULL). 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. 110 * @stable ICU 2.2 111 */ 112 U_STABLE const char* U_EXPORT2 113 uenum_next(UEnumeration* en, 114 int32_t* resultLength, 115 UErrorCode* status); 116 117 /** 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. 124 * @stable ICU 2.2 125 */ 126 U_STABLE void U_EXPORT2 127 uenum_reset(UEnumeration* en, UErrorCode* status); 128 129 #endif 130