xref: /aosp_15_r20/external/icu/libicu/cts_headers/uenumimp.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
5*0e209d39SAndroid Build Coastguard Worker *
6*0e209d39SAndroid Build Coastguard Worker *   Copyright (C) 2002-2006, International Business Machines
7*0e209d39SAndroid Build Coastguard Worker *   Corporation and others.  All Rights Reserved.
8*0e209d39SAndroid Build Coastguard Worker *
9*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
10*0e209d39SAndroid Build Coastguard Worker *   file name:  uenumimp.h
11*0e209d39SAndroid Build Coastguard Worker *   encoding:   UTF-8
12*0e209d39SAndroid Build Coastguard Worker *   tab size:   8 (not used)
13*0e209d39SAndroid Build Coastguard Worker *   indentation:2
14*0e209d39SAndroid Build Coastguard Worker *
15*0e209d39SAndroid Build Coastguard Worker *   created on: 2002jul08
16*0e209d39SAndroid Build Coastguard Worker *   created by: Vladimir Weinstein
17*0e209d39SAndroid Build Coastguard Worker */
18*0e209d39SAndroid Build Coastguard Worker 
19*0e209d39SAndroid Build Coastguard Worker #ifndef __UENUMIMP_H
20*0e209d39SAndroid Build Coastguard Worker #define __UENUMIMP_H
21*0e209d39SAndroid Build Coastguard Worker 
22*0e209d39SAndroid Build Coastguard Worker #include "unicode/uenum.h"
23*0e209d39SAndroid Build Coastguard Worker 
24*0e209d39SAndroid Build Coastguard Worker U_CDECL_BEGIN
25*0e209d39SAndroid Build Coastguard Worker 
26*0e209d39SAndroid Build Coastguard Worker /**
27*0e209d39SAndroid Build Coastguard Worker  * following are the type declarations for
28*0e209d39SAndroid Build Coastguard Worker  * implementations of APIs. If any of these
29*0e209d39SAndroid Build Coastguard Worker  * functions are NULL, U_UNSUPPORTED_ERROR
30*0e209d39SAndroid Build Coastguard Worker  * is returned. If close is NULL, the enumeration
31*0e209d39SAndroid Build Coastguard Worker  * object is going to be released.
32*0e209d39SAndroid Build Coastguard Worker  * Initial error checking is done in the body
33*0e209d39SAndroid Build Coastguard Worker  * of API function, so the implementations
34*0e209d39SAndroid Build Coastguard Worker  * need not to check the initial error condition.
35*0e209d39SAndroid Build Coastguard Worker  */
36*0e209d39SAndroid Build Coastguard Worker 
37*0e209d39SAndroid Build Coastguard Worker /**
38*0e209d39SAndroid Build Coastguard Worker  * Function type declaration for uenum_close().
39*0e209d39SAndroid Build Coastguard Worker  *
40*0e209d39SAndroid Build Coastguard Worker  * This function should cleanup the enumerator object
41*0e209d39SAndroid Build Coastguard Worker  *
42*0e209d39SAndroid Build Coastguard Worker  * @param en enumeration to be closed
43*0e209d39SAndroid Build Coastguard Worker  */
44*0e209d39SAndroid Build Coastguard Worker typedef void U_CALLCONV
45*0e209d39SAndroid Build Coastguard Worker UEnumClose(UEnumeration *en);
46*0e209d39SAndroid Build Coastguard Worker 
47*0e209d39SAndroid Build Coastguard Worker /**
48*0e209d39SAndroid Build Coastguard Worker  * Function type declaration for uenum_count().
49*0e209d39SAndroid Build Coastguard Worker  *
50*0e209d39SAndroid Build Coastguard Worker  * This function should count the number of elements
51*0e209d39SAndroid Build Coastguard Worker  * in this enumeration
52*0e209d39SAndroid Build Coastguard Worker  *
53*0e209d39SAndroid Build Coastguard Worker  * @param en enumeration to be counted
54*0e209d39SAndroid Build Coastguard Worker  * @param status pointer to UErrorCode variable
55*0e209d39SAndroid Build Coastguard Worker  * @return number of elements in enumeration
56*0e209d39SAndroid Build Coastguard Worker  */
57*0e209d39SAndroid Build Coastguard Worker typedef int32_t U_CALLCONV
58*0e209d39SAndroid Build Coastguard Worker UEnumCount(UEnumeration *en, UErrorCode *status);
59*0e209d39SAndroid Build Coastguard Worker 
60*0e209d39SAndroid Build Coastguard Worker /**
61*0e209d39SAndroid Build Coastguard Worker  * Function type declaration for uenum_unext().
62*0e209d39SAndroid Build Coastguard Worker  *
63*0e209d39SAndroid Build Coastguard Worker  * This function returns the next element as a UChar *,
64*0e209d39SAndroid Build Coastguard Worker  * or NULL after all elements haven been enumerated.
65*0e209d39SAndroid Build Coastguard Worker  *
66*0e209d39SAndroid Build Coastguard Worker  * @param en enumeration
67*0e209d39SAndroid Build Coastguard Worker  * @param resultLength pointer to result length
68*0e209d39SAndroid Build Coastguard Worker  * @param status pointer to UErrorCode variable
69*0e209d39SAndroid Build Coastguard Worker  * @return next element as UChar *,
70*0e209d39SAndroid Build Coastguard Worker  *         or NULL after all elements haven been enumerated
71*0e209d39SAndroid Build Coastguard Worker  */
72*0e209d39SAndroid Build Coastguard Worker typedef const UChar* U_CALLCONV
73*0e209d39SAndroid Build Coastguard Worker UEnumUNext(UEnumeration* en,
74*0e209d39SAndroid Build Coastguard Worker             int32_t* resultLength,
75*0e209d39SAndroid Build Coastguard Worker             UErrorCode* status);
76*0e209d39SAndroid Build Coastguard Worker 
77*0e209d39SAndroid Build Coastguard Worker /**
78*0e209d39SAndroid Build Coastguard Worker  * Function type declaration for uenum_next().
79*0e209d39SAndroid Build Coastguard Worker  *
80*0e209d39SAndroid Build Coastguard Worker  * This function returns the next element as a char *,
81*0e209d39SAndroid Build Coastguard Worker  * or NULL after all elements haven been enumerated.
82*0e209d39SAndroid Build Coastguard Worker  *
83*0e209d39SAndroid Build Coastguard Worker  * @param en enumeration
84*0e209d39SAndroid Build Coastguard Worker  * @param resultLength pointer to result length
85*0e209d39SAndroid Build Coastguard Worker  * @param status pointer to UErrorCode variable
86*0e209d39SAndroid Build Coastguard Worker  * @return next element as char *,
87*0e209d39SAndroid Build Coastguard Worker  *         or NULL after all elements haven been enumerated
88*0e209d39SAndroid Build Coastguard Worker  */
89*0e209d39SAndroid Build Coastguard Worker typedef const char* U_CALLCONV
90*0e209d39SAndroid Build Coastguard Worker UEnumNext(UEnumeration* en,
91*0e209d39SAndroid Build Coastguard Worker            int32_t* resultLength,
92*0e209d39SAndroid Build Coastguard Worker            UErrorCode* status);
93*0e209d39SAndroid Build Coastguard Worker 
94*0e209d39SAndroid Build Coastguard Worker /**
95*0e209d39SAndroid Build Coastguard Worker  * Function type declaration for uenum_reset().
96*0e209d39SAndroid Build Coastguard Worker  *
97*0e209d39SAndroid Build Coastguard Worker  * This function should reset the enumeration
98*0e209d39SAndroid Build Coastguard Worker  * object
99*0e209d39SAndroid Build Coastguard Worker  *
100*0e209d39SAndroid Build Coastguard Worker  * @param en enumeration
101*0e209d39SAndroid Build Coastguard Worker  * @param status pointer to UErrorCode variable
102*0e209d39SAndroid Build Coastguard Worker  */
103*0e209d39SAndroid Build Coastguard Worker typedef void U_CALLCONV
104*0e209d39SAndroid Build Coastguard Worker UEnumReset(UEnumeration* en,
105*0e209d39SAndroid Build Coastguard Worker             UErrorCode* status);
106*0e209d39SAndroid Build Coastguard Worker 
107*0e209d39SAndroid Build Coastguard Worker 
108*0e209d39SAndroid Build Coastguard Worker struct UEnumeration {
109*0e209d39SAndroid Build Coastguard Worker     /* baseContext. For the base class only. Don't touch! */
110*0e209d39SAndroid Build Coastguard Worker     void *baseContext;
111*0e209d39SAndroid Build Coastguard Worker 
112*0e209d39SAndroid Build Coastguard Worker     /* context. Use it for what you need */
113*0e209d39SAndroid Build Coastguard Worker     void *context;
114*0e209d39SAndroid Build Coastguard Worker 
115*0e209d39SAndroid Build Coastguard Worker     /**
116*0e209d39SAndroid Build Coastguard Worker      * these are functions that will
117*0e209d39SAndroid Build Coastguard Worker      * be used for APIs
118*0e209d39SAndroid Build Coastguard Worker      */
119*0e209d39SAndroid Build Coastguard Worker     /* called from uenum_close */
120*0e209d39SAndroid Build Coastguard Worker     UEnumClose *close;
121*0e209d39SAndroid Build Coastguard Worker     /* called from uenum_count */
122*0e209d39SAndroid Build Coastguard Worker     UEnumCount *count;
123*0e209d39SAndroid Build Coastguard Worker     /* called from uenum_unext */
124*0e209d39SAndroid Build Coastguard Worker     UEnumUNext *uNext;
125*0e209d39SAndroid Build Coastguard Worker     /* called from uenum_next */
126*0e209d39SAndroid Build Coastguard Worker     UEnumNext  *next;
127*0e209d39SAndroid Build Coastguard Worker     /* called from uenum_reset */
128*0e209d39SAndroid Build Coastguard Worker     UEnumReset *reset;
129*0e209d39SAndroid Build Coastguard Worker };
130*0e209d39SAndroid Build Coastguard Worker 
131*0e209d39SAndroid Build Coastguard Worker U_CDECL_END
132*0e209d39SAndroid Build Coastguard Worker 
133*0e209d39SAndroid Build Coastguard Worker /* This is the default implementation for uenum_unext().
134*0e209d39SAndroid Build Coastguard Worker  * It automatically converts the char * string to UChar *.
135*0e209d39SAndroid Build Coastguard Worker  * Don't call this directly.  This is called internally by uenum_unext
136*0e209d39SAndroid Build Coastguard Worker  * when a UEnumeration is defined with 'uNext' pointing to this
137*0e209d39SAndroid Build Coastguard Worker  * function.
138*0e209d39SAndroid Build Coastguard Worker  */
139*0e209d39SAndroid Build Coastguard Worker U_CAPI const UChar* U_EXPORT2
140*0e209d39SAndroid Build Coastguard Worker uenum_unextDefault(UEnumeration* en,
141*0e209d39SAndroid Build Coastguard Worker             int32_t* resultLength,
142*0e209d39SAndroid Build Coastguard Worker             UErrorCode* status);
143*0e209d39SAndroid Build Coastguard Worker 
144*0e209d39SAndroid Build Coastguard Worker /* This is the default implementation for uenum_next().
145*0e209d39SAndroid Build Coastguard Worker  * It automatically converts the UChar * string to char *.
146*0e209d39SAndroid Build Coastguard Worker  * Don't call this directly.  This is called internally by uenum_next
147*0e209d39SAndroid Build Coastguard Worker  * when a UEnumeration is defined with 'next' pointing to this
148*0e209d39SAndroid Build Coastguard Worker  * function.
149*0e209d39SAndroid Build Coastguard Worker  */
150*0e209d39SAndroid Build Coastguard Worker U_CAPI const char* U_EXPORT2
151*0e209d39SAndroid Build Coastguard Worker uenum_nextDefault(UEnumeration* en,
152*0e209d39SAndroid Build Coastguard Worker             int32_t* resultLength,
153*0e209d39SAndroid Build Coastguard Worker             UErrorCode* status);
154*0e209d39SAndroid Build Coastguard Worker 
155*0e209d39SAndroid Build Coastguard Worker #endif
156