]> git.saurik.com Git - apple/icu.git/blob - icuSources/common/ucnv_set.c
ICU-400.42.tar.gz
[apple/icu.git] / icuSources / common / ucnv_set.c
1 /*
2 *******************************************************************************
3 *
4 * Copyright (C) 2003-2007, International Business Machines
5 * Corporation and others. All Rights Reserved.
6 *
7 *******************************************************************************
8 * file name: ucnv_set.c
9 * encoding: US-ASCII
10 * tab size: 8 (not used)
11 * indentation:4
12 *
13 * created on: 2004sep07
14 * created by: Markus W. Scherer
15 *
16 * Conversion API functions using USet (ucnv_getUnicodeSet())
17 * moved here from ucnv.c for removing the dependency of other ucnv_
18 * implementation functions on the USet implementation.
19 */
20
21 #include "unicode/utypes.h"
22 #include "unicode/uset.h"
23 #include "unicode/ucnv.h"
24 #include "ucnv_bld.h"
25 #include "uset_imp.h"
26
27 #if !UCONFIG_NO_CONVERSION
28
29 U_CAPI void U_EXPORT2
30 ucnv_getUnicodeSet(const UConverter *cnv,
31 USet *setFillIn,
32 UConverterUnicodeSet whichSet,
33 UErrorCode *pErrorCode) {
34 /* argument checking */
35 if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
36 return;
37 }
38 if(cnv==NULL || setFillIn==NULL || whichSet<UCNV_ROUNDTRIP_SET || UCNV_SET_COUNT<=whichSet) {
39 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
40 return;
41 }
42
43 /* does this converter support this function? */
44 if(cnv->sharedData->impl->getUnicodeSet==NULL) {
45 *pErrorCode=U_UNSUPPORTED_ERROR;
46 return;
47 }
48
49 {
50 USetAdder sa={
51 NULL,
52 uset_add,
53 uset_addRange,
54 uset_addString,
55 uset_remove,
56 uset_removeRange
57 };
58 sa.set=setFillIn;
59
60 /* empty the set */
61 uset_clear(setFillIn);
62
63 /* call the converter to add the code points it supports */
64 cnv->sharedData->impl->getUnicodeSet(cnv, &sa, whichSet, pErrorCode);
65 }
66 }
67
68 #endif