mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-07 06:25:30 +00:00
ICU-2347 add uenum_openStringEnumeration (private)
X-SVN-Rev: 10229
This commit is contained in:
parent
ee3fc7728b
commit
678e8ec99a
4 changed files with 138 additions and 1 deletions
|
@ -66,7 +66,7 @@ brkiter.o brkdict.o ubrk.o dbbi.o dbbi_tbl.o \
|
|||
rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \
|
||||
unicode.o convert.o utrie.o uset.o cmemory.o caniter.o \
|
||||
unifilt.o unifunct.o uniset.o usetiter.o util.o uenum.o \
|
||||
icuserv.o iculserv.o icunotif.o
|
||||
icuserv.o iculserv.o icunotif.o ustrenum.cpp
|
||||
|
||||
STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
|
||||
|
||||
|
|
|
@ -499,6 +499,10 @@ SOURCE=.\ustrcase.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ustrenum.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ustrfmt.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
106
icu4c/source/common/ustrenum.cpp
Normal file
106
icu4c/source/common/ustrenum.cpp
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
**********************************************************************
|
||||
* Copyright (c) 2002, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
* Author: Alan Liu
|
||||
* Created: November 11 2002
|
||||
* Since: ICU 2.4
|
||||
**********************************************************************
|
||||
*/
|
||||
#include "unicode/ustring.h"
|
||||
#include "unicode/strenum.h"
|
||||
#include "uenumimp.h"
|
||||
#include "ustrenum.h"
|
||||
#include "cstring.h"
|
||||
#include "cmemory.h"
|
||||
|
||||
#define THIS(en) ((StringEnumeration*)(en->context))
|
||||
|
||||
U_CDECL_BEGIN
|
||||
|
||||
/**
|
||||
* Wrapper API to make StringEnumeration look like UEnumeration.
|
||||
*/
|
||||
static void U_CALLCONV
|
||||
ustrenum_close(UEnumeration* en) {
|
||||
delete THIS(en);
|
||||
uprv_free(en);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper API to make StringEnumeration look like UEnumeration.
|
||||
*/
|
||||
static int32_t U_CALLCONV
|
||||
ustrenum_count(UEnumeration* en, UErrorCode* ec) {
|
||||
return THIS(en)->count(*ec);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper API to make StringEnumeration look like UEnumeration.
|
||||
*/
|
||||
static const UChar* U_CALLCONV
|
||||
ustrenum_unext(UEnumeration* en, int32_t* resultLength, UErrorCode* ec) {
|
||||
const UChar* result = THIS(en)->unext(*ec);
|
||||
*resultLength = (result != NULL) ? u_strlen(result) : 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper API to make StringEnumeration look like UEnumeration.
|
||||
*/
|
||||
static const char* U_CALLCONV
|
||||
ustrenum_next(UEnumeration* en, int32_t* resultLength, UErrorCode* ec) {
|
||||
const char* result = THIS(en)->next(*ec);
|
||||
*resultLength = (result != NULL) ? uprv_strlen(result) : 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper API to make StringEnumeration look like UEnumeration.
|
||||
*/
|
||||
static void U_CALLCONV
|
||||
ustrenum_reset(UEnumeration* en, UErrorCode* ec) {
|
||||
THIS(en)->reset(*ec);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pseudo-vtable for UEnumeration wrapper around StringEnumeration.
|
||||
* The StringEnumeration pointer will be stored in 'context'.
|
||||
*/
|
||||
static const UEnumeration TEMPLATE = {
|
||||
NULL,
|
||||
NULL, // store StringEnumeration pointer here
|
||||
ustrenum_close,
|
||||
ustrenum_count,
|
||||
ustrenum_unext,
|
||||
ustrenum_next,
|
||||
ustrenum_reset
|
||||
};
|
||||
|
||||
U_CDECL_END
|
||||
|
||||
/**
|
||||
* Given a StringEnumeration, wrap it in a UEnumeration. The
|
||||
* StringEnumeration is adopted; after this call, the caller must not
|
||||
* delete it (regardless of error status).
|
||||
*/
|
||||
U_CAPI UEnumeration* U_EXPORT2
|
||||
uenum_openStringEnumeration(StringEnumeration* adopted, UErrorCode* ec) {
|
||||
UEnumeration* result = NULL;
|
||||
if (U_SUCCESS(*ec) && adopted != NULL) {
|
||||
result = (UEnumeration*) uprv_malloc(sizeof(UEnumeration));
|
||||
if (result == NULL) {
|
||||
*ec = U_MEMORY_ALLOCATION_ERROR;
|
||||
} else {
|
||||
uprv_memcpy(result, &TEMPLATE, sizeof(TEMPLATE));
|
||||
result->context = adopted;
|
||||
}
|
||||
}
|
||||
if (result == NULL) {
|
||||
delete adopted;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//eof
|
27
icu4c/source/common/ustrenum.h
Normal file
27
icu4c/source/common/ustrenum.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
**********************************************************************
|
||||
* Copyright (c) 2002, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
* Author: Alan Liu
|
||||
* Created: November 11 2002
|
||||
* Since: ICU 2.4
|
||||
**********************************************************************
|
||||
*/
|
||||
#ifndef _USTRENUM_H_
|
||||
#define _USTRENUM_H_
|
||||
|
||||
#include "unicode/uenum.h"
|
||||
#include "unicode/strenum.h"
|
||||
|
||||
/**
|
||||
* Given a StringEnumeration, wrap it in a UEnumeration. The
|
||||
* StringEnumeration is adopted; after this call, the caller must not
|
||||
* delete it (regardless of error status).
|
||||
*/
|
||||
U_CAPI UEnumeration* U_EXPORT2
|
||||
uenum_openStringEnumeration(StringEnumeration* adopted, UErrorCode* ec);
|
||||
|
||||
/* _USTRENUM_H_ */
|
||||
#endif
|
||||
/*eof*/
|
Loading…
Add table
Reference in a new issue