]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/ucnv_set.c
ICU-6.2.4.tar.gz
[apple/icu.git] / icuSources / common / ucnv_set.c
diff --git a/icuSources/common/ucnv_set.c b/icuSources/common/ucnv_set.c
new file mode 100644 (file)
index 0000000..c192ea4
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+*******************************************************************************
+*
+*   Copyright (C) 2003-2004, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+*******************************************************************************
+*   file name:  ucnv_set.c
+*   encoding:   US-ASCII
+*   tab size:   8 (not used)
+*   indentation:4
+*
+*   created on: 2004sep07
+*   created by: Markus W. Scherer
+*
+*   Conversion API functions using USet (ucnv_getUnicodeSet())
+*   moved here from ucnv.c for removing the dependency of other ucnv_
+*   implementation functions on the USet implementation.
+*/
+
+#include "unicode/utypes.h"
+#include "unicode/uset.h"
+#include "unicode/ucnv.h"
+#include "ucnv_bld.h"
+#include "uset_imp.h"
+
+#if !UCONFIG_NO_CONVERSION
+
+U_CAPI void U_EXPORT2
+ucnv_getUnicodeSet(const UConverter *cnv,
+                   USet *setFillIn,
+                   UConverterUnicodeSet whichSet,
+                   UErrorCode *pErrorCode) {
+    /* argument checking */
+    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) {
+        return;
+    }
+    if(cnv==NULL || setFillIn==NULL || whichSet<UCNV_ROUNDTRIP_SET || UCNV_SET_COUNT<=whichSet) {
+        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+
+    /* does this converter support this function? */
+    if(cnv->sharedData->impl->getUnicodeSet==NULL) {
+        *pErrorCode=U_UNSUPPORTED_ERROR;
+        return;
+    }
+
+    {
+        USetAdder sa={
+            NULL,
+            uset_add,
+            uset_addRange,
+            uset_addString
+        };
+        sa.set=setFillIn;
+
+        /* empty the set */
+        uset_clear(setFillIn);
+
+        /* call the converter to add the code points it supports */
+        cnv->sharedData->impl->getUnicodeSet(cnv, &sa, whichSet, pErrorCode);
+    }
+}
+
+#endif