From 1ca6396a3dd284241de11bcaa210ad5836e8e5a8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 8 Dec 2009 16:18:01 +0200 Subject: Multiple object model character encodings support Also add support for ISO-8859-1. --- libxsd/xsd/cxx/xml/char-lcp.txx | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 libxsd/xsd/cxx/xml/char-lcp.txx (limited to 'libxsd/xsd/cxx/xml/char-lcp.txx') diff --git a/libxsd/xsd/cxx/xml/char-lcp.txx b/libxsd/xsd/cxx/xml/char-lcp.txx new file mode 100644 index 0000000..01bb36e --- /dev/null +++ b/libxsd/xsd/cxx/xml/char-lcp.txx @@ -0,0 +1,55 @@ +// file : xsd/cxx/xml/char-lcp.txx +// author : Boris Kolpackov +// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include // std::memcpy + +#include + +#include +#include + +namespace xsd +{ + namespace cxx + { + namespace xml + { + template + std::basic_string char_lcp_transcoder:: + to (const XMLCh* s) + { + std_memory_manager mm; + auto_array r ( + xercesc::XMLString::transcode (s, &mm), mm); + return std::basic_string (r.get ()); + } + + template + std::basic_string char_lcp_transcoder:: + to (const XMLCh* s, std::size_t len) + { + auto_array tmp (new XMLCh[len + 1]); + std::memcpy (tmp.get (), s, len * sizeof (XMLCh)); + tmp[len] = XMLCh (0); + + std_memory_manager mm; + auto_array r ( + xercesc::XMLString::transcode (tmp.get (), &mm), mm); + + tmp.reset (); + + return std::basic_string (r.get ()); + } + + template + XMLCh* char_lcp_transcoder:: + from (const C* s) + { + std_memory_manager mm; + return xercesc::XMLString::transcode (s, &mm); + } + } + } +} -- cgit v1.1