scuffed-code/icu4c/source/common/uenum.c

99 lines
2.1 KiB
C

/*
*******************************************************************************
*
* Copyright (C) 2002, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: uenum.c
* encoding: US-ASCII
* tab size: 8 (not used)
* indentation:2
*
* created on: 2002jul08
* created by: Vladimir Weinstein
*/
#include "uenumimp.h"
#include "cmemory.h"
static const UEnumeration nullEnumeration = {
NULL, /* context */
NULL, /* close */
NULL, /* count */
NULL, /* uNext */
NULL, /* next */
NULL /* reset */
};
U_CAPI void U_EXPORT2
uenum_close(UEnumeration* en)
{
if (en) {
if (en->close != NULL) {
en->close(en);
} else { /* this seems dangerous, but we better kill the object */
uprv_free(en);
}
}
}
U_CAPI int32_t U_EXPORT2
uenum_count(UEnumeration* en, UErrorCode* status)
{
if (!en || U_FAILURE(*status)) {
return -1;
}
if (en->count != NULL) {
return en->count(en, status);
} else {
*status = U_UNSUPPORTED_ERROR;
return -1;
}
}
U_CAPI const UChar* U_EXPORT2
uenum_unext(UEnumeration* en,
int32_t* resultLength,
UErrorCode* status)
{
if (!en || U_FAILURE(*status)) {
return NULL;
}
if (en->uNext != NULL) {
return en->uNext(en, resultLength, status);
} else {
*status = U_UNSUPPORTED_ERROR;
return NULL;
}
}
U_CAPI const char* U_EXPORT2
uenum_next(UEnumeration* en,
int32_t* resultLength,
UErrorCode* status)
{
if (!en || U_FAILURE(*status)) {
return NULL;
}
if (en->next != NULL) {
return en->next(en, resultLength, status);
} else {
*status = U_UNSUPPORTED_ERROR;
return NULL;
}
}
U_CAPI void U_EXPORT2
uenum_reset(UEnumeration* en, UErrorCode* status)
{
if (!en || U_FAILURE(*status)) {
return;
}
if (en->reset != NULL) {
en->reset(en, status);
} else {
*status = U_UNSUPPORTED_ERROR;
}
}