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
ucnv_getUnicodeSet(const UConverter * cnv,USet * setFillIn,UConverterUnicodeSet whichSet,UErrorCode * pErrorCode)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
69