]> git.saurik.com Git - apple/icu.git/blame - icuSources/common/unicode/uenum.h
ICU-8.11.4.tar.gz
[apple/icu.git] / icuSources / common / unicode / uenum.h
CommitLineData
b75a7d8f
A
1/*
2*******************************************************************************
3*
73c04bcf 4* Copyright (C) 2002-2005, International Business Machines
b75a7d8f
A
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
73c04bcf
A
22/**
23 * \file
24 * \brief C API: String Enumeration
25 */
26
b75a7d8f
A
27/**
28 * An enumeration object.
29 * For usage in C programs.
374ca955 30 * @stable ICU 2.2
b75a7d8f
A
31 */
32struct UEnumeration;
374ca955 33/** structure representing an enumeration object instance @stable ICU 2.2 */
b75a7d8f
A
34typedef struct UEnumeration UEnumeration;
35
36/**
37 * Disposes of resources in use by the iterator. If en is NULL,
38 * does nothing. After this call, any char* or UChar* pointer
39 * returned by uenum_unext() or uenum_next() is invalid.
40 * @param en UEnumeration structure pointer
374ca955 41 * @stable ICU 2.2
b75a7d8f 42 */
374ca955 43U_STABLE void U_EXPORT2
b75a7d8f
A
44uenum_close(UEnumeration* en);
45
46/**
47 * Returns the number of elements that the iterator traverses. If
48 * the iterator is out-of-sync with its service, status is set to
49 * U_ENUM_OUT_OF_SYNC_ERROR.
50 * This is a convenience function. It can end up being very
51 * expensive as all the items might have to be pre-fetched (depending
52 * on the type of data being traversed). Use with caution and only
53 * when necessary.
54 * @param en UEnumeration structure pointer
55 * @param status error code, can be U_ENUM_OUT_OF_SYNC_ERROR if the
56 * iterator is out of sync.
57 * @return number of elements in the iterator
374ca955 58 * @stable ICU 2.2
b75a7d8f 59 */
374ca955 60U_STABLE int32_t U_EXPORT2
b75a7d8f
A
61uenum_count(UEnumeration* en, UErrorCode* status);
62
63/**
64 * Returns the next element in the iterator's list. If there are
65 * no more elements, returns NULL. If the iterator is out-of-sync
66 * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and
67 * NULL is returned. If the native service string is a char* string,
68 * it is converted to UChar* with the invariant converter.
69 * The result is terminated by (UChar)0.
70 * @param en the iterator object
71 * @param resultLength pointer to receive the length of the result
374ca955 72 * (not including the terminating \\0).
b75a7d8f
A
73 * If the pointer is NULL it is ignored.
74 * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
75 * the iterator is out of sync with its service.
76 * @return a pointer to the string. The string will be
77 * zero-terminated. The return pointer is owned by this iterator
78 * and must not be deleted by the caller. The pointer is valid
79 * until the next call to any uenum_... method, including
80 * uenum_next() or uenum_unext(). When all strings have been
81 * traversed, returns NULL.
374ca955 82 * @stable ICU 2.2
b75a7d8f 83 */
374ca955 84U_STABLE const UChar* U_EXPORT2
b75a7d8f
A
85uenum_unext(UEnumeration* en,
86 int32_t* resultLength,
87 UErrorCode* status);
88
89/**
90 * Returns the next element in the iterator's list. If there are
91 * no more elements, returns NULL. If the iterator is out-of-sync
92 * with its service, status is set to U_ENUM_OUT_OF_SYNC_ERROR and
93 * NULL is returned. If the native service string is a UChar*
94 * string, it is converted to char* with the invariant converter.
95 * The result is terminated by (char)0. If the conversion fails
96 * (because a character cannot be converted) then status is set to
97 * U_INVARIANT_CONVERSION_ERROR and the return value is undefined
98 * (but non-NULL).
99 * @param en the iterator object
100 * @param resultLength pointer to receive the length of the result
374ca955 101 * (not including the terminating \\0).
b75a7d8f
A
102 * If the pointer is NULL it is ignored.
103 * @param status the error code, set to U_ENUM_OUT_OF_SYNC_ERROR if
104 * the iterator is out of sync with its service. Set to
105 * U_INVARIANT_CONVERSION_ERROR if the underlying native string is
106 * UChar* and conversion to char* with the invariant converter
107 * fails. This error pertains only to current string, so iteration
108 * might be able to continue successfully.
109 * @return a pointer to the string. The string will be
110 * zero-terminated. The return pointer is owned by this iterator
111 * and must not be deleted by the caller. The pointer is valid
112 * until the next call to any uenum_... method, including
113 * uenum_next() or uenum_unext(). When all strings have been
114 * traversed, returns NULL.
374ca955 115 * @stable ICU 2.2
b75a7d8f 116 */
374ca955 117U_STABLE const char* U_EXPORT2
b75a7d8f
A
118uenum_next(UEnumeration* en,
119 int32_t* resultLength,
120 UErrorCode* status);
121
122/**
123 * Resets the iterator to the current list of service IDs. This
124 * re-establishes sync with the service and rewinds the iterator
125 * to start at the first element.
126 * @param en the iterator object
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.
374ca955 129 * @stable ICU 2.2
b75a7d8f 130 */
374ca955 131U_STABLE void U_EXPORT2
b75a7d8f
A
132uenum_reset(UEnumeration* en, UErrorCode* status);
133
134#endif