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