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