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