summaryrefslogtreecommitdiff
path: root/libxsd/xsd/cxx/xml/char-iso8859-1.txx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd/xsd/cxx/xml/char-iso8859-1.txx')
-rw-r--r--libxsd/xsd/cxx/xml/char-iso8859-1.txx110
1 files changed, 0 insertions, 110 deletions
diff --git a/libxsd/xsd/cxx/xml/char-iso8859-1.txx b/libxsd/xsd/cxx/xml/char-iso8859-1.txx
deleted file mode 100644
index 8ad9f36..0000000
--- a/libxsd/xsd/cxx/xml/char-iso8859-1.txx
+++ /dev/null
@@ -1,110 +0,0 @@
-// file : xsd/cxx/xml/char-iso8859-1.txx
-// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
-
-#include <xsd/cxx/config.hxx> // XSD_CXX11
-
-#ifdef XSD_CXX11
-# include <memory> // std::unique_ptr
-#else
-# include <xsd/cxx/auto-array.hxx>
-#endif
-
-namespace xsd
-{
- namespace cxx
- {
- namespace xml
- {
- template <typename C>
- C char_iso8859_1_transcoder<C>::unrep_char_ = 0;
-
- template <typename C>
- std::basic_string<C> char_iso8859_1_transcoder<C>::
- to (const XMLCh* s, std::size_t len)
- {
- const XMLCh* end (s + len);
-
- // Find what the resulting buffer size will be.
- //
- std::size_t rl (0);
- unsigned int u (0); // Four byte UCS-4 char.
-
- bool valid (true);
- const XMLCh* p (s);
-
- for (; p < end; ++p)
- {
- if (*p >= 0xD800 && *p <= 0xDBFF)
- {
- // Make sure we have one more char and it has a valid
- // value for the second char in a surrogate pair.
- //
- if (++p == end || !((*p >= 0xDC00) && (*p <= 0xDFFF)))
- {
- valid = false;
- break;
- }
- }
-
- rl++;
- }
-
- if (!valid)
- throw invalid_utf16_string ();
-
- std::basic_string<C> r;
- r.reserve (rl + 1);
- r.resize (rl);
- C* rs (const_cast<C*> (r.c_str ()));
- std::size_t i (0);
-
- p = s;
-
- // Tight first loop for the common case.
- //
- for (; p < end && *p < 0x100; ++p)
- rs[i++] = C (*p);
-
- if (p < end && unrep_char_ == 0)
- throw iso8859_1_unrepresentable ();
-
- for (; p < end; ++p)
- {
- XMLCh x (*p);
-
- if ((x >= 0xD800) && (x <= 0xDBFF))
- {
- u = ((x - 0xD800) << 10) + (*++p - 0xDC00) + 0x10000;
- }
- else
- u = x;
-
- rs[i++] = u < 0x100 ? C (u) : unrep_char_;
- }
-
- return r;
- }
-
- template <typename C>
- XMLCh* char_iso8859_1_transcoder<C>::
- from (const C* s, std::size_t len)
- {
- const C* end (s + len);
-
-#ifdef XSD_CXX11
- std::unique_ptr<XMLCh[]> r (
-#else
- auto_array<XMLCh> r (
-#endif
- new XMLCh[len + 1]);
- XMLCh* ir (r.get ());
-
- for (const C* p (s); p < end; ++p)
- *ir++ = static_cast<unsigned char> (*p);
-
- *ir = XMLCh (0);
- return r.release ();
- }
- }
- }
-}