d884635597
X-SVN-Rev: 9561
119 lines
2.8 KiB
C
119 lines
2.8 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"
|
|
|
|
U_CAPI void U_EXPORT2
|
|
uenum_close(UEnumeration* en)
|
|
{
|
|
if (en) {
|
|
if (en->close != NULL) {
|
|
if (en->baseContext) {
|
|
uprv_free(en->baseContext);
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
|
|
/* Don't call this directly. Only uenum_unext should be calling this. */
|
|
U_CAPI const UChar* U_EXPORT2
|
|
uenum_unextDefault(UEnumeration* en,
|
|
int32_t* resultLength,
|
|
UErrorCode* status)
|
|
{
|
|
if (en->next != NULL) {
|
|
const char *tempCharVal = en->next(en, resultLength, status);
|
|
UChar *tempUCharVal;
|
|
|
|
if (en->baseContext) {
|
|
uprv_free(en->baseContext);
|
|
}
|
|
tempUCharVal = uprv_malloc((*resultLength+1) * sizeof(UChar));
|
|
if (!tempUCharVal) {
|
|
*status = U_MEMORY_ALLOCATION_ERROR;
|
|
}
|
|
u_charsToUChars(tempCharVal, tempUCharVal, *resultLength + 1);
|
|
en->baseContext = tempUCharVal;
|
|
return tempUCharVal;
|
|
} else {
|
|
*status = U_UNSUPPORTED_ERROR;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|