|
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 |