// file : xsd/cxx/xml/string.ixx // author : Boris Kolpackov // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_XML_STRING_IXX #define XSD_CXX_XML_STRING_IXX #include // If no transcoder has been included, use the default UTF-8. // #ifndef XSD_CXX_XML_TRANSCODER # include #endif // We sometimes need this functionality even if we are building for // wchar_t. // namespace xsd { namespace cxx { namespace xml { template <> inline std::basic_string transcode (const XMLCh* s) { if (s == 0 || *s == XMLCh (0)) return std::basic_string (); #ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP return char_transcoder::to (s, xercesc::XMLString::stringLen (s)); #else return char_transcoder::to (s); #endif } template <> inline std::basic_string transcode (const XMLCh* s, std::size_t len) { if (s == 0 || len == 0) return std::basic_string (); return char_transcoder::to (s, len); } template <> inline XMLCh* transcode_to_xmlch (const char* s) { #ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP return char_transcoder::from (s, std::char_traits::length (s)); #else return char_transcoder::from (s); #endif } template <> inline XMLCh* transcode_to_xmlch (const std::basic_string& s) { #ifndef XSD_CXX_XML_TRANSCODER_CHAR_LCP return char_transcoder::from (s.c_str (), s.length ()); #else return char_transcoder::from (s.c_str ()); #endif } } } } #endif // XSD_CXX_XML_STRING_IXX #if defined(XSD_USE_CHAR) || !defined(XSD_USE_WCHAR) #ifndef XSD_CXX_XML_STRING_IXX_CHAR #define XSD_CXX_XML_STRING_IXX_CHAR #endif // XSD_CXX_XML_STRING_IXX_CHAR #endif // XSD_USE_CHAR #if defined(XSD_USE_WCHAR) || !defined(XSD_USE_CHAR) #ifndef XSD_CXX_XML_STRING_IXX_WCHAR #define XSD_CXX_XML_STRING_IXX_WCHAR namespace xsd { namespace cxx { namespace xml { namespace bits { template struct wchar_transcoder; // Specialization for 2-byte wchar_t (resulting encoding is UTF-16). // template struct wchar_transcoder { static std::basic_string to (const XMLCh* s, std::size_t length); static XMLCh* from (const W* s, std::size_t length); }; // Specialization for 4-byte wchar_t (resulting encoding is UCS-4). // template struct wchar_transcoder { static std::basic_string to (const XMLCh* s, std::size_t length); static XMLCh* from (const W* s, std::size_t length); }; } template <> inline std::basic_string transcode (const XMLCh* s) { if (s == 0) return std::basic_string (); return bits::wchar_transcoder::to ( s, xercesc::XMLString::stringLen (s)); } template <> inline std::basic_string transcode (const XMLCh* s, std::size_t len) { if (s == 0 || len == 0) return std::basic_string (); return bits::wchar_transcoder::to ( s, len); } template <> inline XMLCh* transcode_to_xmlch (const wchar_t* s) { return bits::wchar_transcoder::from ( s, std::char_traits::length (s)); } template <> inline XMLCh* transcode_to_xmlch (const std::basic_string& s) { return bits::wchar_transcoder::from ( s.c_str (), s.length ()); } } } } #endif // XSD_CXX_XML_STRING_IXX_WCHAR #endif // XSD_USE_WCHAR