/* ******************************************************************************* * * Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * file name: uenumimp.h * encoding: US-ASCII * tab size: 8 (not used) * indentation:2 * * created on: 2002jul08 * created by: Vladimir Weinstein */ #ifndef __UENUMIMP_H #define __UENUMIMP_H #include "unicode/uenum.h" U_CDECL_BEGIN /** * following are the type declarations for * implementations of APIs. If any of these * functions are NULL, U_UNSUPPORTED_ERROR * is returned. If close is NULL, the enumeration * object is going to be released. * Initial error checking is done in the body * of API function, so the implementations * need not to check the initial error condition. */ /** * Function type declaration for uenum_close(). * * This function should cleanup the enumerator object * * @param en enumeration to be closed */ typedef void U_CALLCONV UEnumClose(UEnumeration *en); /** * Function type declaration for uenum_count(). * * This function should count the number of elements * in this enumeration * * @param en enumeration to be counted * @param status pointer to UErrorCode variable * @return number of elements in enumeration */ typedef int32_t U_CALLCONV UEnumCount(UEnumeration *en, UErrorCode *status); /** * Function type declaration for uenum_unext(). * * This function returns the next element as a UChar *, * or NULL after all elements haven been enumerated. * * @param en enumeration * @param resultLength pointer to result length * @param status pointer to UErrorCode variable * @return next element as UChar *, * or NULL after all elements haven been enumerated */ typedef const UChar* U_CALLCONV UEnumUNext(UEnumeration* en, int32_t* resultLength, UErrorCode* status); /** * Function type declaration for uenum_next(). * * This function returns the next element as a char *, * or NULL after all elements haven been enumerated. * * @param en enumeration * @param resultLength pointer to result length * @param status pointer to UErrorCode variable * @return next element as char *, * or NULL after all elements haven been enumerated */ typedef const char* U_CALLCONV UEnumNext(UEnumeration* en, int32_t* resultLength, UErrorCode* status); /** * Function type declaration for uenum_reset(). * * This function should reset the enumeration * object * * @param en enumeration * @param status pointer to UErrorCode variable */ typedef void U_CALLCONV UEnumReset(UEnumeration* en, UErrorCode* status); struct UEnumeration { /* baseContext. For the base class only. Don't touch! */ void *baseContext; /* context. Use it for what you need */ void *context; /** * these are functions that will * be used for APIs */ /* called from uenum_close */ UEnumClose *close; /* called from uenum_count */ UEnumCount *count; /* called from uenum_unext */ UEnumUNext *uNext; /* called from uenum_next */ UEnumNext *next; /* called from uenum_reset */ UEnumReset *reset; }; U_CDECL_END /* This is the default implementation for uenum_unext(). * It automatically converts the char * string to UChar *. * Don't call this directly. This is called internally by uenum_unext * when a UEnumeration is defined with 'uNext' pointing to this * function. */ U_CAPI const UChar* U_EXPORT2 uenum_unextDefault(UEnumeration* en, int32_t* resultLength, UErrorCode* status); /* This is the default implementation for uenum_next(). * It automatically converts the UChar * string to char *. * Don't call this directly. This is called internally by uenum_next * when a UEnumeration is defined with 'next' pointing to this * function. */ U_CAPI const char* U_EXPORT2 uenum_nextDefault(UEnumeration* en, int32_t* resultLength, UErrorCode* status); #endif