From 007253d53165f3ce48e50c09385e869f7e76c0d5 Mon Sep 17 00:00:00 2001
From: Jason Edward Stewart <jasons@apache.org>
Date: Fri, 13 Oct 2006 21:24:46 +0000
Subject: [PATCH] generic string typemaps

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@463840 13f79535-47bb-0310-9956-ffa450edef68
---
 swig/interfaces/typemaps-xmlch.i | 88 ++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 swig/interfaces/typemaps-xmlch.i

diff --git a/swig/interfaces/typemaps-xmlch.i b/swig/interfaces/typemaps-xmlch.i
new file mode 100644
index 000000000..c623490ce
--- /dev/null
+++ b/swig/interfaces/typemaps-xmlch.i
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2002,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// in typemap
+%typemap(in) XMLCh * %{
+    // we convert *everything* into a string *including* undef
+    $1 = UTF8_TRANSCODER->Local2XMLString($input);
+%}
+
+%typemap(freearg) XMLCh * %{
+  delete[] $1;
+%}
+
+%exception XERCES_CPP_NAMESPACE::DOMLSInput::~DOMLSInput %{
+    try 
+    {
+	XMLCh *current = (XMLCh *)(arg1)->getStringData();
+	if (current != NULL) {
+	  delete [] current;
+	}
+        $action
+    } 
+    CATCH_DOM_EXCEPTION
+%}
+
+%exception XERCES_CPP_NAMESPACE::DOMLSInput::setStringData %{
+    try 
+    {
+	XMLCh *current = (XMLCh *)(arg1)->getStringData();
+	if (current != NULL) {
+	  delete [] current;
+	}
+        $action
+    } 
+    CATCH_DOM_EXCEPTION
+%}
+
+%extend XERCES_CPP_NAMESPACE::DOMLSInput {
+%typemap(freearg) const XMLCh* data ""
+}
+
+// out typemap
+%typemap(out) XMLCh * %{
+  $result = UTF8_TRANSCODER->XMLString2Local($1);
+  ++argvi;
+%}
+
+// %typemap(typecheck, precedence=70)
+// we must set a *really* low precedence on this because it will return
+// true for *everything* 
+%typecheck(70)
+XMLCh*, const XMLCh* 
+{
+  $1 = 1;
+}
+
+// for XMLSchemaDescription
+%apply XMLCh* { uint16_t* };
+
+/*
+ * Enable conversion of void* => XMLCh* in setProperty()
+ *
+ * The in typemap converts the void* to an XMLCh*
+ *
+ * The freearg typemap deletes the transcoded string
+ *
+ */
+%typemap(in) (void* value) {
+    // we convert *everything* into a string *including* undef
+    $1 = UTF8_TRANSCODER->Local2XMLString($input);
+}
+%typemap(freearg) void * %{
+  delete[] $1;
+%}
+
-- 
GitLab