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