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