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