diff options
Diffstat (limited to 'libxsd/xsd/cxx/tree')
85 files changed, 0 insertions, 27987 deletions
diff --git a/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx b/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx deleted file mode 100644 index 25f4791..0000000 --- a/libxsd/xsd/cxx/tree/ace-cdr-stream-common.hxx +++ /dev/null @@ -1,24 +0,0 @@ -// file : xsd/cxx/tree/ace-cdr-stream-common.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX -#define XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX - -#include <xsd/cxx/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Base exception for ACE CDR insertion/extraction exceptions. - // - struct ace_cdr_stream_operation: xsd::cxx::exception - { - }; - } - } -} - -#endif // XSD_CXX_TREE_ACE_CDR_STREAM_COMMON_HXX diff --git a/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx b/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx deleted file mode 100644 index 3da39d2..0000000 --- a/libxsd/xsd/cxx/tree/ace-cdr-stream-extraction.hxx +++ /dev/null @@ -1,346 +0,0 @@ -// file : xsd/cxx/tree/ace-cdr-stream-extraction.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX -#define XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX - -#include <cstddef> // std::size_t -#include <string> - -#include <ace/ACE.h> // ACE::strdelete -#include <ace/CDR_Stream.h> - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#else -# include <xsd/cxx/auto-array.hxx> -#endif - -#include <xsd/cxx/tree/buffer.hxx> -#include <xsd/cxx/tree/istream.hxx> -#include <xsd/cxx/tree/ace-cdr-stream-common.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - struct ace_cdr_stream_extraction: ace_cdr_stream_operation - { - virtual const char* - what () const throw () - { - return "ACE CDR stream extraction operation failed"; - } - }; - - - // as_size - // - -#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_size<T>& x) - { - ACE_CDR::ULongLong r; - - if (!s.impl ().read_ulonglong (r) || - r > ~(T (0))) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } -#else - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_size<T>& x) - { - ACE_CDR::ULong r; - - if (!s.impl ().read_ulong (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } -#endif - - - // 8-bit - // - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_int8<T>& x) - { - ACE_CDR::Octet r; - - if (!s.impl ().read_octet (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_uint8<T>& x) - { - ACE_CDR::Octet r; - - if (!s.impl ().read_octet (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - - // 16-bit - // - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_int16<T>& x) - { - ACE_CDR::Short r; - - if (!s.impl ().read_short (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_uint16<T>& x) - { - ACE_CDR::UShort r; - - if (!s.impl ().read_ushort (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - - // 32-bit - // - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_int32<T>& x) - { - ACE_CDR::Long r; - - if (!s.impl ().read_long (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_uint32<T>& x) - { - ACE_CDR::ULong r; - - if (!s.impl ().read_ulong (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - - // 64-bit - // - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_int64<T>& x) - { - ACE_CDR::LongLong r; - - if (!s.impl ().read_longlong (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_uint64<T>& x) - { - ACE_CDR::ULongLong r; - - if (!s.impl ().read_ulonglong (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - - // Boolean - // - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_bool<T>& x) - { - ACE_CDR::Boolean r; - - if (!s.impl ().read_boolean (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - - // Floating-point - // - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_float32<T>& x) - { - ACE_CDR::Float r; - - if (!s.impl ().read_float (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - template <typename T> - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, - istream<ACE_InputCDR>::as_float64<T>& x) - { - ACE_CDR::Double r; - - if (!s.impl ().read_double (r)) - throw ace_cdr_stream_extraction (); - - x.x_ = static_cast<T> (r); - - return s; - } - - // Extraction of std::basic_string. - // - - namespace bits - { - template <typename C> - struct ace_str_deleter - { - void - operator() (C* s) const - { - ACE::strdelete (s); - } - }; - } - - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, std::basic_string<char>& x) - { - typedef bits::ace_str_deleter<char> deleter; - - deleter d; - char* r; - - if (!s.impl ().read_string (r)) - throw ace_cdr_stream_extraction (); - -#ifdef XSD_CXX11 - std::unique_ptr<char[], deleter&> ar ( -#else - auto_array<char, deleter> ar ( -#endif - r, d); - - x = r; - return s; - } - -#ifdef ACE_HAS_WCHAR - inline istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, std::basic_string<wchar_t>& x) - { - typedef bits::ace_str_deleter<wchar_t> deleter; - - deleter d; - wchar_t* r; - - if (!s.impl ().read_wstring (r)) - throw ace_cdr_stream_extraction (); - -#ifdef XSD_CXX11 - std::unique_ptr<wchar_t[], deleter&> ar ( -#else - auto_array<wchar_t, deleter> ar ( -#endif - r, d); - - x = r; - return s; - } -#endif - - - // Extraction of a binary buffer. - // - template <typename C> - istream<ACE_InputCDR>& - operator>> (istream<ACE_InputCDR>& s, buffer<C>& x) - { - ACE_CDR::ULong size; - - if (!s.impl ().read_ulong (size)) - throw ace_cdr_stream_extraction (); - - x.size (size); - - if (!s.impl ().read_octet_array ( - reinterpret_cast<ACE_CDR::Octet*> (x.data ()), size)) - throw ace_cdr_stream_extraction (); - - return s; - } - } - } -} - -#endif // XSD_CXX_TREE_ACE_CDR_STREAM_EXTRACTION_HXX diff --git a/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx b/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx deleted file mode 100644 index 40b1c4c..0000000 --- a/libxsd/xsd/cxx/tree/ace-cdr-stream-insertion.hxx +++ /dev/null @@ -1,247 +0,0 @@ -// file : xsd/cxx/tree/ace-cdr-stream-insertion.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX -#define XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX - -#include <cstddef> // std::size_t -#include <string> - -#include <ace/CDR_Stream.h> - -#include <xsd/cxx/tree/buffer.hxx> -#include <xsd/cxx/tree/ostream.hxx> -#include <xsd/cxx/tree/ace-cdr-stream-common.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - struct ace_cdr_stream_insertion: ace_cdr_stream_operation - { - virtual const char* - what () const throw () - { - return "ACE CDR stream insertion operation failed"; - } - }; - - - // as_size - // - -#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_size<T> x) - { - if (!s.impl ().write_ulonglong ( - static_cast<ACE_CDR::ULongLong> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } -#else - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_size<T> x) - { - if (x.x_ > ~(ACE_CDR::ULong (0)) || - !s.impl ().write_ulong (static_cast<ACE_CDR::ULong> (x.x_))) - throw ace_cdr_stream_insertion (); - - return s; - } -#endif - - - // 8-bit - // - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_int8<T> x) - { - ACE_CDR::Octet r (static_cast<ACE_CDR::Octet> (x.x_)); - - if (!s.impl ().write_octet (r)) - throw ace_cdr_stream_insertion (); - - return s; - } - - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_uint8<T> x) - { - ACE_CDR::Octet r (static_cast<ACE_CDR::Octet> (x.x_)); - - if (!s.impl ().write_octet (r)) - throw ace_cdr_stream_insertion (); - - return s; - } - - - // 16-bit - // - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_int16<T> x) - { - if (!s.impl ().write_short (static_cast<ACE_CDR::Short> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_uint16<T> x) - { - if (!s.impl ().write_ushort (static_cast<ACE_CDR::UShort> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - - // 32-bit - // - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_int32<T> x) - { - if (!s.impl ().write_long (static_cast<ACE_CDR::Long> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_uint32<T> x) - { - if (!s.impl ().write_ulong (static_cast<ACE_CDR::ULong> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - - // 64-bit - // - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_int64<T> x) - { - if (!s.impl ().write_longlong (static_cast<ACE_CDR::LongLong> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_uint64<T> x) - { - if (!s.impl ().write_ulonglong ( - static_cast<ACE_CDR::ULongLong> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - - // Boolean - // - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_bool<T> x) - { - if (!s.impl ().write_boolean (static_cast<ACE_CDR::Boolean> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - - // Floating-point - // - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_float32<T> x) - { - if (!s.impl ().write_float (static_cast<ACE_CDR::Float> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - template <typename T> - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - ostream<ACE_OutputCDR>::as_float64<T> x) - { - if (!s.impl ().write_double (static_cast<ACE_CDR::Double> (x.x_))) - throw ace_cdr_stream_insertion (); - return s; - } - - // Insertion of std::basic_string. - // - - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, const std::basic_string<char>& x) - { - // ACE CDR strings are hard-wired with a 32 bit length. - // - if (x.length () > ~(ACE_CDR::ULong (0)) || - !s.impl ().write_string ( - static_cast<ACE_CDR::ULong> (x.length ()), x.c_str ())) - throw ace_cdr_stream_insertion (); - return s; - } - -#ifdef ACE_HAS_WCHAR - inline ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, - const std::basic_string<wchar_t>& x) - { - // ACE CDR strings are hard-wired with a 32 bit length. - // - if (x.length () > ~(ACE_CDR::ULong (0)) || - !s.impl ().write_wstring ( - static_cast<ACE_CDR::ULong> (x.length ()), x.c_str ())) - throw ace_cdr_stream_insertion (); - return s; - } -#endif - - // Insertion of a binary buffer. - // - template <typename C> - ostream<ACE_OutputCDR>& - operator<< (ostream<ACE_OutputCDR>& s, const buffer<C>& x) - { - std::size_t size (x.size ()); - - // It is not possible to write an array with a 64-bit size. - // - if (size > ~(ACE_CDR::ULong (0)) || - !s.impl ().write_ulong (static_cast<ACE_CDR::ULong> (size)) || - !s.impl ().write_octet_array ( - reinterpret_cast<const ACE_CDR::Octet*> (x.data ()), size)) - throw ace_cdr_stream_insertion (); - - return s; - } - } - } -} - -#endif // XSD_CXX_TREE_ACE_CDR_STREAM_INSERTION_HXX diff --git a/libxsd/xsd/cxx/tree/bits/literals.hxx b/libxsd/xsd/cxx/tree/bits/literals.hxx deleted file mode 100644 index e15830c..0000000 --- a/libxsd/xsd/cxx/tree/bits/literals.hxx +++ /dev/null @@ -1,259 +0,0 @@ -// file : xsd/cxx/tree/bits/literals.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_BITS_LITERALS_HXX -#define XSD_CXX_TREE_BITS_LITERALS_HXX - -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // Boolean literals - // - template<typename C> - const C* - true_ (); - - template<typename C> - const C* - one (); - - // Float literals: INF -INF NaN. - // - template<typename C> - const C* - positive_inf (); - - template<typename C> - const C* - negative_inf (); - - template<typename C> - const C* - nan (); - - // Optional "not present" literal. - // - template<typename C> - const C* - not_present (); - - // XML Schema namespace - // - template <typename C> - const C* - xml_schema (); - - // Built-in XML Schema type names. - // - template <typename C> - const C* - any_type (); - - template <typename C> - const C* - any_simple_type (); - - template <typename C> - const C* - string (); - - template <typename C> - const C* - normalized_string (); - - template <typename C> - const C* - token (); - - template <typename C> - const C* - name (); - - template <typename C> - const C* - nmtoken (); - - template <typename C> - const C* - nmtokens (); - - template <typename C> - const C* - ncname (); - - template <typename C> - const C* - language (); - - template <typename C> - const C* - id (); - - template <typename C> - const C* - idref (); - - template <typename C> - const C* - idrefs (); - - template <typename C> - const C* - any_uri (); - - template <typename C> - const C* - qname (); - - template <typename C> - const C* - base64_binary (); - - template <typename C> - const C* - hex_binary (); - - template <typename C> - const C* - date (); - - template <typename C> - const C* - date_time (); - - template <typename C> - const C* - duration (); - - template <typename C> - const C* - gday (); - - template <typename C> - const C* - gmonth (); - - template <typename C> - const C* - gmonth_day (); - - template <typename C> - const C* - gyear (); - - template <typename C> - const C* - gyear_month (); - - template <typename C> - const C* - time (); - - template <typename C> - const C* - entity (); - - template <typename C> - const C* - entities (); - - // gday ("---") and gmonth ("--") prefixes. - // - template <typename C> - const C* - gday_prefix (); - - template <typename C> - const C* - gmonth_prefix (); - - // Exception and diagnostics string literals. - // - template <typename C> - const C* - ex_error_error (); // " error: " - - template <typename C> - const C* - ex_error_warning (); // " warning: " - - template <typename C> - const C* - ex_parsing_msg (); // "instance document parsing failed" - - template <typename C> - const C* - ex_eel_expected (); // "expected element '" - - template <typename C> - const C* - ex_uel_expected (); // "expected element '" - - template <typename C> - const C* - ex_uel_instead (); // "' instead of '" - - template <typename C> - const C* - ex_uel_unexpected (); // "unexpected element '" - - template <typename C> - const C* - ex_eat_expected (); // "expected attribute '" - - template <typename C> - const C* - ex_uen_unexpected (); // "unexpected enumerator '" - - template <typename C> - const C* - ex_etc_msg (); // "expected text content" - - template <typename C> - const C* - ex_nti_no_type_info (); // "no type information available for type '" - - template <typename C> - const C* - ex_nei_no_element_info (); // "no parsing or serialization information - // available for element '" - template <typename C> - const C* - ex_nd_type (); // "type '" - - template <typename C> - const C* - ex_nd_not_derived (); // "' is not derived from '" - - template <typename C> - const C* - ex_di_id (); // "ID '" - - template <typename C> - const C* - ex_di_already_exist (); // "' already exist" - - template <typename C> - const C* - ex_serialization_msg (); // "serialization failed" - - template <typename C> - const C* - ex_npm_no_mapping (); // "no mapping provided for namespace prefix '" - - template <typename C> - const C* - ex_bounds_msg (); // "buffer boundary rules have been violated" - } - } - } -} - -#endif // XSD_CXX_TREE_BITS_LITERALS_HXX - -#include <xsd/cxx/tree/bits/literals.ixx> diff --git a/libxsd/xsd/cxx/tree/bits/literals.ixx b/libxsd/xsd/cxx/tree/bits/literals.ixx deleted file mode 100644 index e55657d..0000000 --- a/libxsd/xsd/cxx/tree/bits/literals.ixx +++ /dev/null @@ -1,874 +0,0 @@ -// file : xsd/cxx/tree/bits/literals.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_BITS_LITERALS_IXX -#define XSD_CXX_TREE_BITS_LITERALS_IXX - -// The char versions of the following literals are required even -// if we are using wchar_t as the character type. -// -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // - // - template<> - inline const char* - positive_inf<char> () - { - return "INF"; - } - - template<> - inline const char* - negative_inf<char> () - { - return "-INF"; - } - - template<> - inline const char* - nan<char> () - { - return "NaN"; - } - } - } - } -} - -#endif // XSD_CXX_TREE_BITS_LITERALS_IXX - - -#if defined(XSD_CXX_TREE_USE_CHAR) || !defined(XSD_CXX_TREE_USE_WCHAR) - -#ifndef XSD_CXX_TREE_BITS_LITERALS_IXX_CHAR -#define XSD_CXX_TREE_BITS_LITERALS_IXX_CHAR - -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // - // - template<> - inline const char* - true_<char> () - { - return "true"; - } - - template<> - inline const char* - one<char> () - { - return "1"; - } - - // - // - template<> - inline const char* - not_present<char> () - { - return "<not present>"; - } - - // - // - template <> - inline const char* - xml_schema<char> () - { - return "http://www.w3.org/2001/XMLSchema"; - } - - // - // - template <> - inline const char* - any_type<char> () - { - return "anyType"; - } - - template <> - inline const char* - any_simple_type<char> () - { - return "anySimpleType"; - } - - template <> - inline const char* - string<char> () - { - return "string"; - } - - template <> - inline const char* - normalized_string<char> () - { - return "normalizedString"; - } - - template <> - inline const char* - token<char> () - { - return "token"; - } - - template <> - inline const char* - name<char> () - { - return "Name"; - } - - template <> - inline const char* - nmtoken<char> () - { - return "NMTOKEN"; - } - - template <> - inline const char* - nmtokens<char> () - { - return "NMTOKENS"; - } - - template <> - inline const char* - ncname<char> () - { - return "NCName"; - } - - template <> - inline const char* - language<char> () - { - return "language"; - } - - - template <> - inline const char* - id<char> () - { - return "ID"; - } - - template <> - inline const char* - idref<char> () - { - return "IDREF"; - } - - template <> - inline const char* - idrefs<char> () - { - return "IDREFS"; - } - - template <> - inline const char* - any_uri<char> () - { - return "anyURI"; - } - - template <> - inline const char* - qname<char> () - { - return "QName"; - } - - template <> - inline const char* - base64_binary<char> () - { - return "base64Binary"; - } - - template <> - inline const char* - hex_binary<char> () - { - return "hexBinary"; - } - - template <> - inline const char* - date<char> () - { - return "date"; - } - - template <> - inline const char* - date_time<char> () - { - return "dateTime"; - } - - template <> - inline const char* - duration<char> () - { - return "duration"; - } - - template <> - inline const char* - gday<char> () - { - return "gDay"; - } - - template <> - inline const char* - gmonth<char> () - { - return "gMonth"; - } - - template <> - inline const char* - gmonth_day<char> () - { - return "gMonthDay"; - } - - template <> - inline const char* - gyear<char> () - { - return "gYear"; - } - - template <> - inline const char* - gyear_month<char> () - { - return "gYearMonth"; - } - - template <> - inline const char* - time<char> () - { - return "time"; - } - - template <> - inline const char* - entity<char> () - { - return "ENTITY"; - } - - template <> - inline const char* - entities<char> () - { - return "ENTITIES"; - } - - template <> - inline const char* - gday_prefix<char> () - { - return "---"; - } - - template <> - inline const char* - gmonth_prefix<char> () - { - return "--"; - } - - // - // - template <> - inline const char* - ex_error_error<char> () - { - return " error: "; - } - - template <> - inline const char* - ex_error_warning<char> () - { - return " warning: "; - } - - template <> - inline const char* - ex_parsing_msg<char> () - { - return "instance document parsing failed"; - } - - template <> - inline const char* - ex_eel_expected<char> () - { - return "expected element '"; - } - - template <> - inline const char* - ex_uel_expected<char> () - { - return "expected element '"; - } - - template <> - inline const char* - ex_uel_instead<char> () - { - return "' instead of '"; - } - - template <> - inline const char* - ex_uel_unexpected<char> () - { - return "unexpected element '"; - } - - template <> - inline const char* - ex_eat_expected<char> () - { - return "expected attribute '"; - } - - template <> - inline const char* - ex_uen_unexpected<char> () - { - return "unexpected enumerator '"; - } - - template <> - inline const char* - ex_etc_msg<char> () - { - return "expected text content"; - } - - template <> - inline const char* - ex_nti_no_type_info<char> () - { - return "no type information available for type '"; - } - - template <> - inline const char* - ex_nei_no_element_info<char> () - { - return "no parsing or serialization information available for " - "element '"; - } - template <> - inline const char* - ex_nd_type<char> () - { - return "type '"; - } - - template <> - inline const char* - ex_nd_not_derived<char> () - { - return "' is not derived from '"; - } - - template <> - inline const char* - ex_di_id<char> () - { - return "ID '"; - } - - template <> - inline const char* - ex_di_already_exist<char> () - { - return "' already exist"; - } - - template <> - inline const char* - ex_serialization_msg<char> () - { - return "serialization failed"; - } - - template <> - inline const char* - ex_npm_no_mapping<char> () - { - return "no mapping provided for namespace prefix '"; - } - - template <> - inline const char* - ex_bounds_msg<char> () - { - return "buffer boundary rules have been violated"; - } - } - } - } -} - -#endif // XSD_CXX_TREE_BITS_LITERALS_IXX_CHAR -#endif // XSD_CXX_TREE_USE_CHAR - - -#if defined(XSD_CXX_TREE_USE_WCHAR) || !defined(XSD_CXX_TREE_USE_CHAR) - -#ifndef XSD_CXX_TREE_BITS_LITERALS_IXX_WCHAR -#define XSD_CXX_TREE_BITS_LITERALS_IXX_WCHAR - -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // - // - template<> - inline const wchar_t* - true_<wchar_t> () - { - return L"true"; - } - - template<> - inline const wchar_t* - one<wchar_t> () - { - return L"1"; - } - - // - // - template<> - inline const wchar_t* - positive_inf<wchar_t> () - { - return L"INF"; - } - - template<> - inline const wchar_t* - negative_inf<wchar_t> () - { - return L"-INF"; - } - - template<> - inline const wchar_t* - nan<wchar_t> () - { - return L"NaN"; - } - - // - // - template<> - inline const wchar_t* - not_present<wchar_t> () - { - return L"<not present>"; - } - - // - // - template <> - inline const wchar_t* - xml_schema<wchar_t> () - { - return L"http://www.w3.org/2001/XMLSchema"; - } - - // - // - template <> - inline const wchar_t* - any_type<wchar_t> () - { - return L"anyType"; - } - - template <> - inline const wchar_t* - any_simple_type<wchar_t> () - { - return L"anySimpleType"; - } - - template <> - inline const wchar_t* - string<wchar_t> () - { - return L"string"; - } - - template <> - inline const wchar_t* - normalized_string<wchar_t> () - { - return L"normalizedString"; - } - - template <> - inline const wchar_t* - token<wchar_t> () - { - return L"token"; - } - - template <> - inline const wchar_t* - name<wchar_t> () - { - return L"Name"; - } - - template <> - inline const wchar_t* - nmtoken<wchar_t> () - { - return L"NMTOKEN"; - } - - template <> - inline const wchar_t* - nmtokens<wchar_t> () - { - return L"NMTOKENS"; - } - - template <> - inline const wchar_t* - ncname<wchar_t> () - { - return L"NCName"; - } - - template <> - inline const wchar_t* - language<wchar_t> () - { - return L"language"; - } - - - template <> - inline const wchar_t* - id<wchar_t> () - { - return L"ID"; - } - - template <> - inline const wchar_t* - idref<wchar_t> () - { - return L"IDREF"; - } - - template <> - inline const wchar_t* - idrefs<wchar_t> () - { - return L"IDREFS"; - } - - template <> - inline const wchar_t* - any_uri<wchar_t> () - { - return L"anyURI"; - } - - template <> - inline const wchar_t* - qname<wchar_t> () - { - return L"QName"; - } - - template <> - inline const wchar_t* - base64_binary<wchar_t> () - { - return L"base64Binary"; - } - - template <> - inline const wchar_t* - hex_binary<wchar_t> () - { - return L"hexBinary"; - } - - template <> - inline const wchar_t* - date<wchar_t> () - { - return L"date"; - } - - template <> - inline const wchar_t* - date_time<wchar_t> () - { - return L"dateTime"; - } - - template <> - inline const wchar_t* - duration<wchar_t> () - { - return L"duration"; - } - - template <> - inline const wchar_t* - gday<wchar_t> () - { - return L"gDay"; - } - - template <> - inline const wchar_t* - gmonth<wchar_t> () - { - return L"gMonth"; - } - - template <> - inline const wchar_t* - gmonth_day<wchar_t> () - { - return L"gMonthDay"; - } - - template <> - inline const wchar_t* - gyear<wchar_t> () - { - return L"gYear"; - } - - template <> - inline const wchar_t* - gyear_month<wchar_t> () - { - return L"gYearMonth"; - } - - template <> - inline const wchar_t* - time<wchar_t> () - { - return L"time"; - } - - template <> - inline const wchar_t* - entity<wchar_t> () - { - return L"ENTITY"; - } - - template <> - inline const wchar_t* - entities<wchar_t> () - { - return L"ENTITIES"; - } - - template <> - inline const wchar_t* - gday_prefix<wchar_t> () - { - return L"---"; - } - - template <> - inline const wchar_t* - gmonth_prefix<wchar_t> () - { - return L"--"; - } - - // - // - template <> - inline const wchar_t* - ex_error_error<wchar_t> () - { - return L" error: "; - } - - template <> - inline const wchar_t* - ex_error_warning<wchar_t> () - { - return L" warning: "; - } - - template <> - inline const wchar_t* - ex_parsing_msg<wchar_t> () - { - return L"instance document parsing failed"; - } - - template <> - inline const wchar_t* - ex_eel_expected<wchar_t> () - { - return L"expected element '"; - } - - template <> - inline const wchar_t* - ex_uel_expected<wchar_t> () - { - return L"expected element '"; - } - - template <> - inline const wchar_t* - ex_uel_instead<wchar_t> () - { - return L"' instead of '"; - } - - template <> - inline const wchar_t* - ex_uel_unexpected<wchar_t> () - { - return L"unexpected element '"; - } - - template <> - inline const wchar_t* - ex_eat_expected<wchar_t> () - { - return L"expected attribute '"; - } - - template <> - inline const wchar_t* - ex_uen_unexpected<wchar_t> () - { - return L"unexpected enumerator '"; - } - - template <> - inline const wchar_t* - ex_etc_msg<wchar_t> () - { - return L"expected text content"; - } - - template <> - inline const wchar_t* - ex_nti_no_type_info<wchar_t> () - { - return L"no type information available for type '"; - } - - template <> - inline const wchar_t* - ex_nei_no_element_info<wchar_t> () - { - return L"no parsing or serialization information available for " - L"element '"; - } - template <> - inline const wchar_t* - ex_nd_type<wchar_t> () - { - return L"type '"; - } - - template <> - inline const wchar_t* - ex_nd_not_derived<wchar_t> () - { - return L"' is not derived from '"; - } - - template <> - inline const wchar_t* - ex_di_id<wchar_t> () - { - return L"ID '"; - } - - template <> - inline const wchar_t* - ex_di_already_exist<wchar_t> () - { - return L"' already exist"; - } - - template <> - inline const wchar_t* - ex_serialization_msg<wchar_t> () - { - return L"serialization failed"; - } - - template <> - inline const wchar_t* - ex_npm_no_mapping<wchar_t> () - { - return L"no mapping provided for namespace prefix '"; - } - - template <> - inline const wchar_t* - ex_bounds_msg<wchar_t> () - { - return L"buffer boundary rules have been violated"; - } - } - } - } -} - -#endif // XSD_CXX_TREE_BITS_LITERALS_IXX_WCHAR -#endif // XSD_CXX_TREE_USE_WCHAR diff --git a/libxsd/xsd/cxx/tree/buffer.hxx b/libxsd/xsd/cxx/tree/buffer.hxx deleted file mode 100644 index b455c33..0000000 --- a/libxsd/xsd/cxx/tree/buffer.hxx +++ /dev/null @@ -1,335 +0,0 @@ -// file : xsd/cxx/tree/buffer.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -/** - * @file - * - * @brief Contains a simple binary buffer abstraction that is used to - * implement the base64Binary and hexBinary XML Schema built-in types. - * - * This is an internal header and is included by the generated code. You - * normally should not include it directly. - * - */ - -#ifndef XSD_CXX_TREE_BUFFER_HXX -#define XSD_CXX_TREE_BUFFER_HXX - -#include <new> // operator new/delete -#include <cstddef> // std::size_t -#include <cstring> // std::memcpy, std::memcmp - -#include <xsd/cxx/tree/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - /** - * @brief C++/Tree mapping runtime namespace. - * - * This is an internal namespace and normally should not be referenced - * directly. Instead you should use the aliases for types in this - * namespaces that are created in the generated code. - * - */ - namespace tree - { - //@cond - - class buffer_base - { - protected: - virtual - ~buffer_base () - { - if (free_ && data_) - operator delete (data_); - } - - buffer_base () - : data_ (0), size_ (0), capacity_ (0), free_ (true) - { - } - - protected: - char* data_; - size_t size_; - size_t capacity_; - bool free_; - }; - - //@endcond - - /** - * @brief Simple binary %buffer abstraction - * - * The %buffer class manages a continuous binary %buffer. The base - * concepts are data (actual memory region), size (the portion of - * the %buffer that contains useful information), and capacity (the - * actual size of the underlying memory region). The bounds - * %exception is thrown from the constructors and modifier functions - * if the (size <= capacity) constraint is violated. - * - * Note that the template parameter is only used to instantiate - * %exception types. The underlying %buffer type is always @c char. - * - * @nosubgrouping - */ - template<typename C> - class buffer: protected buffer_base - { - public: - /** - * @brief Size type - */ - typedef std::size_t size_t; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Allocate a %buffer of the specified size. - * - * The resulting %buffer has the same size and capacity. - * - * @param size A %buffer size in bytes. - */ - explicit - buffer (size_t size = 0); - - /** - * @brief Allocate a %buffer of the specified size and capacity. - * - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @throw bounds If @a size exceeds @a capacity - */ - buffer (size_t size, size_t capacity); - - /** - * @brief Allocate a %buffer of the specified size and copy - * the data. - * - * The resulting %buffer has the same size and capacity with - * @a size bytes copied from @a data. - * - * @param data A %buffer to copy the data from. - * @param size A %buffer size in bytes. - */ - buffer (const void* data, size_t size); - - /** - * @brief Allocate a %buffer of the specified size and capacity - * and copy the data. - * - * @a size bytes are copied from @a data to the resulting - * %buffer. - * - * @param data A %buffer to copy the data from. - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @throw bounds If @a size exceeds @a capacity - */ - buffer (const void* data, size_t size, size_t capacity); - - /** - * @brief Reuse an existing %buffer. - * - * If the @a assume_ownership argument is true, the %buffer will - * assume ownership of @a data and will release the memory - * by calling @c operator @c delete(). - * - * @param data A %buffer to reuse. - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @param assume_ownership A boolean value indication whether to - * assume ownership. - * @throw bounds If @a size exceeds @a capacity - */ - buffer (void* data, - size_t size, - size_t capacity, - bool assume_ownership); - - /** - * @brief Copy constructor. - * - * The copy constructor performs a deep copy of the underlying - * memory %buffer. - * - * @param x An instance to make a copy of. - */ - buffer (const buffer& x); - - //@} - - public: - /** - * @brief Copy assignment operator. - * - * The copy assignment operator changes the buffer's capacity - * to @c x.capacity() and copies @c x.size() bytes from @a x. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - buffer& - operator= (const buffer& x); - - public: - /** - * @brief Get buffer's capacity. - * - * @return A number of bytes that the %buffer can hold without - * reallocation. - */ - size_t - capacity () const - { - return capacity_; - } - - /** - * @brief Set buffer's capacity. - * - * @param c The new capacity in bytes. - * @return True if the underlying %buffer has moved, false otherwise. - */ - bool - capacity (size_t c) - { - return this->capacity (c, true); - } - - public: - /** - * @brief Get buffer's size. - * - * @return A number of bytes that the %buffer holds. - */ - size_t - size () const {return size_;} - - /** - * @brief Set buffer's size. - * - * @param s The new size in bytes. - * @return True if the underlying %buffer has moved, false otherwise. - */ - bool - size (size_t s) - { - bool r (false); - - if (s > capacity_) - r = capacity (s); - - size_ = s; - - return r; - } - - public: - /** - * @brief Get the underlying memory region. - * - * @return A constant pointer to the underlying memory region. - */ - const char* - data () const {return data_;} - - /** - * @brief Get the underlying memory region. - * - * @return A pointer to the underlying memory region. - */ - char* - data () {return data_;} - - /** - * @brief Get the beginning of the underlying memory region. - * - * @return A constant pointer to the first byte of the underlying - * memory region. - */ - const char* - begin () const {return data_;} - - /** - * @brief Get the beginning of the underlying memory region. - * - * @return A pointer to the first byte of the underlying memory - * region. - */ - char* - begin () {return data_;} - - /** - * @brief Get the end of the underlying memory region. - * - * @return A constant pointer to the one past last byte of the - * underlying memory region (that is @c %begin() @c + @c %size() ). - */ - const char* - end () const {return data_ + size_;} - - /** - * @brief Get the end of the underlying memory region. - * - * @return A pointer to the one past last byte of the underlying - * memory region (that is @c %begin() @c + @c %size() ). - */ - char* - end () {return data_ + size_;} - - public: - /** - * @brief Swap data with another %buffer. - * - * @param x A %buffer to swap with. - */ - void - swap (buffer& x); - - private: - bool - capacity (size_t capacity, bool copy); - }; - - /** - * @brief %buffer comparison operator. - * - * @return True if the buffers have the same sizes and the same - * data. - */ - template <typename C> - inline bool - operator== (const buffer<C>& a, const buffer<C>& b) - { - return a.size () == b.size () && - std::memcmp (a.data (), b.data (), a.size ()) == 0; - } - - /** - * @brief %buffer comparison operator. - * - * @return True if the buffers have different sizes or different - * data. - */ - template <typename C> - inline bool - operator!= (const buffer<C>& a, const buffer<C>& b) - { - return !(a == b); - } - } - } -} - -#include <xsd/cxx/tree/buffer.txx> - -#endif // XSD_CXX_TREE_BUFFER_HXX diff --git a/libxsd/xsd/cxx/tree/buffer.txx b/libxsd/xsd/cxx/tree/buffer.txx deleted file mode 100644 index 0ad8ecd..0000000 --- a/libxsd/xsd/cxx/tree/buffer.txx +++ /dev/null @@ -1,145 +0,0 @@ -// file : xsd/cxx/tree/buffer.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - buffer<C>:: - buffer (size_t size) - { - capacity (size); - size_ = size; - } - - template <typename C> - buffer<C>:: - buffer (size_t size, size_t capacity) - { - if (size > capacity) - throw bounds<C> (); - - this->capacity (capacity); - size_ = size; - } - - template <typename C> - buffer<C>:: - buffer (const void* data, size_t size) - { - capacity (size); - size_ = size; - - if (size_) - std::memcpy (data_, data, size_); - } - - template <typename C> - buffer<C>:: - buffer (const void* data, size_t size, size_t capacity) - { - if (size > capacity) - throw bounds<C> (); - - this->capacity (capacity); - size_ = size; - - if (size_) - std::memcpy (data_, data, size_); - } - - template <typename C> - buffer<C>:: - buffer (void* data, size_t size, size_t capacity, bool own) - { - if (size > capacity) - throw bounds<C> (); - - data_ = reinterpret_cast<char*> (data); - size_ = size; - capacity_ = capacity; - free_ = own; - } - - template <typename C> - buffer<C>:: - buffer (const buffer& other) - : buffer_base () - { - capacity (other.capacity_); - size_ = other.size_; - - if (size_) - std::memcpy (data_, other.data_, size_); - } - - template <typename C> - buffer<C>& buffer<C>:: - operator= (const buffer& other) - { - if (this != &other) - { - capacity (other.capacity_, false); - size_ = other.size_; - - if (size_) - std::memcpy (data_, other.data_, size_); - } - - return *this; - } - - template <typename C> - void buffer<C>:: - swap (buffer& other) - { - char* tmp_data (data_); - size_t tmp_size (size_); - size_t tmp_capacity (capacity_); - bool tmp_free (free_); - - data_ = other.data_; - size_ = other.size_; - capacity_ = other.capacity_; - free_ = other.free_; - - other.data_ = tmp_data; - other.size_ = tmp_size; - other.capacity_ = tmp_capacity; - other.free_ = tmp_free; - } - - template <typename C> - bool buffer<C>:: - capacity (size_t capacity, bool copy) - { - if (size_ > capacity) - throw bounds<C> (); - - if (capacity <= capacity_) - { - return false; // Do nothing if shrinking is requested. - } - else - { - char* data (reinterpret_cast<char*> (operator new (capacity))); - - if (copy && size_ > 0) - std::memcpy (data, data_, size_); - - if (free_ && data_) - operator delete (data_); - - data_ = data; - capacity_ = capacity; - free_ = true; - - return true; - } - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/comparison-map.hxx b/libxsd/xsd/cxx/tree/comparison-map.hxx deleted file mode 100644 index d78cc90..0000000 --- a/libxsd/xsd/cxx/tree/comparison-map.hxx +++ /dev/null @@ -1,111 +0,0 @@ -// file : xsd/cxx/tree/comparison-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_COMPARISON_MAP_HXX -#define XSD_CXX_TREE_COMPARISON_MAP_HXX - -#include <map> -#include <cstddef> // std::size_t -#include <typeinfo> - -#include <xsd/cxx/tree/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct comparison_map - { - typedef std::type_info type_id; - typedef bool (*comparator) (const type&, const type&); - - comparison_map (); - - void - register_type (const type_id&, comparator, bool replace = true); - - void - unregister_type (const type_id&); - - bool - compare (const type&, const type&); - - public: - comparator - find (const type_id&) const; - - private: - struct type_id_comparator - { - bool - operator() (const type_id* x, const type_id* y) const - { - // XL C++ on AIX has buggy type_info::before() in that - // it returns true for two different type_info objects - // that happened to be for the same type. - // -#if defined(__xlC__) && defined(_AIX) - return *x != *y && x->before (*y); -#else - return x->before (*y); -#endif - } - }; - - typedef - std::map<const type_id*, comparator, type_id_comparator> - type_map; - - type_map type_map_; - }; - - // - // - template<unsigned long id, typename C> - struct comparison_plate - { - static comparison_map<C>* map; - static std::size_t count; - - comparison_plate (); - ~comparison_plate (); - }; - - template<unsigned long id, typename C> - comparison_map<C>* comparison_plate<id, C>::map = 0; - - template<unsigned long id, typename C> - std::size_t comparison_plate<id, C>::count = 0; - - - // - // - template<unsigned long id, typename C> - inline comparison_map<C>& - comparison_map_instance () - { - return *comparison_plate<id, C>::map; - } - - // - // - template<typename T> - bool - comparator_impl (const type&, const type&); - - template<unsigned long id, typename C, typename T> - struct comparison_initializer - { - comparison_initializer (); - ~comparison_initializer (); - }; - } - } -} - -#include <xsd/cxx/tree/comparison-map.txx> - -#endif // XSD_CXX_TREE_COMPARISON_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/comparison-map.txx b/libxsd/xsd/cxx/tree/comparison-map.txx deleted file mode 100644 index cc739b3..0000000 --- a/libxsd/xsd/cxx/tree/comparison-map.txx +++ /dev/null @@ -1,298 +0,0 @@ -// file : xsd/cxx/tree/comparison-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/tree/types.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // comparison_map - // - template <typename C> - comparison_map<C>:: - comparison_map () - { - // anyType and anySimpleType. - // - - register_type ( - typeid (type), - &comparator_impl<type>, - false); - - typedef simple_type<C, type> simple_type; - - register_type ( - typeid (simple_type), - &comparator_impl<simple_type>, - false); - - // Strings - // - typedef string<C, simple_type> string; - register_type ( - typeid (string), - &comparator_impl<string>, - false); - - typedef normalized_string<C, string> normalized_string; - register_type ( - typeid (normalized_string), - &comparator_impl<normalized_string>, - false); - - typedef token<C, normalized_string> token; - register_type ( - typeid (token), - &comparator_impl<token>, - false); - - typedef name<C, token> name; - register_type ( - typeid (name), - &comparator_impl<name>, - false); - - typedef nmtoken<C, token> nmtoken; - register_type ( - typeid (nmtoken), - &comparator_impl<nmtoken>, - false); - - typedef nmtokens<C, simple_type, nmtoken> nmtokens; - register_type ( - typeid (nmtokens), - &comparator_impl<nmtokens>, - false); - - typedef ncname<C, name> ncname; - register_type ( - typeid (ncname), - &comparator_impl<ncname>, - false); - - typedef language<C, token> language; - register_type ( - typeid (language), - &comparator_impl<language>, - false); - - - // ID/IDREF. - // - typedef id<C, ncname> id; - register_type ( - typeid (id), - &comparator_impl<id>, - false); - - typedef idref<C, ncname, type> idref; - register_type ( - typeid (idref), - &comparator_impl<idref>, - false); - - typedef idrefs<C, simple_type, idref> idrefs; - register_type ( - typeid (idrefs), - &comparator_impl<idrefs>, - false); - - - // URI. - // - typedef uri<C, simple_type> uri; - register_type ( - typeid (uri), - &comparator_impl<uri>, - false); - - - // Qualified name. - // - typedef qname<C, simple_type, uri, ncname> qname; - register_type ( - typeid (qname), - &comparator_impl<qname>, - false); - - - // Binary. - // - typedef base64_binary<C, simple_type> base64_binary; - register_type ( - typeid (base64_binary), - &comparator_impl<base64_binary>, - false); - - typedef hex_binary<C, simple_type> hex_binary; - register_type ( - typeid (hex_binary), - &comparator_impl<hex_binary>, - false); - - - // Date/time. - // - typedef gday<C, simple_type> gday; - register_type ( - typeid (gday), - &comparator_impl<gday>, - false); - - typedef gmonth<C, simple_type> gmonth; - register_type ( - typeid (gmonth), - &comparator_impl<gmonth>, - false); - - typedef gyear<C, simple_type> gyear; - register_type ( - typeid (gyear), - &comparator_impl<gyear>, - false); - - typedef gmonth_day<C, simple_type> gmonth_day; - register_type ( - typeid (gmonth_day), - &comparator_impl<gmonth_day>, - false); - - typedef gyear_month<C, simple_type> gyear_month; - register_type ( - typeid (gyear_month), - &comparator_impl<gyear_month>, - false); - - typedef date<C, simple_type> date; - register_type ( - typeid (date), - &comparator_impl<date>, - false); - - typedef time<C, simple_type> time; - register_type ( - typeid (time), - &comparator_impl<time>, - false); - - typedef date_time<C, simple_type> date_time; - register_type ( - typeid (date_time), - &comparator_impl<date_time>, - false); - - typedef duration<C, simple_type> duration; - register_type ( - typeid (duration), - &comparator_impl<duration>, - false); - - - // Entity. - // - typedef entity<C, ncname> entity; - register_type ( - typeid (entity), - &comparator_impl<entity>, - false); - - typedef entities<C, simple_type, entity> entities; - register_type ( - typeid (entities), - &comparator_impl<entities>, - false); - } - - template <typename C> - void comparison_map<C>:: - register_type (const type_id& tid, comparator c, bool replace) - { - if (replace || type_map_.find (&tid) == type_map_.end ()) - type_map_[&tid] = c; - } - - template <typename C> - void comparison_map<C>:: - unregister_type (const type_id& tid) - { - type_map_.erase (&tid); - } - - template <typename C> - bool comparison_map<C>:: - compare (const type& x, const type& y) - { - const type_id& xi (typeid (x)); - - if (xi != typeid (y)) - return false; - - if (comparator c = find (xi)) - return c (x, y); - else - throw no_type_info<C> (std::basic_string<C> (), - std::basic_string<C> ()); // @@ TODO - } - - template <typename C> - typename comparison_map<C>::comparator - comparison_map<C>:: - find (const type_id& tid) const - { - typename type_map::const_iterator i (type_map_.find (&tid)); - return i == type_map_.end () ? 0 : i->second; - } - - - // comparison_plate - // - template<unsigned long id, typename C> - comparison_plate<id, C>:: - comparison_plate () - { - if (count == 0) - map = new comparison_map<C>; - - ++count; - } - - template<unsigned long id, typename C> - comparison_plate<id, C>:: - ~comparison_plate () - { - if (--count == 0) - delete map; - } - - // - // - template<typename T> - bool - comparator_impl (const type& x, const type& y) - { - return static_cast<const T&> (x) == static_cast<const T&> (y); - } - - // comparison_initializer - // - template<unsigned long id, typename C, typename T> - comparison_initializer<id, C, T>:: - comparison_initializer () - { - comparison_map_instance<id, C> ().register_type ( - typeid (T), &comparator_impl<T>); - } - - template<unsigned long id, typename C, typename T> - comparison_initializer<id, C, T>:: - ~comparison_initializer () - { - comparison_map_instance<id, C> ().unregister_type (typeid (T)); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/containers-wildcard.hxx b/libxsd/xsd/cxx/tree/containers-wildcard.hxx deleted file mode 100644 index 7fc5dce..0000000 --- a/libxsd/xsd/cxx/tree/containers-wildcard.hxx +++ /dev/null @@ -1,1337 +0,0 @@ -// file : xsd/cxx/tree/containers-wildcard.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX -#define XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX - -#include <set> -#include <string> - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> -#include <xercesc/dom/DOMDocument.hpp> -#include <xercesc/util/XMLString.hpp> - -#include <xsd/cxx/xml/string.hxx> - -#include <xsd/cxx/tree/iterator-adapter.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // one (for internal use only) - // - class element_one - { - public: - typedef xercesc::DOMElement value_type; - - ~element_one () - { - if (x_) - x_->release (); - } - - explicit - element_one (xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - } - - element_one (const xercesc::DOMElement& x, xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - set (x); - } - - element_one (const element_one& x, xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - if (x.present ()) - set (x.get ()); - } - - element_one& - operator= (const element_one& x) - { - if (this == &x) - return *this; - - if (x.present ()) - set (x.get ()); - else if (x_) - { - x_->release (); - x_ = 0; - } - - return *this; - } - - public: - const xercesc::DOMElement& - get () const - { - return *x_; - } - - xercesc::DOMElement& - get () - { - return *x_; - } - - void - set (const xercesc::DOMElement& x) - { - using xercesc::DOMElement; - - DOMElement* r ( - static_cast<DOMElement*> ( - doc_.importNode (const_cast<DOMElement*> (&x), true))); - - if (x_) - x_->release (); - - x_ = r; - } - - void - set (xercesc::DOMElement* x) - { - assert (x->getOwnerDocument () == &doc_); - - if (x_) - x_->release (); - - x_ = x; - } - - bool - present () const - { - return x_ != 0; - } - - protected: - xercesc::DOMElement* x_; - xercesc::DOMDocument& doc_; - }; - - - // - // - class element_optional - { - public: - typedef xercesc::DOMElement value_type; - - ~element_optional () - { - if (x_) - x_->release (); - } - - explicit - element_optional (xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - } - - element_optional (const xercesc::DOMElement& x, - xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - set (x); - } - - element_optional (xercesc::DOMElement* x, xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - set (x); - } - - element_optional (const element_optional& x, - xercesc::DOMDocument& doc) - : x_ (0), doc_ (doc) - { - if (x) - set (*x); - } - - element_optional& - operator= (const xercesc::DOMElement& x) - { - if (x_ == &x) - return *this; - - set (x); - - return *this; - } - - element_optional& - operator= (const element_optional& x) - { - if (this == &x) - return *this; - - if (x) - set (*x); - else - reset (); - - return *this; - } - - // Pointer-like interface. - // - public: - const xercesc::DOMElement* - operator-> () const - { - return x_; - } - - xercesc::DOMElement* - operator-> () - { - return x_; - } - - const xercesc::DOMElement& - operator* () const - { - return *x_; - } - - xercesc::DOMElement& - operator* () - { - return *x_; - } - - typedef void (element_optional::*bool_convertible) (); - - operator bool_convertible () const - { - return x_ != 0 ? &element_optional::true_ : 0; - } - - // Get/set interface. - // - public: - bool - present () const - { - return x_ != 0; - } - - const xercesc::DOMElement& - get () const - { - return *x_; - } - - xercesc::DOMElement& - get () - { - return *x_; - } - - void - set (const xercesc::DOMElement& x) - { - using xercesc::DOMElement; - - DOMElement* r ( - static_cast<DOMElement*> ( - doc_.importNode (const_cast<DOMElement*> (&x), true))); - - if (x_) - x_->release (); - - x_ = r; - } - - void - set (xercesc::DOMElement* x) - { - assert (x->getOwnerDocument () == &doc_); - - if (x_) - x_->release (); - - x_ = x; - } - - void - reset () - { - if (x_) - x_->release (); - - x_ = 0; - } - - private: - void - true_ () - { - } - - private: - xercesc::DOMElement* x_; - xercesc::DOMDocument& doc_; - }; - - // Comparison operators. - // - - inline bool - operator== (const element_optional& a, const element_optional& b) - { - return !a || !b - ? a.present () == b.present () - : a->isEqualNode (&b.get ()); - } - - inline bool - operator!= (const element_optional& a, const element_optional& b) - { - return !(a == b); - } - - - // - // - class element_sequence - { - protected: - // This is a dangerously destructive automatic pointer. We are going - // to use it in a controlled environment to save us a lot of coding. - // - struct ptr - { - ~ptr () - { - if (x_) - x_->release (); - } - - explicit - ptr (xercesc::DOMElement* x = 0) - : x_ (x) - { - } - - ptr (const ptr& y) - : x_ (y.x_) - { - // Yes, hostile takeover. - // - y.x_ = 0; - } - - ptr& - operator= (const ptr& y) - { - if (this != &y) - { - // Yes, hostile takeover. - // - if (x_) - x_->release (); - - x_ = y.x_; - y.x_ = 0; - } - - return *this; - } - - public: - xercesc::DOMElement& - operator* () const - { - return *x_; - } - - xercesc::DOMElement* - get () const - { - return x_; - } - - private: - mutable xercesc::DOMElement* x_; - }; - - typedef std::vector<ptr> base_sequence; - typedef base_sequence::iterator base_iterator; - typedef base_sequence::const_iterator base_const_iterator; - - public: - typedef xercesc::DOMElement value_type; - typedef xercesc::DOMElement* pointer; - typedef const xercesc::DOMElement* const_pointer; - typedef xercesc::DOMElement& reference; - typedef const xercesc::DOMElement& const_reference; - - typedef - iterator_adapter<base_sequence::iterator, xercesc::DOMElement> - iterator; - - typedef - iterator_adapter<base_sequence::const_iterator, - const xercesc::DOMElement> - const_iterator; - - typedef - iterator_adapter<base_sequence::reverse_iterator, xercesc::DOMElement> - reverse_iterator; - - typedef - iterator_adapter<base_sequence::const_reverse_iterator, - const xercesc::DOMElement> - const_reverse_iterator; - - typedef base_sequence::size_type size_type; - typedef base_sequence::difference_type difference_type; - typedef base_sequence::allocator_type allocator_type; - - public: - explicit - element_sequence (xercesc::DOMDocument& doc) - : doc_ (doc) - { - } - - // DOMElement cannot be default-constructed. - // - // explicit - // element_sequence (size_type n); - - element_sequence (size_type n, - const xercesc::DOMElement& x, - xercesc::DOMDocument& doc) - : doc_ (doc) - { - assign (n, x); - } - - template <typename I> - element_sequence (const I& begin, const I& end, - xercesc::DOMDocument& doc) - : doc_ (doc) - { - assign (begin, end); - } - - element_sequence (const element_sequence& v, - xercesc::DOMDocument& doc) - : doc_ (doc) - { - v_.reserve (v.v_.size ()); - - for (base_const_iterator i (v.v_.begin ()), e (v.v_.end ()); - i != e; ++i) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode (i->get (), true))); - - v_.push_back (p); - } - } - - element_sequence& - operator= (const element_sequence& v) - { - if (this == &v) - return *this; - - v_.assign (v.v_.size (), ptr ()); - - base_iterator di (v_.begin ()), de (v_.end ()); - base_const_iterator si (v.v_.begin ()), se (v.v_.end ()); - - for (; si != se && di != de; ++si, ++di) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode (si->get (), true))); - *di = p; - } - - return *this; - } - - public: - void - assign (size_type n, const xercesc::DOMElement& x) - { - v_.assign (n, ptr ()); - - for (base_iterator i (v_.begin ()), e (v_.end ()); i != e; ++i) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode ( - const_cast<xercesc::DOMElement*> (&x), true))); - *i = p; - } - } - - template <typename I> - void - assign (const I& begin, const I& end) - { - // This is not the fastest way to do it. - // - v_.clear (); - - for (I i (begin); i != end; ++i) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode ( - const_cast<xercesc::DOMElement*> (&(*i)), true))); - v_.push_back (p); - } - } - - public: - // This version of resize can only be used to shrink the - // sequence because DOMElement cannot be default-constructed. - // - void - resize (size_type n) - { - assert (n <= v_.size ()); - v_.resize (n, ptr ()); - } - - void - resize (size_type n, const xercesc::DOMElement& x) - { - size_type old (v_.size ()); - v_.resize (n, ptr ()); - - if (old < n) - { - for (base_iterator i (v_.begin () + old), e (v_.end ()); - i != e; ++i) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode ( - const_cast<xercesc::DOMElement*> (&x), true))); - *i = p; - } - } - } - - public: - size_type - size () const - { - return v_.size (); - } - - size_type - max_size () const - { - return v_.max_size (); - } - - size_type - capacity () const - { - return v_.capacity (); - } - - bool - empty () const - { - return v_.empty (); - } - - void - reserve (size_type n) - { - v_.reserve (n); - } - - void - clear () - { - v_.clear (); - } - - public: - const_iterator - begin () const - { - return const_iterator (v_.begin ()); - } - - const_iterator - end () const - { - return const_iterator (v_.end ()); - } - - iterator - begin () - { - return iterator (v_.begin ()); - } - - iterator - end () - { - return iterator (v_.end ()); - } - - // reverse - // - - const_reverse_iterator - rbegin () const - { - return const_reverse_iterator (v_.rbegin ()); - } - - const_reverse_iterator - rend () const - { - return const_reverse_iterator (v_.rend ()); - } - - reverse_iterator - rbegin () - { - return reverse_iterator (v_.rbegin ()); - } - - reverse_iterator - rend () - { - return reverse_iterator (v_.rend ()); - } - - public: - xercesc::DOMElement& - operator[] (size_type n) - { - return *(v_[n]); - } - - const xercesc::DOMElement& - operator[] (size_type n) const - { - return *(v_[n]); - } - - xercesc::DOMElement& - at (size_type n) - { - return *(v_.at (n)); - } - - const xercesc::DOMElement& - at (size_type n) const - { - return *(v_.at (n)); - } - - xercesc::DOMElement& - front () - { - return *(v_.front ()); - } - - const xercesc::DOMElement& - front () const - { - return *(v_.front ()); - } - - xercesc::DOMElement& - back () - { - return *(v_.back ()); - } - - const xercesc::DOMElement& - back () const - { - return *(v_.back ()); - } - - public: - // Makes a deep copy. - // - void - push_back (const xercesc::DOMElement& x) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode ( - const_cast<xercesc::DOMElement*> (&x), true))); - - v_.push_back (p); - } - - // Assumes ownership. - // - void - push_back (xercesc::DOMElement* x) - { - assert (x->getOwnerDocument () == &doc_); - v_.push_back (ptr (x)); - } - - void - pop_back () - { - v_.pop_back (); - } - - // Makes a deep copy. - // - iterator - insert (iterator position, const xercesc::DOMElement& x) - { - ptr p (static_cast<xercesc::DOMElement*> ( - doc_.importNode ( - const_cast<xercesc::DOMElement*> (&x), true))); - - return iterator (v_.insert (position.base (), p)); - } - - // Assumes ownership. - // - iterator - insert (iterator position, xercesc::DOMElement* x) - { - assert (x->getOwnerDocument () == &doc_); - return iterator (v_.insert (position.base (), ptr (x))); - } - - void - insert (iterator position, size_type n, const xercesc::DOMElement& x) - { - difference_type d (v_.end () - position.base ()); - v_.insert (position.base (), n, ptr ()); - - for (base_iterator i (v_.end () - d); n != 0; --n) - { - ptr r (static_cast<xercesc::DOMElement*> ( - doc_.importNode ( - const_cast<xercesc::DOMElement*> (&x), true))); - *(--i) = r; - } - } - - template <typename I> - void - insert (iterator position, const I& begin, const I& end) - { - // This is not the fastest way to do it. - // - if (begin != end) - { - base_iterator p (position.base ()); - - for (I i (end);;) - { - --i; - ptr r (static_cast<xercesc::DOMElement*> ( - doc_.importNode (i->get (), true))); - - p = v_.insert (p, r); - - if (i == begin) - break; - } - } - } - - iterator - erase (iterator position) - { - return iterator (v_.erase (position.base ())); - } - - iterator - erase (iterator begin, iterator end) - { - return iterator (v_.erase (begin.base (), end.base ())); - } - - public: - // Note that the DOMDocument object of the two sequences being - // swapped should be the same. - // - void - swap (element_sequence& x) - { - assert (&doc_ == &x.doc_); - v_.swap (x.v_); - } - - private: - base_sequence v_; - xercesc::DOMDocument& doc_; - }; - - // Comparison operators. - // - - inline bool - operator== (const element_sequence& a, const element_sequence& b) - { - if (a.size () != b.size ()) - return false; - - element_sequence::const_iterator - ai (a.begin ()), ae (a.end ()), bi (b.begin ()); - - for (; ai != ae; ++ai, ++bi) - if (!ai->isEqualNode (&(*bi))) - return false; - - return true; - } - - inline bool - operator!= (const element_sequence& a, const element_sequence& b) - { - return !(a == b); - } - - - // Attribute set. - // - - class attribute_set_common - { - protected: - // Set entry. It can either act as a dangerously destructive - // automatic pointer for DOMAttr or as an entry containing the - // name we are searching for. - // - struct entry - { - ~entry () - { - if (a_) - a_->release (); - } - - explicit - entry (xercesc::DOMAttr* a) - : a_ (a), ns_ (0), name_ (0) - { - ns_ = a->getNamespaceURI (); - name_ = ns_ == 0 ? a->getName () : a->getLocalName (); - } - - // Note: uses shallow copy. - // - explicit - entry (const XMLCh* ns, const XMLCh* name) - : a_ (0), ns_ (ns), name_ (name) - { - } - - entry (const entry& y) - : a_ (y.a_), ns_ (y.ns_), name_ (y.name_) - { - // Yes, hostile takeover. - // - y.a_ = 0; - y.ns_ = 0; - y.name_ = 0; - } - - entry& - operator= (const entry& y) - { - if (this != &y) - { - // Yes, hostile takeover. - // - if (a_) - a_->release (); - - a_ = y.a_; - ns_ = y.ns_; - name_ = y.name_; - - y.a_ = 0; - y.ns_ = 0; - y.name_ = 0; - } - - return *this; - } - - public: - xercesc::DOMAttr& - operator* () const - { - return *a_; - } - - xercesc::DOMAttr* - get () const - { - return a_; - } - - const XMLCh* - ns () const - { - return ns_; - } - - const XMLCh* - name () const - { - return name_; - } - - void - release () - { - a_ = 0; - } - - private: - mutable xercesc::DOMAttr* a_; - mutable const XMLCh* ns_; - mutable const XMLCh* name_; - }; - - struct entry_cmp - { - bool - operator() (const entry& a, const entry& b) const - { - using xercesc::XMLString; - - const XMLCh* ans (a.ns ()); - const XMLCh* bns (b.ns ()); - - const XMLCh* an (a.name ()); - const XMLCh* bn (b.name ()); - - if (ans == 0) - return bns != 0 - ? true - : (XMLString::compareString (an, bn) < 0); - - if (ans != 0 && bns == 0) - return false; - - int r (XMLString::compareString (ans, bns)); - - return r < 0 - ? true - : (r > 0 ? false : XMLString::compareString (an, bn) < 0); - } - }; - - typedef std::set<entry, entry_cmp> base_set; - typedef base_set::iterator base_iterator; - typedef base_set::const_iterator base_const_iterator; - }; - - template <typename C> - class attribute_set: public attribute_set_common - { - public: - typedef xercesc::DOMAttr key_type; - typedef xercesc::DOMAttr value_type; - typedef xercesc::DOMAttr* pointer; - typedef const xercesc::DOMAttr* const_pointer; - typedef xercesc::DOMAttr& reference; - typedef const xercesc::DOMAttr& const_reference; - - typedef - iterator_adapter<base_set::iterator, xercesc::DOMAttr> - iterator; - - typedef - iterator_adapter<base_set::const_iterator, const xercesc::DOMAttr> - const_iterator; - - typedef - iterator_adapter<base_set::reverse_iterator, xercesc::DOMAttr> - reverse_iterator; - - typedef - iterator_adapter<base_set::const_reverse_iterator, - const xercesc::DOMAttr> - const_reverse_iterator; - - typedef base_set::size_type size_type; - typedef base_set::difference_type difference_type; - typedef base_set::allocator_type allocator_type; - - public: - attribute_set (xercesc::DOMDocument& doc) - : doc_ (doc) - { - } - - template <typename I> - attribute_set (const I& begin, - const I& end, - xercesc::DOMDocument& doc) - : doc_ (doc) - { - insert (begin, end); - } - - attribute_set (const attribute_set& s, xercesc::DOMDocument& doc) - : doc_ (doc) - { - // Can be done faster with the "hinted" insert. - // - insert (s.begin (), s.end ()); - } - - attribute_set& - operator= (const attribute_set& s) - { - if (this == &s) - return *this; - - // Can be done faster with the "hinted" insert. - // - clear (); - insert (s.begin (), s.end ()); - - return *this; - } - - public: - const_iterator - begin () const - { - return const_iterator (s_.begin ()); - } - - const_iterator - end () const - { - return const_iterator (s_.end ()); - } - - iterator - begin () - { - return iterator (s_.begin ()); - } - - iterator - end () - { - return iterator (s_.end ()); - } - - // reverse - // - - const_reverse_iterator - rbegin () const - { - return const_reverse_iterator (s_.rbegin ()); - } - - const_reverse_iterator - rend () const - { - return const_reverse_iterator (s_.rend ()); - } - - reverse_iterator - rbegin () - { - return reverse_iterator (s_.rbegin ()); - } - - reverse_iterator - rend () - { - return reverse_iterator (s_.rend ()); - } - - public: - size_type - size () const - { - return s_.size (); - } - - size_type - max_size () const - { - return s_.max_size (); - } - - bool - empty () const - { - return s_.empty (); - } - - void - clear () - { - s_.clear (); - } - - public: - // Makes a deep copy. - // - std::pair<iterator, bool> - insert (const xercesc::DOMAttr& a) - { - entry e (static_cast<xercesc::DOMAttr*> ( - doc_.importNode ( - const_cast<xercesc::DOMAttr*> (&a), true))); - - std::pair<base_iterator, bool> r (s_.insert (e)); - - return std::pair<iterator, bool> (iterator (r.first), r.second); - } - - // Assumes ownership. - // - std::pair<iterator, bool> - insert (xercesc::DOMAttr* a) - { - assert (a->getOwnerDocument () == &doc_); - entry e (a); - std::pair<base_iterator, bool> r (s_.insert (e)); - - if (!r.second) - e.release (); // Detach the attribute of insert failed. - - return std::pair<iterator, bool> (iterator (r.first), r.second); - } - - // Makes a deep copy. - // - iterator - insert (iterator position, const xercesc::DOMAttr& a) - { - entry e (static_cast<xercesc::DOMAttr*> ( - doc_.importNode ( - const_cast<xercesc::DOMAttr*> (&a), true))); - - return iterator (s_.insert (position.base (), e)); - } - - // Assumes ownership. - // - iterator - insert (iterator position, xercesc::DOMAttr* a) - { - assert (a->getOwnerDocument () == &doc_); - entry e (a); - base_iterator r (s_.insert (position.base (), e)); - - if (r->get () != a) - e.release (); // Detach the attribute of insert failed. - - return iterator (r); - } - - template <typename I> - void - insert (const I& begin, const I& end) - { - for (I i (begin); i != end; ++i) - { - entry e (static_cast<xercesc::DOMAttr*> ( - doc_.importNode ( - const_cast<xercesc::DOMAttr*> (&(*i)), true))); - - s_.insert (e); - } - } - - public: - void - erase (iterator position) - { - s_.erase (position.base ()); - } - - size_type - erase (const std::basic_string<C>& name) - { - return s_.erase (entry (0, xml::string (name).c_str ())); - } - - size_type - erase (const std::basic_string<C>& namespace_, - const std::basic_string<C>& name) - { - return s_.erase (entry (xml::string (namespace_).c_str (), - xml::string (name).c_str ())); - } - - size_type - erase (const XMLCh* name) - { - return s_.erase (entry (0, name)); - } - - size_type - erase (const XMLCh* namespace_, const XMLCh* name) - { - return s_.erase (entry (namespace_, name)); - } - - void - erase (iterator begin, iterator end) - { - s_.erase (begin.base (), end.base ()); - } - - public: - size_type - count (const std::basic_string<C>& name) const - { - return s_.count (entry (0, xml::string (name).c_str ())); - } - - size_type - count (const std::basic_string<C>& namespace_, - const std::basic_string<C>& name) const - { - return s_.count (entry (xml::string (namespace_).c_str (), - xml::string (name).c_str ())); - } - - size_type - count (const XMLCh* name) const - { - return s_.count (entry (0, name)); - } - - size_type - count (const XMLCh* namespace_, const XMLCh* name) const - { - return s_.count (entry (namespace_, name)); - } - - // find - // - - iterator - find (const std::basic_string<C>& name) - { - return iterator (s_.find (entry (0, xml::string (name).c_str ()))); - } - - iterator - find (const std::basic_string<C>& namespace_, - const std::basic_string<C>& name) - { - return iterator ( - s_.find (entry (xml::string (namespace_).c_str (), - xml::string (name).c_str ()))); - } - - iterator - find (const XMLCh* name) - { - return iterator (s_.find (entry (0, name))); - } - - iterator - find (const XMLCh* namespace_, const XMLCh* name) - { - return iterator (s_.find (entry (namespace_, name))); - } - - const_iterator - find (const std::basic_string<C>& name) const - { - return const_iterator ( - s_.find (entry (0, xml::string (name).c_str ()))); - } - - const_iterator - find (const std::basic_string<C>& namespace_, - const std::basic_string<C>& name) const - { - return const_iterator ( - s_.find (entry (xml::string (namespace_).c_str (), - xml::string (name).c_str ()))); - } - - const_iterator - find (const XMLCh* name) const - { - return const_iterator (s_.find (entry (0, name))); - } - - const_iterator - find (const XMLCh* namespace_, const XMLCh* name) const - { - return const_iterator (s_.find (entry (namespace_, name))); - } - - public: - // Note that the DOMDocument object of the two sets being - // swapped should be the same. - // - void - swap (attribute_set& x) - { - assert (&doc_ == &x.doc_); - s_.swap (x.s_); - } - - private: - base_set s_; - xercesc::DOMDocument& doc_; - }; - - // Comparison operators. - // - - template <typename C> - inline bool - operator== (const attribute_set<C>& a, const attribute_set<C>& b) - { - if (a.size () != b.size ()) - return false; - - typename attribute_set<C>::const_iterator - ai (a.begin ()), ae (a.end ()), bi (b.begin ()); - - for (; ai != ae; ++ai, ++bi) - if (!ai->isEqualNode (&(*bi))) - return false; - - return true; - } - - template <typename C> - inline bool - operator!= (const attribute_set<C>& a, const attribute_set<C>& b) - { - return !(a == b); - } - } - } -} - -#endif // XSD_CXX_TREE_CONTAINERS_WILDCARD_HXX diff --git a/libxsd/xsd/cxx/tree/containers.hxx b/libxsd/xsd/cxx/tree/containers.hxx deleted file mode 100644 index f6a24ff..0000000 --- a/libxsd/xsd/cxx/tree/containers.hxx +++ /dev/null @@ -1,1200 +0,0 @@ -// file : xsd/cxx/tree/containers.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_CONTAINERS_HXX -#define XSD_CXX_TREE_CONTAINERS_HXX - -#include <vector> -#include <memory> // std::auto_ptr/unique_ptr -#include <algorithm> // std::equal, std::lexicographical_compare -#include <iosfwd> - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/iterator-adapter.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Test whether T is a fundamental C++ type. - // - - template <typename T> - struct fundamental_p - { - static const bool r = false; - }; - - // byte - // - template <> - struct fundamental_p<signed char> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<unsigned char> - { - static const bool r = true; - }; - - // short - // - template <> - struct fundamental_p<short> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<unsigned short> - { - static const bool r = true; - }; - - // int - // - template <> - struct fundamental_p<int> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<unsigned int> - { - static const bool r = true; - }; - - // long - // - template <> - struct fundamental_p<long> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<unsigned long> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<long long> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<unsigned long long> - { - static const bool r = true; - }; - - // bool - // - template <> - struct fundamental_p<bool> - { - static const bool r = true; - }; - - // float - // - template <> - struct fundamental_p<float> - { - static const bool r = true; - }; - - template <> - struct fundamental_p<double> - { - static const bool r = true; - }; - - // one (for internal use only) - // - template <typename T, bool fund = fundamental_p<T>::r> - class one; - - template <typename T> - class one<T, false> - { - public: - typedef T value_type; - - ~one (); - one (container*); - one (const T&, container*); - one (XSD_AUTO_PTR<T>, container*); - one (const one&, flags, container*); - - one& - operator= (const one&); - - public: - const T& - get () const - { - return *x_; - } - - T& - get () - { - return *x_; - } - - void - set (const T& x) - { - set (x, 0); - } - - void - set (XSD_AUTO_PTR<T>); - - bool - present () const - { - return x_ != 0; - } - - XSD_AUTO_PTR<T> - detach () - { - T* x (x_); - x->_container (0); - x_ = 0; - return XSD_AUTO_PTR<T> (x); - } - - protected: - void - set (const T&, flags); - - protected: - T* x_; - container* container_; - }; - - - template <typename T> - class one<T, true> - { - public: - typedef T value_type; - - one (container*): present_ (false) {} - one (const T& x, container*) : x_ (x), present_ (true) {} - one (const one& x, flags, container*) - : x_ (x.x_), present_ (x.present_) - { - } - - one& - operator= (const one& x) - { - if (this == &x) - return *this; - - x_ = x.x_; - present_ = x.present_; - - return *this; - } - - public: - const T& - get () const - { - return x_; - } - - T& - get () - { - return x_; - } - - void - set (const T& x) - { - x_ = x; - present_ = true; - } - - bool - present () const - { - return present_; - } - - protected: - T x_; - bool present_; - }; - - template <typename T, bool fund = fundamental_p<T>::r> - class optional; - - template <typename T> - class optional<T, false> - { - public: - typedef T value_type; - - ~optional (); - - explicit - optional (container* = 0); - - explicit - optional (const T&, container* = 0); - - explicit - optional (XSD_AUTO_PTR<T>, container* = 0); - - optional (const optional&, flags = 0, container* = 0); - - optional& - operator= (const T&); - - optional& - operator= (const optional&); - - // Pointer-like interface. - // - public: - const T* - operator-> () const - { - return x_; - } - - T* - operator-> () - { - return x_; - } - - const T& - operator* () const - { - return *x_; - } - - T& - operator* () - { - return *x_; - } - - typedef optional self_; // Simplifier for Sun C++ 5.7. - typedef void (self_::*bool_convertible) (); - - operator bool_convertible () const - { - return x_ != 0 ? &self_::true_ : 0; - } - - // Get/set interface. - // - public: - bool - present () const - { - return x_ != 0; - } - - const T& - get () const - { - return *x_; - } - - T& - get () - { - return *x_; - } - - void - set (const T& x) - { - set (x, 0); - } - - void - set (XSD_AUTO_PTR<T>); - - void - reset (); - - XSD_AUTO_PTR<T> - detach () - { - T* x (x_); - x->_container (0); - x_ = 0; - return XSD_AUTO_PTR<T> (x); - } - - protected: - void - set (const T&, flags); - - void - true_ (); - - protected: - T* x_; - container* container_; - }; - - - // - // - template <typename T> - class optional<T, true> - { - public: - typedef T value_type; - - explicit - optional (container* = 0) : present_ (false) {} - - explicit - optional (const T&, container* = 0); - - optional (const optional&, flags = 0, container* = 0); - - optional& - operator= (const T&); - - optional& - operator= (const optional&); - - // Pointer-like interface. - // - public: - const T* - operator-> () const - { - return &x_; - } - - T* - operator-> () - { - return &x_; - } - - const T& - operator* () const - { - return get (); - } - - T& - operator* () - { - return get (); - } - - typedef optional self_; // Simplifier for Sun C++ 5.7. - typedef void (self_::*bool_convertible) (); - - operator bool_convertible () const - { - return present () ? &self_::true_ : 0; - } - - // Get/set interface. - // - public: - bool - present () const - { - return present_; - } - - const T& - get () const - { - return x_; - } - - T& - get () - { - return x_; - } - - void - set (const T& y) - { - x_ = y; - present_ = true; - } - - void - reset () - { - present_ = false; - } - - private: - void - true_ (); - - private: - bool present_; - T x_; - }; - - // Comparison operators. - // - - template <typename T, bool fund> - inline bool - operator== (const optional<T, fund>& a, const optional<T, fund>& b) - { - return !a || !b ? a.present () == b.present () : *a == *b; - } - - template <typename T, bool fund> - inline bool - operator!= (const optional<T, fund>& a, const optional<T, fund>& b) - { - return !(a == b); - } - - template <typename T, bool fund> - inline bool - operator< (const optional<T, fund>& a, const optional<T, fund>& b) - { - return a && (!b || *a < *b); - } - - template <typename T, bool fund> - inline bool - operator> (const optional<T, fund>& a, const optional<T, fund>& b) - { - return b < a; - } - - template <typename T, bool fund> - inline bool - operator<= (const optional<T, fund>& a, const optional<T, fund>& b) - { - return !(a > b); - } - - template <typename T, bool fund> - inline bool - operator>= (const optional<T, fund>& a, const optional<T, fund>& b) - { - return !(a < b); - } - - // Provide an ostream insertion operator to prevent confusion from - // the implicit bool conversion. - // - template <typename C, typename T, bool fund> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>&, const optional<T, fund>&); - - - // Sequence. - // - template <typename T, bool fund = fundamental_p<T>::r> - class sequence; - - // - // - class sequence_common - { - protected: - // This is a dangerously destructive automatic pointer. We are going - // to use it in a controlled environment to save us a lot of coding. - // - struct ptr - { - ~ptr () - { - delete x_; - } - - explicit - ptr (type* x = 0) - : x_ (x) - { - } - - ptr (const ptr& y) - : x_ (y.x_) - { - // Yes, hostile takeover. - // - y.x_ = 0; - } - - ptr& - operator= (const ptr& y) - { - if (this != &y) - { - // Yes, hostile takeover. - // - delete x_; - x_ = y.x_; - y.x_ = 0; - } - - return *this; - } - - public: - type& - operator* () const - { - return *x_; - } - - type* - operator-> () const - { - return x_; - } - - type* - get () const - { - return x_; - } - - type* - release () - { - type* x (x_); - x_ = 0; - return x; - } - - private: - mutable type* x_; - }; - - protected: - typedef std::vector<ptr> base_sequence; - typedef base_sequence::iterator base_iterator; - typedef base_sequence::const_iterator base_const_iterator; - - typedef base_sequence::size_type size_type; - typedef base_sequence::difference_type difference_type; - typedef base_sequence::allocator_type allocator_type; - - protected: - sequence_common (container* c) - : container_ (c) - { - } - - sequence_common (size_type n, const type& x, container* c) - : container_ (c) - { - assign (n, x); - } - - template <typename I> - sequence_common (const I& begin, const I& end, container* c) - : container_ (c) - { - assign (begin, end); - } - - sequence_common (const sequence_common& v, flags f, container* c) - : container_ (c) - { - v_.reserve (v.v_.size ()); - - for (base_const_iterator i (v.v_.begin ()), e (v.v_.end ()); - i != e; ++i) - { - ptr p ((**i)._clone (f, container_)); - v_.push_back (p); - } - } - - public: - sequence_common& - operator= (const sequence_common& v) - { - if (this == &v) - return *this; - - v_.assign (v.v_.size (), ptr ()); - - base_iterator di (v_.begin ()), de (v_.end ()); - base_const_iterator si (v.v_.begin ()), se (v.v_.end ()); - - for (; si != se && di != de; ++si, ++di) - { - // We have no ptr_ref. - // - ptr p ((**si)._clone (0, container_)); - *di = p; - } - - return *this; - } - - public: - size_type - size () const - { - return v_.size (); - } - - size_type - max_size () const - { - return v_.max_size (); - } - - size_type - capacity () const - { - return v_.capacity (); - } - - bool - empty () const - { - return v_.empty (); - } - - void - reserve (size_type n) - { - v_.reserve (n); - } - - void - clear () - { - v_.clear (); - } - - protected: - void - assign (size_type n, const type& x) - { - v_.assign (n, ptr ()); - - for (base_iterator i (v_.begin ()), e (v_.end ()); i != e; ++i) - { - ptr p (x._clone (0, container_)); - *i = p; - } - } - - template <typename I> - void - assign (const I& begin, const I& end) - { - // This is not the fastest way to do it. Also I's type may not - // have _clone. - // - v_.clear (); - - for (I i (begin); i != end; ++i) - { - ptr p (i->_clone (0, container_)); - v_.push_back (p); - } - } - - void - resize (size_type n, const type& x) - { - size_type old (v_.size ()); - v_.resize (n, ptr ()); - - if (old < n) - { - for (base_iterator i (v_.begin () + old), e (v_.end ()); - i != e; ++i) - { - ptr p (x._clone (0, container_)); - *i = p; - } - } - } - - void - insert (base_iterator p, size_type n, const type& x) - { - difference_type d (v_.end () - p); - v_.insert (p, n, ptr ()); - - for (base_iterator i (v_.end () - d); n != 0; --n) - { - ptr r (x._clone (0, container_)); - *(--i) = r; - } - } - - template <typename I> - void - insert (base_iterator p, const I& begin, const I& end) - { - // This is not the fastest way to do it. Also I's type may not - // have _clone. - // - if (begin != end) - { - for (I i (end);;) - { - --i; - ptr r (i->_clone (0, container_)); - p = v_.insert (p, r); - - if (i == begin) - break; - } - } - } - - protected: - container* container_; - base_sequence v_; - }; - - // - // - template <typename T> - class sequence<T, false>: public sequence_common - { - protected: - // For IBM XL C++ 8.0. - // - typedef sequence_common::ptr ptr; - - public: - typedef T value_type; - typedef T* pointer; - typedef const T* const_pointer; - typedef T& reference; - typedef const T& const_reference; - - typedef - iterator_adapter<base_sequence::iterator, T> - iterator; - - typedef - iterator_adapter<base_sequence::const_iterator, const T> - const_iterator; - - typedef - iterator_adapter<base_sequence::reverse_iterator, T> - reverse_iterator; - - typedef - iterator_adapter<base_sequence::const_reverse_iterator, const T> - const_reverse_iterator; - - typedef sequence_common::size_type size_type; - typedef sequence_common::difference_type difference_type; - typedef sequence_common::allocator_type allocator_type; - - public: - explicit - sequence (container* c = 0) - : sequence_common (c) - { - } - - // The first version causes trouble on IBM XL C++ 7.0 when - // a type does not have the default c-tor. While the second - // breaks VC++ 8.0 when using dllexport (it appears to - // instantiate everything instead of only what's used). - // -#ifdef _MSC_VER - explicit - sequence (size_type n, const T& x = T (), container* c = 0) - : sequence_common (n, x, c) - { - } -#else - explicit - sequence (size_type n, container* c = 0) - : sequence_common (n, T (), c) - { - } - - sequence (size_type n, const T& x, container* c = 0) - : sequence_common (n, x, c) - { - } -#endif - - template <typename I> - sequence (const I& begin, const I& end, container* c = 0) - : sequence_common (begin, end, c) - { - } - - sequence (const sequence& v, flags f = 0, container* c = 0) - : sequence_common (v, f, c) - { - } - - public: - void - assign (size_type n, const T& x) - { - sequence_common::assign (n, x); - } - - template <typename I> - void - assign (const I& begin, const I& end) - { - sequence_common::assign (begin, end); - } - - public: - // The first version causes trouble on IBM XL C++ 7.0 when - // a type does not have the default c-tor. While the second - // breaks VC++ 8.0 when using dllexport (it appears to - // instantiate everything instead of only what's used). - // -#ifdef _MSC_VER - void - resize (size_type n, const T& x = T ()) - { - sequence_common::resize (n, x); - } -#else - void - resize (size_type n) - { - sequence_common::resize (n, T ()); - } - - void - resize (size_type n, const T& x) - { - sequence_common::resize (n, x); - } -#endif - - public: - const_iterator - begin () const - { - return const_iterator (v_.begin ()); - } - - const_iterator - end () const - { - return const_iterator (v_.end ()); - } - - iterator - begin () - { - return iterator (v_.begin ()); - } - - iterator - end () - { - return iterator (v_.end ()); - } - - // reverse - // - - const_reverse_iterator - rbegin () const - { - return const_reverse_iterator (v_.rbegin ()); - } - - const_reverse_iterator - rend () const - { - return const_reverse_iterator (v_.rend ()); - } - - reverse_iterator - rbegin () - { - return reverse_iterator (v_.rbegin ()); - } - - reverse_iterator - rend () - { - return reverse_iterator (v_.rend ()); - } - - public: - T& - operator[] (size_type n) - { - return static_cast<T&> (*(v_[n])); - } - - const T& - operator[] (size_type n) const - { - return static_cast<const T&> (*(v_[n])); - } - - T& - at (size_type n) - { - return static_cast<T&> (*(v_.at (n))); - } - - const T& - at (size_type n) const - { - return static_cast<const T&> (*(v_.at (n))); - } - - T& - front () - { - return static_cast<T&> (*(v_.front ())); - } - - const T& - front () const - { - return static_cast<const T&> (*(v_.front ())); - } - - T& - back () - { - return static_cast<T&> (*(v_.back ())); - } - - const T& - back () const - { - return static_cast<const T&> (*(v_.back ())); - } - - public: - void - push_back (const T& x) - { - v_.push_back (ptr (x._clone (0, container_))); - } - - void - push_back (XSD_AUTO_PTR<T> x) - { - if (x->_container () != container_) - x->_container (container_); - - v_.push_back (ptr (x.release ())); - } - - void - pop_back () - { - v_.pop_back (); - } - - XSD_AUTO_PTR<T> - detach_back (bool pop = true) - { - ptr& p (v_.back ()); - p->_container (0); - T* x (static_cast<T*> (p.release ())); - - if (pop) - v_.pop_back (); - - return XSD_AUTO_PTR<T> (x); - } - - iterator - insert (iterator position, const T& x) - { - return iterator ( - v_.insert ( - position.base (), ptr (x._clone (0, container_)))); - } - - iterator - insert (iterator position, XSD_AUTO_PTR<T> x) - { - if (x->_container () != container_) - x->_container (container_); - - return iterator (v_.insert (position.base (), ptr (x.release ()))); - } - - void - insert (iterator position, size_type n, const T& x) - { - sequence_common::insert (position.base (), n, x); - } - - template <typename I> - void - insert (iterator position, const I& begin, const I& end) - { - sequence_common::insert (position.base (), begin, end); - } - - iterator - erase (iterator position) - { - return iterator (v_.erase (position.base ())); - } - - iterator - erase (iterator begin, iterator end) - { - return iterator (v_.erase (begin.base (), end.base ())); - } - - iterator - detach (iterator position, XSD_AUTO_PTR<T>& r, bool erase = true) - { - ptr& p (*position.base ()); - p->_container (0); - r.reset (static_cast<T*> (p.release ())); - - if (erase) - return iterator (v_.erase (position.base ())); - else - return ++position; - } - - // Note that the container object of the two sequences being - // swapped should be the same. - // - void - swap (sequence& x) - { - assert (container_ == x.container_); - v_.swap (x.v_); - } - }; - - - // Specialization for fundamental types. - // - template <typename T> - class sequence<T, true>: public std::vector<T> - { - typedef std::vector<T> base_sequence; - - public: - explicit - sequence (container* = 0) - { - } - - explicit - sequence (typename base_sequence::size_type n, - const T& x = T (), - container* = 0) - : base_sequence (n, x) - { - } - - template <typename I> - sequence (const I& begin, const I& end, container* = 0) - : base_sequence (begin, end) - { - } - - sequence (const sequence& s, flags = 0, container* = 0) - : base_sequence (s) - { - } - }; - - - // Comparison operators. - // - - template <typename T, bool fund> - inline bool - operator== (const sequence<T, fund>& a, const sequence<T, fund>& b) - { - return (a.size () == b.size () - && std::equal (a.begin (), a.end (), b.begin ())); - } - - template <typename T, bool fund> - inline bool - operator!= (const sequence<T, fund>& a, const sequence<T, fund>& b) - { - return !(a == b); - } - - template <typename T, bool fund> - inline bool - operator< (const sequence<T, fund>& a, const sequence<T, fund>& b) - { - return std::lexicographical_compare (a.begin (), a.end (), - b.begin (), b.end ()); - } - - template <typename T, bool fund> - inline bool - operator> (const sequence<T, fund>& a, const sequence<T, fund>& b) - { - return b < a; - } - - template <typename T, bool fund> - inline bool - operator<= (const sequence<T, fund>& a, const sequence<T, fund>& b) - { - return !(a > b); - } - - template <typename T, bool fund> - inline bool - operator>= (const sequence<T, fund>& a, const sequence<T, fund>& b) - { - return !(a < b); - } - - // Note that the container object of the two sequences being - // swapped should be the same. - // - template <typename T, bool fund> - inline void - swap (sequence<T, fund>& x, sequence<T, fund>& y) - { - x.swap (y); - } - } - } -} - -#include <xsd/cxx/tree/containers.txx> - -#endif // XSD_CXX_TREE_CONTAINERS_HXX diff --git a/libxsd/xsd/cxx/tree/containers.txx b/libxsd/xsd/cxx/tree/containers.txx deleted file mode 100644 index 11f52a1..0000000 --- a/libxsd/xsd/cxx/tree/containers.txx +++ /dev/null @@ -1,295 +0,0 @@ -// file : xsd/cxx/tree/containers.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <ostream> - -#ifdef XSD_CXX11 -# include <utility> // std::move -#endif - -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // one - // - template<typename T> - one<T, false>:: - ~one () - { - delete x_; - } - - template<typename T> - one<T, false>:: - one (container* c) - : x_ (0), container_ (c) - { - } - - template<typename T> - one<T, false>:: - one (const T& x, container* c) - : x_ (0), container_ (c) - { - set (x); - } - - template<typename T> - one<T, false>:: - one (XSD_AUTO_PTR<T> x, container* c) - : x_ (0), container_ (c) - { -#ifdef XSD_CXX11 - set (std::move (x)); -#else - set (x); -#endif - } - - template<typename T> - one<T, false>:: - one (const one<T, false>& x, flags f, container* c) - : x_ (0), container_ (c) - { - if (x.present ()) - set (x.get (), f); - } - - template<typename T> - one<T, false>& one<T, false>:: - operator= (const one<T, false>& x) - { - if (this == &x) - return *this; - - if (x.present ()) - set (x.get ()); - else - { - delete x_; - x_ = 0; - } - - return *this; - } - - template<typename T> - void one<T, false>:: - set (const T& x, flags f) - { - // We always do a fresh copy because T may not be x's - // dynamic type. - // - T* r (x._clone (f, container_)); - - delete x_; - x_ = r; - } - - template<typename T> - void one<T, false>:: - set (XSD_AUTO_PTR<T> x) - { - T* r (0); - - if (x.get () != 0) - { - if (x->_container () != container_) - x->_container (container_); - - r = x.release (); - } - - delete x_; - x_ = r; - } - - // optional - // - template <typename T> - optional<T, false>:: - ~optional () - { - delete x_; - } - - template <typename T> - optional<T, false>:: - optional (container* c) - : x_ (0), container_ (c) - { - } - - template <typename T> - optional<T, false>:: - optional (const T& x, container* c) - : x_ (0), container_ (c) - { - set (x); - } - - template <typename T> - optional<T, false>:: - optional (XSD_AUTO_PTR<T> x, container* c) - : x_ (0), container_ (c) - { -#ifdef XSD_CXX11 - set (std::move (x)); -#else - set (x); -#endif - } - - template <typename T> - optional<T, false>:: - optional (const optional<T, false>& x, flags f, container* c) - : x_ (0), container_ (c) - { - if (x) - set (*x, f); - } - - template <typename T> - optional<T, false>& optional<T, false>:: - operator= (const T& x) - { - if (x_ == &x) - return *this; - - set (x); - - return *this; - } - - template <typename T> - optional<T, false>& optional<T, false>:: - operator= (const optional<T, false>& x) - { - if (this == &x) - return *this; - - if (x) - set (*x); - else - reset (); - - return *this; - } - - template <typename T> - void optional<T, false>:: - set (const T& x, flags f) - { - // We always do a fresh copy because T may not be x's - // dynamic type. - // - T* r (x._clone (f, container_)); - - delete x_; - x_ = r; - } - - template <typename T> - void optional<T, false>:: - set (XSD_AUTO_PTR<T> x) - { - T* r (0); - - if (x.get () != 0) - { - if (x->_container () != container_) - x->_container (container_); - - r = x.release (); - } - - delete x_; - x_ = r; - } - - template <typename T> - void optional<T, false>:: - reset () - { - delete x_; - x_ = 0; - } - - template <typename T> - void optional<T, false>:: - true_ () - { - } - - - // optional - // - template <typename T> - optional<T, true>:: - optional (const T& y, container*) - : present_ (false) - { - set (y); - } - - template <typename T> - optional<T, true>:: - optional (const optional<T, true>& y, flags, container*) - : present_ (false) - { - if (y) - set (*y); - } - - template <typename T> - optional<T, true>& optional<T, true>:: - operator= (const T& y) - { - if (&x_ == &y) - return *this; - - set (y); - - return *this; - } - - template <typename T> - optional<T, true>& optional<T, true>:: - operator= (const optional<T, true>& y) - { - if (this == &y) - return *this; - - if (y) - set (*y); - else - reset (); - - return *this; - } - - template <typename T> - void optional<T, true>:: - true_ () - { - } - - template <typename C, typename T, bool fund> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const optional<T, fund>& x) - { - if (x) - os << *x; - else - os << bits::not_present<C> (); - - return os; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/date-time-extraction.txx b/libxsd/xsd/cxx/tree/date-time-extraction.txx deleted file mode 100644 index c23c953..0000000 --- a/libxsd/xsd/cxx/tree/date-time-extraction.txx +++ /dev/null @@ -1,155 +0,0 @@ -// file : xsd/cxx/tree/date-time-extraction.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // time_zone - // - template <typename S> - inline void time_zone:: - zone_extract (istream<S>& s) - { - s >> hours_ >> minutes_; - present_ = true; - } - - // gday - // - template <typename C, typename B> - template <typename S> - gday<C, B>:: - gday (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> day_ >> zp; - - if (zp) - zone_extract (s); - } - - // gmonth - // - template <typename C, typename B> - template <typename S> - gmonth<C, B>:: - gmonth (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> month_ >> zp; - - if (zp) - zone_extract (s); - } - - // gyear - // - template <typename C, typename B> - template <typename S> - gyear<C, B>:: - gyear (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> year_ >> zp; - - if (zp) - zone_extract (s); - } - - // gmonth_day - // - template <typename C, typename B> - template <typename S> - gmonth_day<C, B>:: - gmonth_day (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> month_ >> day_ >> zp; - - if (zp) - zone_extract (s); - } - - // gyear_month - // - template <typename C, typename B> - template <typename S> - gyear_month<C, B>:: - gyear_month (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> year_ >> month_ >> zp; - - if (zp) - zone_extract (s); - } - - // date - // - template <typename C, typename B> - template <typename S> - date<C, B>:: - date (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> year_ >> month_ >> day_ >> zp; - - if (zp) - zone_extract (s); - } - - // time - // - template <typename C, typename B> - template <typename S> - time<C, B>:: - time (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> hours_ >> minutes_ >> seconds_ >> zp; - - if (zp) - zone_extract (s); - } - - // date_time - // - template <typename C, typename B> - template <typename S> - date_time<C, B>:: - date_time (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - bool zp; - s >> year_ >> month_ >> day_ - >> hours_ >> minutes_ >> seconds_ >> zp; - - if (zp) - zone_extract (s); - } - - // duration - // - template <typename C, typename B> - template <typename S> - duration<C, B>:: - duration (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - s >> negative_ - >> years_ >> months_ >> days_ - >> hours_ >> minutes_ >> seconds_; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/date-time-insertion.txx b/libxsd/xsd/cxx/tree/date-time-insertion.txx deleted file mode 100644 index 3a54cf8..0000000 --- a/libxsd/xsd/cxx/tree/date-time-insertion.txx +++ /dev/null @@ -1,186 +0,0 @@ -// file : xsd/cxx/tree/date-time-insertion.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // time_zone - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, const time_zone& z) - { - return s << z.zone_hours () << z.zone_minutes (); - } - - // gday - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const gday<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.day () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // gmonth - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const gmonth<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.month () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // gyear - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const gyear<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.year () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // gmonth_day - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const gmonth_day<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.month () << x.day () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // gyear_month - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const gyear_month<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.year () << x.month () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // date - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const date<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.year () << x.month () << x.day () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // time - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const time<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.hours () << x.minutes () << x.seconds () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // date_time - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const date_time<C, B>& x) - { - bool zp (x.zone_present ()); - - s << x.year () << x.month () << x.day () - << x.hours () << x.minutes () << x.seconds () << zp; - - if (zp) - { - const time_zone& z (x); - s << z; - } - - return s; - } - - // duration - // - template <typename S, typename C, typename B> - ostream<S>& - operator<< (ostream<S>& s, const duration<C, B>& x) - { - s << x.negative () - << x.years () << x.months () << x.days () - << x.hours () << x.minutes () << x.seconds (); - - return s; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/date-time-ostream.txx b/libxsd/xsd/cxx/tree/date-time-ostream.txx deleted file mode 100644 index e1f1763..0000000 --- a/libxsd/xsd/cxx/tree/date-time-ostream.txx +++ /dev/null @@ -1,322 +0,0 @@ -// file : xsd/cxx/tree/date-time-ostream.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <ostream> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // time_zone - // - template <typename C> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const time_zone& z) - { - short h = z.zone_hours (); - short m = z.zone_minutes (); - - if (h == 0 && m == 0) - { - os << C ('Z'); - } - else - { - if (h < 0 || m < 0) - { - h = -h; - m = -m; - os << C ('-'); - } - else - os << C ('+'); - - C f (os.fill (C ('0'))); - - os.width (2); - os << h << C (':'); - os.width (2); - os << m; - - os.fill (f); - } - - return os; - } - - // gday - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const gday<C, B>& x) - { - C f (os.fill (C ('0'))); - os.width (2); - os << x.day (); - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // gmonth - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const gmonth<C, B>& x) - { - C f (os.fill (C ('0'))); - os.width (2); - os << x.month (); - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // gyear - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const gyear<C, B>& x) - { - C f (os.fill (C ('0'))); - os.width (4); - os << x.year (); - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // gmonth_day - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const gmonth_day<C, B>& x) - { - C f (os.fill (C ('0'))); - - os.width (2); - os << x.month () << C ('-'); - - os.width (2); - os << x.day (); - - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - - // gyear_month - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const gyear_month<C, B>& x) - { - C f (os.fill (C ('0'))); - - os.width (4); - os << x.year () << C ('-'); - - os.width (2); - os << x.month (); - - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // date - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const date<C, B>& x) - { - C f (os.fill (C ('0'))); - - os.width (4); - os << x.year () << C ('-'); - - os.width (2); - os << x.month () << C ('-'); - - os.width (2); - os << x.day (); - - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // time - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const time<C, B>& x) - { - C f (os.fill (C ('0'))); - - os.width (2); - os << x.hours () << C (':'); - - os.width (2); - os << x.minutes () << C (':'); - - os.width (9); - std::ios_base::fmtflags ff ( - os.setf (std::ios::fixed, std::ios::floatfield)); - os << x.seconds (); - os.setf (ff, std::ios::floatfield); - - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // date_time - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const date_time<C, B>& x) - { - C f (os.fill (C ('0'))); - - os.width (4); - os << x.year () << C ('-'); - - os.width (2); - os << x.month () << C ('-'); - - os.width (2); - os << x.day () << C ('T'); - - os.width (2); - os << x.hours () << C (':'); - - os.width (2); - os << x.minutes () << C (':'); - - os.width (9); - std::ios_base::fmtflags ff ( - os.setf (std::ios::fixed, std::ios::floatfield)); - os << x.seconds (); - os.setf (ff, std::ios::floatfield); - - os.fill (f); - - if (x.zone_present ()) - { - const time_zone& z (x); - os << z; - } - - return os; - } - - // duration - // - template <typename C, typename B> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const duration<C, B>& x) - { - if (x.negative ()) - os << C ('-'); - - os << C ('P'); - - // In case it is 0-duration, use the years field to handle - // this case. - // - if (x.years () != 0 || - (x.months () == 0 && - x.days () == 0 && - x.hours () == 0 && - x.minutes () == 0 && - x.seconds () == 0.0)) - { - os << x.years () << C ('Y'); - } - - if (x.months () != 0) - { - os << x.months () << C ('M'); - } - - if (x.days () != 0) - { - os << x.days () << C ('D'); - } - - // Figure out if we need the 'T' delimiter. - // - if (x.hours () != 0 || - x.minutes () != 0 || - x.seconds () != 0.0) - os << C ('T'); - - if (x.hours () != 0) - { - os << x.hours () << C ('H'); - } - - if (x.minutes () != 0) - { - os << x.minutes () << C ('M'); - } - - if (x.seconds () > 0.0) - { - std::ios_base::fmtflags ff ( - os.setf (std::ios::fixed, std::ios::floatfield)); - os << x.seconds () << C ('S'); - os.setf (ff, std::ios::floatfield); - } - - return os; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/date-time.hxx b/libxsd/xsd/cxx/tree/date-time.hxx deleted file mode 100644 index eb9efce..0000000 --- a/libxsd/xsd/cxx/tree/date-time.hxx +++ /dev/null @@ -1,1949 +0,0 @@ -// file : xsd/cxx/tree/date-time.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -/** - * @file - * - * @brief Contains C++ class definitions for the XML Schema date/time types. - * - * This is an internal header and is included by the generated code. You - * normally should not include it directly. - * - */ - -#ifndef XSD_CXX_TREE_DATE_TIME_HXX -#define XSD_CXX_TREE_DATE_TIME_HXX - -#include <string> -#include <cstddef> // std::size_t - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/istream-fwd.hxx> - -namespace xsd -{ - namespace cxx - { - /** - * @brief C++/Tree mapping runtime namespace. - * - * This is an internal namespace and normally should not be referenced - * directly. Instead you should use the aliases for types in this - * namespaces that are created in the generated code. - * - */ - namespace tree - { - /** - * @brief Time zone representation - * - * The %time_zone class represents an optional %time zone and - * is used as a base class for date/time types. - * - * The %time zone can negative in which case both the hours and - * minutes components should be negative. - * - * @nosubgrouping - */ - class time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor. - * - * This constructor initializes the instance to the 'not specified' - * state. - */ - time_zone (); - - /** - * @brief Initialize an instance with the hours and minutes - * components. - * - * @param hours The %time zone hours component. - * @param minutes The %time zone minutes component. - */ - time_zone (short hours, short minutes); - - //@} - - /** - * @brief Determine if %time zone is specified. - * - * @return True if %time zone is specified, false otherwise. - */ - bool - zone_present () const; - - /** - * @brief Reset the %time zone to the 'not specified' state. - * - */ - void - zone_reset (); - - /** - * @brief Get the hours component of the %time zone. - * - * @return The hours component of the %time zone. - */ - short - zone_hours () const; - - /** - * @brief Set the hours component of the %time zone. - * - * @param h The new hours component. - */ - void - zone_hours (short h); - - - /** - * @brief Get the minutes component of the %time zone. - * - * @return The minutes component of the %time zone. - */ - short - zone_minutes () const; - - /** - * @brief Set the minutes component of the %time zone. - * - * @param m The new minutes component. - */ - void - zone_minutes (short m); - - protected: - //@cond - - template <typename C> - void - zone_parse (const C*, std::size_t); - - template <typename S> - void - zone_extract (istream<S>&); - - //@endcond - - private: - bool present_; - short hours_; - short minutes_; - }; - - /** - * @brief %time_zone comparison operator. - * - * @return True if both %time zones are either not specified or - * have equal hours and minutes components, false otherwise. - */ - bool - operator== (const time_zone&, const time_zone&); - - /** - * @brief %time_zone comparison operator. - * - * @return False if both %time zones are either not specified or - * have equal hours and minutes components, true otherwise. - */ - bool - operator!= (const time_zone&, const time_zone&); - - - /** - * @brief Class corresponding to the XML Schema gDay built-in type. - * - * The %gday class represents a day of the month with an optional - * %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class gday: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the day component. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param day The day component. - */ - explicit - gday (unsigned short day); - - /** - * @brief Initialize an instance with the day component and %time - * zone. - * - * @param day The day component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - gday (unsigned short day, short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - gday (const gday& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual gday* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - gday (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gday (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gday (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gday (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the day component. - * - * @return The day component. - */ - unsigned short - day () const; - - /** - * @brief Set the day component. - * - * @param d The new day component. - */ - void - day (unsigned short d); - - protected: - //@cond - - gday (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - unsigned short day_; - }; - - /** - * @brief %gday comparison operator. - * - * @return True if the day components and %time zones are equal, false - * otherwise. - */ - template <typename C, typename B> - bool - operator== (const gday<C, B>&, const gday<C, B>&); - - /** - * @brief %gday comparison operator. - * - * @return False if the day components and %time zones are equal, true - * otherwise. - */ - template <typename C, typename B> - bool - operator!= (const gday<C, B>&, const gday<C, B>&); - - /** - * @brief Class corresponding to the XML Schema gMonth built-in type. - * - * The %gmonth class represents a month of the year with an optional - * %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class gmonth: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the month component. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param month The month component. - */ - explicit - gmonth (unsigned short month); - - /** - * @brief Initialize an instance with the month component and %time - * zone. - * - * @param month The month component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - gmonth (unsigned short month, short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - gmonth (const gmonth& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual gmonth* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - gmonth (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gmonth (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gmonth (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gmonth (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the month component. - * - * @return The month component. - */ - unsigned short - month () const; - - /** - * @brief Set the month component. - * - * @param m The new month component. - */ - void - month (unsigned short m); - - protected: - //@cond - - gmonth (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - unsigned short month_; - }; - - /** - * @brief %gmonth comparison operator. - * - * @return True if the month components and %time zones are equal, false - * otherwise. - */ - template <typename C, typename B> - bool - operator== (const gmonth<C, B>&, const gmonth<C, B>&); - - /** - * @brief %gmonth comparison operator. - * - * @return False if the month components and %time zones are equal, true - * otherwise. - */ - template <typename C, typename B> - bool - operator!= (const gmonth<C, B>&, const gmonth<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema gYear built-in type. - * - * The %gyear class represents a year with an optional %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class gyear: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the year component. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param year The year component. - */ - explicit - gyear (int year); - - /** - * @brief Initialize an instance with the year component and %time - * zone. - * - * @param year The year component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - gyear (int year, short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - gyear (const gyear& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual gyear* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - gyear (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gyear (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gyear (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gyear (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the year component. - * - * @return The year component. - */ - int - year () const; - - /** - * @brief Set the year component. - * - * @param y The new year component. - */ - void - year (int y); - - protected: - //@cond - - gyear (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - int year_; - }; - - /** - * @brief %gyear comparison operator. - * - * @return True if the year components and %time zones are equal, false - * otherwise. - */ - template <typename C, typename B> - bool - operator== (const gyear<C, B>&, const gyear<C, B>&); - - /** - * @brief %gyear comparison operator. - * - * @return False if the year components and %time zones are equal, true - * otherwise. - */ - template <typename C, typename B> - bool - operator!= (const gyear<C, B>&, const gyear<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema gMonthDay built-in type. - * - * The %gmonth_day class represents day and month of the year with an - * optional %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class gmonth_day: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the month and day components. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param month The month component. - * @param day The day component. - */ - gmonth_day (unsigned short month, unsigned short day); - - /** - * @brief Initialize an instance with the month and day components - * as well as %time zone. - * - * @param month The month component. - * @param day The day component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - gmonth_day (unsigned short month, unsigned short day, - short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - gmonth_day (const gmonth_day& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual gmonth_day* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - gmonth_day (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gmonth_day (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gmonth_day (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gmonth_day (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the month component. - * - * @return The month component. - */ - unsigned short - month () const; - - /** - * @brief Set the month component. - * - * @param m The new month component. - */ - void - month (unsigned short m); - - /** - * @brief Get the day component. - * - * @return The day component. - */ - unsigned short - day () const; - - /** - * @brief Set the day component. - * - * @param d The new day component. - */ - void - day (unsigned short d); - - protected: - //@cond - - gmonth_day (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - unsigned short month_; - unsigned short day_; - }; - - /** - * @brief %gmonth_day comparison operator. - * - * @return True if the month and day components as well as %time zones - * are equal, false otherwise. - */ - template <typename C, typename B> - bool - operator== (const gmonth_day<C, B>&, const gmonth_day<C, B>&); - - /** - * @brief %gmonth_day comparison operator. - * - * @return False if the month and day components as well as %time zones - * are equal, true otherwise. - */ - template <typename C, typename B> - bool - operator!= (const gmonth_day<C, B>&, const gmonth_day<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema gYearMonth built-in - * type. - * - * The %gyear_month class represents year and month with an optional - * %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class gyear_month: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the year and month components. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param year The year component. - * @param month The month component. - */ - gyear_month (int year, unsigned short month); - - /** - * @brief Initialize an instance with the year and month components - * as well as %time zone. - * - * @param year The year component. - * @param month The month component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - gyear_month (int year, unsigned short month, - short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - gyear_month (const gyear_month& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual gyear_month* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - gyear_month (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gyear_month (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gyear_month (const xercesc::DOMAttr& a, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - gyear_month (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the year component. - * - * @return The year component. - */ - int - year () const; - - /** - * @brief Set the year component. - * - * @param y The new year component. - */ - void - year (int y); - - /** - * @brief Get the month component. - * - * @return The month component. - */ - unsigned short - month () const; - - /** - * @brief Set the month component. - * - * @param m The new month component. - */ - void - month (unsigned short m); - - protected: - //@cond - - gyear_month (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - int year_; - unsigned short month_; - }; - - /** - * @brief %gyear_month comparison operator. - * - * @return True if the year and month components as well as %time zones - * are equal, false otherwise. - */ - template <typename C, typename B> - bool - operator== (const gyear_month<C, B>&, const gyear_month<C, B>&); - - /** - * @brief %gyear_month comparison operator. - * - * @return False if the year and month components as well as %time zones - * are equal, true otherwise. - */ - template <typename C, typename B> - bool - operator!= (const gyear_month<C, B>&, const gyear_month<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema %date built-in type. - * - * The %date class represents day, month, and year with an optional - * %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class date: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the year, month, and day - * components. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param year The year component. - * @param month The month component. - * @param day The day component. - */ - date (int year, unsigned short month, unsigned short day); - - /** - * @brief Initialize an instance with the year, month, and day - * components as well as %time zone. - * - * @param year The year component. - * @param month The month component. - * @param day The day component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - date (int year, unsigned short month, unsigned short day, - short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - date (const date& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual date* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - date (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - date (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - date (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - date (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the year component. - * - * @return The year component. - */ - int - year () const; - - /** - * @brief Set the year component. - * - * @param y The new year component. - */ - void - year (int y); - - /** - * @brief Get the month component. - * - * @return The month component. - */ - unsigned short - month () const; - - /** - * @brief Set the month component. - * - * @param m The new month component. - */ - void - month (unsigned short m); - - /** - * @brief Get the day component. - * - * @return The day component. - */ - unsigned short - day () const; - - /** - * @brief Set the day component. - * - * @param d The new day component. - */ - void - day (unsigned short d); - - protected: - //@cond - - date (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - int year_; - unsigned short month_; - unsigned short day_; - }; - - /** - * @brief %date comparison operator. - * - * @return True if the year, month, and day components as well as %time - * zones are equal, false otherwise. - */ - template <typename C, typename B> - bool - operator== (const date<C, B>&, const date<C, B>&); - - /** - * @brief %date comparison operator. - * - * @return False if the year, month, and day components as well as %time - * zones are equal, true otherwise. - */ - template <typename C, typename B> - bool - operator!= (const date<C, B>&, const date<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema %time built-in type. - * - * The %time class represents hours, minutes, and seconds with an - * optional %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class time: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the hours, minutes, and - * seconds components. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param hours The hours component. - * @param minutes The minutes component. - * @param seconds The seconds component. - */ - time (unsigned short hours, unsigned short minutes, double seconds); - - /** - * @brief Initialize an instance with the hours, minutes, and - * seconds components as well as %time zone. - * - * @param hours The hours component. - * @param minutes The minutes component. - * @param seconds The seconds component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - time (unsigned short hours, unsigned short minutes, double seconds, - short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - time (const time& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual time* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - time (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - time (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - time (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - time (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the hours component. - * - * @return The hours component. - */ - unsigned short - hours () const; - - /** - * @brief Set the hours component. - * - * @param h The new hours component. - */ - void - hours (unsigned short h); - - /** - * @brief Get the minutes component. - * - * @return The minutes component. - */ - unsigned short - minutes () const; - - /** - * @brief Set the minutes component. - * - * @param m The new minutes component. - */ - void - minutes (unsigned short m); - - /** - * @brief Get the seconds component. - * - * @return The seconds component. - */ - double - seconds () const; - - /** - * @brief Set the seconds component. - * - * @param s The new seconds component. - */ - void - seconds (double s); - - protected: - //@cond - - time (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - unsigned short hours_; - unsigned short minutes_; - double seconds_; - }; - - /** - * @brief %time comparison operator. - * - * @return True if the hours, seconds, and minutes components as well - * as %time zones are equal, false otherwise. - */ - template <typename C, typename B> - bool - operator== (const time<C, B>&, const time<C, B>&); - - /** - * @brief %time comparison operator. - * - * @return False if the hours, seconds, and minutes components as well - * as %time zones are equal, true otherwise. - */ - template <typename C, typename B> - bool - operator!= (const time<C, B>&, const time<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema dateTime built-in type. - * - * The %date_time class represents year, month, day, hours, minutes, - * and seconds with an optional %time zone. - * - * @nosubgrouping - */ - template <typename C, typename B> - class date_time: public B, public time_zone - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with the year, month, day, hours, - * minutes, and seconds components. - * - * When this constructor is used, the %time zone is left - * unspecified. - * - * @param year The year component. - * @param month The month component. - * @param day The day component. - * @param hours The hours component. - * @param minutes The minutes component. - * @param seconds The seconds component. - */ - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, - double seconds); - - /** - * @brief Initialize an instance with the year, month, day, hours, - * minutes, and seconds components as well as %time zone. - * - * @param year The year component. - * @param month The month component. - * @param day The day component. - * @param hours The hours component. - * @param minutes The minutes component. - * @param seconds The seconds component. - * @param zone_hours The %time zone hours component. - * @param zone_minutes The %time zone minutes component. - */ - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, - double seconds, short zone_hours, short zone_minutes); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - date_time (const date_time& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual date_time* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - date_time (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - date_time (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - date_time (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - date_time (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Get the year component. - * - * @return The year component. - */ - int - year () const; - - /** - * @brief Set the year component. - * - * @param y The new year component. - */ - void - year (int y); - - /** - * @brief Get the month component. - * - * @return The month component. - */ - unsigned short - month () const; - - /** - * @brief Set the month component. - * - * @param m The new month component. - */ - void - month (unsigned short m); - - /** - * @brief Get the day component. - * - * @return The day component. - */ - unsigned short - day () const; - - /** - * @brief Set the day component. - * - * @param d The new day component. - */ - void - day (unsigned short d); - - /** - * @brief Get the hours component. - * - * @return The hours component. - */ - unsigned short - hours () const; - - /** - * @brief Set the hours component. - * - * @param h The new hours component. - */ - void - hours (unsigned short h); - - /** - * @brief Get the minutes component. - * - * @return The minutes component. - */ - unsigned short - minutes () const; - - /** - * @brief Set the minutes component. - * - * @param m The new minutes component. - */ - void - minutes (unsigned short m); - - /** - * @brief Get the seconds component. - * - * @return The seconds component. - */ - double - seconds () const; - - /** - * @brief Set the seconds component. - * - * @param s The new seconds component. - */ - void - seconds (double s); - - protected: - //@cond - - date_time (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - int year_; - unsigned short month_; - unsigned short day_; - unsigned short hours_; - unsigned short minutes_; - double seconds_; - }; - - /** - * @brief %date_time comparison operator. - * - * @return True if the year, month, day, hours, seconds, and minutes - * components as well as %time zones are equal, false otherwise. - */ - template <typename C, typename B> - bool - operator== (const date_time<C, B>&, const date_time<C, B>&); - - /** - * @brief %date_time comparison operator. - * - * @return False if the year, month, day, hours, seconds, and minutes - * components as well as %time zones are equal, true otherwise. - */ - template <typename C, typename B> - bool - operator!= (const date_time<C, B>&, const date_time<C, B>&); - - - /** - * @brief Class corresponding to the XML Schema %duration built-in type. - * - * The %duration class represents a potentially negative %duration in - * the form of years, months, days, hours, minutes, and seconds. - * - * @nosubgrouping - */ - template <typename C, typename B> - class duration: public B - { - public: - /** - * @name Constructors - */ - //@{ - /** - * @brief Initialize a potentially negative instance with the years, - * months, days, hours, minutes, and seconds components. - * - * @param negative A boolean value indicating whether the %duration - * is negative (true) or positive (false). - * @param years The years component. - * @param months The months component. - * @param days The days component. - * @param hours The hours component. - * @param minutes The minutes component. - * @param seconds The seconds component. - */ - duration (bool negative, - unsigned int years, unsigned int months, unsigned int days, - unsigned int hours, unsigned int minutes, double seconds); - - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the _clone function instead. - */ - duration (const duration& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual duration* - _clone (flags f = 0, container* c = 0) const; - - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - duration (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - duration (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - duration (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - duration (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Determine if %duration is negative. - * - * @return True if %duration is negative, false otherwise. - */ - bool - negative () const; - - /** - * @brief Change %duration sign. - * - * @param n A boolean value indicating whether %duration is - * negative (true) or positive (false). - */ - void - negative (bool n); - - /** - * @brief Get the years component. - * - * @return The years component. - */ - unsigned int - years () const; - - /** - * @brief Set the years component. - * - * @param y The new years component. - */ - void - years (unsigned int y); - - /** - * @brief Get the months component. - * - * @return The months component. - */ - unsigned int - months () const; - - /** - * @brief Set the months component. - * - * @param m The new months component. - */ - void - months (unsigned int m); - - /** - * @brief Get the days component. - * - * @return The days component. - */ - unsigned int - days () const; - - /** - * @brief Set the days component. - * - * @param d The new days component. - */ - void - days (unsigned int d); - - /** - * @brief Get the hours component. - * - * @return The hours component. - */ - unsigned int - hours () const; - - /** - * @brief Set the hours component. - * - * @param h The new hours component. - */ - void - hours (unsigned int h); - - /** - * @brief Get the minutes component. - * - * @return The minutes component. - */ - unsigned int - minutes () const; - - /** - * @brief Set the minutes component. - * - * @param m The new minutes component. - */ - void - minutes (unsigned int m); - - /** - * @brief Get the seconds component. - * - * @return The seconds component. - */ - double - seconds () const; - - /** - * @brief Set the seconds component. - * - * @param s The new seconds component. - */ - void - seconds (double s); - - protected: - //@cond - - duration (); - - void - parse (const std::basic_string<C>&); - - //@endcond - - private: - bool negative_; - unsigned int years_; - unsigned int months_; - unsigned int days_; - unsigned int hours_; - unsigned int minutes_; - double seconds_; - }; - - /** - * @brief %duration comparison operator. - * - * @return True if the sings as well as years, months, days, hours, - * seconds, and minutes components are equal, false otherwise. - */ - template <typename C, typename B> - bool - operator== (const duration<C, B>&, const duration<C, B>&); - - /** - * @brief %duration comparison operator. - * - * @return False if the sings as well as years, months, days, hours, - * seconds, and minutes components are equal, true otherwise. - */ - template <typename C, typename B> - bool - operator!= (const duration<C, B>&, const duration<C, B>&); - } - } -} - -#include <xsd/cxx/tree/date-time.ixx> -#include <xsd/cxx/tree/date-time.txx> - -#endif // XSD_CXX_TREE_DATE_TIME_HXX diff --git a/libxsd/xsd/cxx/tree/date-time.ixx b/libxsd/xsd/cxx/tree/date-time.ixx deleted file mode 100644 index b34ceab..0000000 --- a/libxsd/xsd/cxx/tree/date-time.ixx +++ /dev/null @@ -1,891 +0,0 @@ -// file : xsd/cxx/tree/date-time.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // time_zone - // - inline time_zone:: - time_zone () - : present_ (false) - { - } - - inline time_zone:: - time_zone (short h, short m) - : present_ (true), hours_ (h), minutes_ (m) - { - } - - inline bool time_zone:: - zone_present () const - { - return present_; - } - - inline void time_zone:: - zone_reset () - { - present_ = false; - } - - inline short time_zone:: - zone_hours () const - { - return hours_; - } - - inline void time_zone:: - zone_hours (short h) - { - hours_ = h; - present_ = true; - } - - inline short time_zone:: - zone_minutes () const - { - return minutes_; - } - - inline void time_zone:: - zone_minutes (short m) - { - minutes_ = m; - present_ = true; - } - - inline bool - operator== (const time_zone& x, const time_zone& y) - { - return x.zone_present () - ? y.zone_present () && - x.zone_hours () == y.zone_hours () && - x.zone_minutes () == y.zone_minutes () - : !y.zone_present (); - } - - inline bool - operator!= (const time_zone& x, const time_zone& y) - { - return !(x == y); - } - - // gday - // - template <typename C, typename B> - inline gday<C, B>:: - gday () - { - } - - template <typename C, typename B> - inline gday<C, B>:: - gday (unsigned short day) - : day_ (day) - { - } - - template <typename C, typename B> - inline gday<C, B>:: - gday (unsigned short day, short zone_h, short zone_m) - : time_zone (zone_h, zone_m), day_ (day) - { - } - - template <typename C, typename B> - inline gday<C, B>:: - gday (const gday& x, flags f, container* c) - : B (x, f, c), time_zone (x), day_ (x.day_) - { - } - - template <typename C, typename B> - inline unsigned short gday<C, B>:: - day () const - { - return day_; - } - - template <typename C, typename B> - inline void gday<C, B>:: - day (unsigned short day) - { - day_ = day; - } - - template <typename C, typename B> - inline bool - operator== (const gday<C, B>& x, const gday<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.day () == y.day () && xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const gday<C, B>& x, const gday<C, B>& y) - { - return !(x == y); - } - - // gmonth - // - template <typename C, typename B> - inline gmonth<C, B>:: - gmonth () - { - } - - template <typename C, typename B> - inline gmonth<C, B>:: - gmonth (unsigned short month) - : month_ (month) - { - } - - template <typename C, typename B> - inline gmonth<C, B>:: - gmonth (unsigned short month, short zone_h, short zone_m) - : time_zone (zone_h, zone_m), month_ (month) - { - } - - template <typename C, typename B> - inline gmonth<C, B>:: - gmonth (const gmonth& x, flags f, container* c) - : B (x, f, c), time_zone (x), month_ (x.month_) - { - } - - template <typename C, typename B> - inline unsigned short gmonth<C, B>:: - month () const - { - return month_; - } - - template <typename C, typename B> - inline void gmonth<C, B>:: - month (unsigned short month) - { - month_ = month; - } - - template <typename C, typename B> - inline bool - operator== (const gmonth<C, B>& x, const gmonth<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.month () == y.month () && xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const gmonth<C, B>& x, const gmonth<C, B>& y) - { - return !(x == y); - } - - // gyear - // - template <typename C, typename B> - inline gyear<C, B>:: - gyear () - { - } - - template <typename C, typename B> - inline gyear<C, B>:: - gyear (int year) - : year_ (year) - { - } - - template <typename C, typename B> - inline gyear<C, B>:: - gyear (int year, short zone_h, short zone_m) - : time_zone (zone_h, zone_m), year_ (year) - { - } - - template <typename C, typename B> - inline gyear<C, B>:: - gyear (const gyear& x, flags f, container* c) - : B (x, f, c), time_zone (x), year_ (x.year_) - { - } - - template <typename C, typename B> - inline int gyear<C, B>:: - year () const - { - return year_; - } - - template <typename C, typename B> - inline void gyear<C, B>:: - year (int year) - { - year_ = year; - } - - template <typename C, typename B> - inline bool - operator== (const gyear<C, B>& x, const gyear<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.year () == y.year () && xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const gyear<C, B>& x, const gyear<C, B>& y) - { - return !(x == y); - } - - // gmonth_day - // - template <typename C, typename B> - inline gmonth_day<C, B>:: - gmonth_day () - { - } - - template <typename C, typename B> - inline gmonth_day<C, B>:: - gmonth_day (unsigned short month, unsigned short day) - : month_ (month), day_ (day) - { - } - - template <typename C, typename B> - inline gmonth_day<C, B>:: - gmonth_day (unsigned short month, unsigned short day, - short zone_h, short zone_m) - : time_zone (zone_h, zone_m), month_ (month), day_ (day) - { - } - - template <typename C, typename B> - inline gmonth_day<C, B>:: - gmonth_day (const gmonth_day& x, flags f, container* c) - : B (x, f, c), time_zone (x), month_ (x.month_), day_ (x.day_) - { - } - - template <typename C, typename B> - inline unsigned short gmonth_day<C, B>:: - month () const - { - return month_; - } - - template <typename C, typename B> - inline void gmonth_day<C, B>:: - month (unsigned short month) - { - month_ = month; - } - - template <typename C, typename B> - inline unsigned short gmonth_day<C, B>:: - day () const - { - return day_; - } - - template <typename C, typename B> - inline void gmonth_day<C, B>:: - day (unsigned short day) - { - day_ = day; - } - - template <typename C, typename B> - inline bool - operator== (const gmonth_day<C, B>& x, const gmonth_day<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.month () == y.month () && - x.day () == y.day () && - xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const gmonth_day<C, B>& x, const gmonth_day<C, B>& y) - { - return !(x == y); - } - - // gyear_month - // - template <typename C, typename B> - inline gyear_month<C, B>:: - gyear_month () - { - } - - template <typename C, typename B> - inline gyear_month<C, B>:: - gyear_month (int year, unsigned short month) - : year_ (year), month_ (month) - { - } - - template <typename C, typename B> - inline gyear_month<C, B>:: - gyear_month (int year, unsigned short month, - short zone_h, short zone_m) - : time_zone (zone_h, zone_m), year_ (year), month_ (month) - { - } - - template <typename C, typename B> - inline gyear_month<C, B>:: - gyear_month (const gyear_month& x, flags f, container* c) - : B (x, f, c), time_zone (x), year_ (x.year_), month_ (x.month_) - { - } - - template <typename C, typename B> - inline int gyear_month<C, B>:: - year () const - { - return year_; - } - - template <typename C, typename B> - inline void gyear_month<C, B>:: - year (int year) - { - year_ = year; - } - - template <typename C, typename B> - inline unsigned short gyear_month<C, B>:: - month () const - { - return month_; - } - - template <typename C, typename B> - inline void gyear_month<C, B>:: - month (unsigned short month) - { - month_ = month; - } - - template <typename C, typename B> - inline bool - operator== (const gyear_month<C, B>& x, const gyear_month<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.year () == y.year () && - x.month () == y.month () && - xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const gyear_month<C, B>& x, const gyear_month<C, B>& y) - { - return !(x == y); - } - - // date - // - template <typename C, typename B> - inline date<C, B>:: - date () - { - } - - template <typename C, typename B> - inline date<C, B>:: - date (int year, unsigned short month, unsigned short day) - : year_ (year), month_ (month), day_ (day) - { - } - - template <typename C, typename B> - inline date<C, B>:: - date (int year, unsigned short month, unsigned short day, - short zone_h, short zone_m) - : time_zone (zone_h, zone_m), - year_ (year), month_ (month), day_ (day) - { - } - - template <typename C, typename B> - inline date<C, B>:: - date (const date& x, flags f, container* c) - : B (x, f, c), time_zone (x), - year_ (x.year_), month_ (x.month_), day_ (x.day_) - { - } - - template <typename C, typename B> - inline int date<C, B>:: - year () const - { - return year_; - } - - template <typename C, typename B> - inline void date<C, B>:: - year (int year) - { - year_ = year; - } - - template <typename C, typename B> - inline unsigned short date<C, B>:: - month () const - { - return month_; - } - - template <typename C, typename B> - inline void date<C, B>:: - month (unsigned short month) - { - month_ = month; - } - - template <typename C, typename B> - inline unsigned short date<C, B>:: - day () const - { - return day_; - } - - template <typename C, typename B> - inline void date<C, B>:: - day (unsigned short day) - { - day_ = day; - } - - template <typename C, typename B> - inline bool - operator== (const date<C, B>& x, const date<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.year () == y.year () && - x.month () == y.month () && - x.day () == y.day () && - xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const date<C, B>& x, const date<C, B>& y) - { - return !(x == y); - } - - // time - // - template <typename C, typename B> - inline time<C, B>:: - time () - { - } - - template <typename C, typename B> - inline time<C, B>:: - time (unsigned short hours, unsigned short minutes, double seconds) - : hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - template <typename C, typename B> - inline time<C, B>:: - time (unsigned short hours, unsigned short minutes, double seconds, - short zone_h, short zone_m) - : time_zone (zone_h, zone_m), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - template <typename C, typename B> - inline time<C, B>:: - time (const time& x, flags f, container* c) - : B (x, f, c), time_zone (x), - hours_ (x.hours_), minutes_ (x.minutes_), seconds_ (x.seconds_) - { - } - - template <typename C, typename B> - inline unsigned short time<C, B>:: - hours () const - { - return hours_; - } - - template <typename C, typename B> - inline void time<C, B>:: - hours (unsigned short hours) - { - hours_ = hours; - } - - template <typename C, typename B> - inline unsigned short time<C, B>:: - minutes () const - { - return minutes_; - } - - template <typename C, typename B> - inline void time<C, B>:: - minutes (unsigned short minutes) - { - minutes_ = minutes; - } - - template <typename C, typename B> - inline double time<C, B>:: - seconds () const - { - return seconds_; - } - - template <typename C, typename B> - inline void time<C, B>:: - seconds (double seconds) - { - seconds_ = seconds; - } - - template <typename C, typename B> - inline bool - operator== (const time<C, B>& x, const time<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.hours () == y.hours () && - x.minutes () == y.minutes () && - x.seconds () == y.seconds () && - xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const time<C, B>& x, const time<C, B>& y) - { - return !(x == y); - } - - // date_time - // - template <typename C, typename B> - inline date_time<C, B>:: - date_time () - { - } - - template <typename C, typename B> - inline date_time<C, B>:: - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, double seconds) - : year_ (year), month_ (month), day_ (day), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - template <typename C, typename B> - inline date_time<C, B>:: - date_time (int year, unsigned short month, unsigned short day, - unsigned short hours, unsigned short minutes, double seconds, - short zone_h, short zone_m) - : time_zone (zone_h, zone_m), - year_ (year), month_ (month), day_ (day), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - template <typename C, typename B> - inline date_time<C, B>:: - date_time (const date_time& x, flags f, container* c) - : B (x, f, c), time_zone (x), - year_ (x.year_), month_ (x.month_), day_ (x.day_), - hours_ (x.hours_), minutes_ (x.minutes_), seconds_ (x.seconds_) - { - } - - template <typename C, typename B> - inline int date_time<C, B>:: - year () const - { - return year_; - } - - template <typename C, typename B> - inline void date_time<C, B>:: - year (int year) - { - year_ = year; - } - - template <typename C, typename B> - inline unsigned short date_time<C, B>:: - month () const - { - return month_; - } - - template <typename C, typename B> - inline void date_time<C, B>:: - month (unsigned short month) - { - month_ = month; - } - - template <typename C, typename B> - inline unsigned short date_time<C, B>:: - day () const - { - return day_; - } - - template <typename C, typename B> - inline void date_time<C, B>:: - day (unsigned short day) - { - day_ = day; - } - - template <typename C, typename B> - inline unsigned short date_time<C, B>:: - hours () const - { - return hours_; - } - - template <typename C, typename B> - inline void date_time<C, B>:: - hours (unsigned short hours) - { - hours_ = hours; - } - - template <typename C, typename B> - inline unsigned short date_time<C, B>:: - minutes () const - { - return minutes_; - } - - template <typename C, typename B> - inline void date_time<C, B>:: - minutes (unsigned short minutes) - { - minutes_ = minutes; - } - - template <typename C, typename B> - inline double date_time<C, B>:: - seconds () const - { - return seconds_; - } - - template <typename C, typename B> - inline void date_time<C, B>:: - seconds (double seconds) - { - seconds_ = seconds; - } - - template <typename C, typename B> - inline bool - operator== (const date_time<C, B>& x, const date_time<C, B>& y) - { - const time_zone& xz = x; - const time_zone& yz = y; - - return x.year () == y.year () && - x.month () == y.month () && - x.day () == y.day () && - x.hours () == y.hours () && - x.minutes () == y.minutes () && - x.seconds () == y.seconds () && - xz == yz; - } - - template <typename C, typename B> - inline bool - operator!= (const date_time<C, B>& x, const date_time<C, B>& y) - { - return !(x == y); - } - - // duration - // - template <typename C, typename B> - inline duration<C, B>:: - duration () - { - } - - template <typename C, typename B> - inline duration<C, B>:: - duration (bool negative, - unsigned int years, unsigned int months, unsigned int days, - unsigned int hours, unsigned int minutes, double seconds) - : negative_ (negative), - years_ (years), months_ (months), days_ (days), - hours_ (hours), minutes_ (minutes), seconds_ (seconds) - { - } - - template <typename C, typename B> - inline duration<C, B>:: - duration (const duration& x, flags f, container* c) - : B (x, f, c), negative_ (x.negative_), - years_ (x.years_), months_ (x.months_), days_ (x.days_), - hours_ (x.hours_), minutes_ (x.minutes_), seconds_ (x.seconds_) - { - } - - template <typename C, typename B> - inline bool duration<C, B>:: - negative () const - { - return negative_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - negative (bool negative) - { - negative_ = negative; - } - - template <typename C, typename B> - inline unsigned int duration<C, B>:: - years () const - { - return years_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - years (unsigned int years) - { - years_ = years; - } - - template <typename C, typename B> - inline unsigned int duration<C, B>:: - months () const - { - return months_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - months (unsigned int months) - { - months_ = months; - } - - template <typename C, typename B> - inline unsigned int duration<C, B>:: - days () const - { - return days_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - days (unsigned int days) - { - days_ = days; - } - - template <typename C, typename B> - inline unsigned int duration<C, B>:: - hours () const - { - return hours_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - hours (unsigned int hours) - { - hours_ = hours; - } - - template <typename C, typename B> - inline unsigned int duration<C, B>:: - minutes () const - { - return minutes_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - minutes (unsigned int minutes) - { - minutes_ = minutes; - } - - template <typename C, typename B> - inline double duration<C, B>:: - seconds () const - { - return seconds_; - } - - template <typename C, typename B> - inline void duration<C, B>:: - seconds (double seconds) - { - seconds_ = seconds; - } - - template <typename C, typename B> - inline bool - operator== (const duration<C, B>& x, const duration<C, B>& y) - { - return x.negative () == y.negative () && - x.years () == y.years () && - x.months () == y.months () && - x.days () == y.days () && - x.hours () == y.hours () && - x.minutes () == y.minutes () && - x.seconds () == y.seconds (); - } - - template <typename C, typename B> - inline bool - operator!= (const duration<C, B>& x, const duration<C, B>& y) - { - return !(x == y); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/date-time.txx b/libxsd/xsd/cxx/tree/date-time.txx deleted file mode 100644 index dfa1ac7..0000000 --- a/libxsd/xsd/cxx/tree/date-time.txx +++ /dev/null @@ -1,92 +0,0 @@ -// file : xsd/cxx/tree/date-time.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // gday - // - template <typename C, typename B> - gday<C, B>* gday<C, B>:: - _clone (flags f, container* c) const - { - return new gday (*this, f, c); - } - - // gmonth - // - template <typename C, typename B> - gmonth<C, B>* gmonth<C, B>:: - _clone (flags f, container* c) const - { - return new gmonth (*this, f, c); - } - - // gyear - // - template <typename C, typename B> - gyear<C, B>* gyear<C, B>:: - _clone (flags f, container* c) const - { - return new gyear (*this, f, c); - } - - // gmonth_day - // - template <typename C, typename B> - gmonth_day<C, B>* gmonth_day<C, B>:: - _clone (flags f, container* c) const - { - return new gmonth_day (*this, f, c); - } - - // gyear_month - // - template <typename C, typename B> - gyear_month<C, B>* gyear_month<C, B>:: - _clone (flags f, container* c) const - { - return new gyear_month (*this, f, c); - } - - // date - // - template <typename C, typename B> - date<C, B>* date<C, B>:: - _clone (flags f, container* c) const - { - return new date (*this, f, c); - } - - // time - // - template <typename C, typename B> - time<C, B>* time<C, B>:: - _clone (flags f, container* c) const - { - return new time (*this, f, c); - } - - // date_time - // - template <typename C, typename B> - date_time<C, B>* date_time<C, B>:: - _clone (flags f, container* c) const - { - return new date_time (*this, f, c); - } - - // duration - // - template <typename C, typename B> - duration<C, B>* duration<C, B>:: - _clone (flags f, container* c) const - { - return new duration (*this, f, c); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/element-map.hxx b/libxsd/xsd/cxx/tree/element-map.hxx deleted file mode 100644 index d42f569..0000000 --- a/libxsd/xsd/cxx/tree/element-map.hxx +++ /dev/null @@ -1,146 +0,0 @@ -// file : xsd/cxx/tree/element-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ELEMENT_MAP_HXX -#define XSD_CXX_TREE_ELEMENT_MAP_HXX - -#include <map> -#include <memory> // std::auto_ptr/unique_ptr -#include <cstddef> // std::size_t -#include <string> - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/xml/qualified-name.hxx> -#include <xsd/cxx/tree/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - /** - * @brief Root element map. - * - * This class allows uniform parsing/serialization of multiple - * root elements via the element_type base class. - * - * @nosubgrouping - */ - template <typename C, typename T> - class element_map - { - public: - /** - * @brief Common base class for all element types. - */ - typedef tree::element_type<C, T> element_type; - - /** - * @brief Parse a DOM element. - * - * @param e A DOM element to parse. - * @param f Flags to create the new element object with. - * @return An automatic pointer to the new element object. - */ - static XSD_AUTO_PTR<element_type> - parse (const xercesc::DOMElement& e, flags f = 0); - - /** - * @brief Serialize an element object to a DOM element. - * - * @param e A DOM element to serialize to. - * @param x An element object to serialize. - */ - static void - serialize (xercesc::DOMElement& e, const element_type& x); - - public: - //@cond - - typedef xml::qualified_name<C> qualified_name; - - typedef XSD_AUTO_PTR<element_type> - (*parser) (const xercesc::DOMElement&, flags f); - - typedef void - (*serializer) (xercesc::DOMElement&, const element_type&); - - static void - register_parser (const qualified_name&, parser); - - static void - register_serializer (const qualified_name&, serializer); - - public: - struct map_entry - { - map_entry () : parser_ (0), serializer_ (0) {} - - parser parser_; - serializer serializer_; - }; - - typedef - std::map<qualified_name, map_entry> - map; - - static map* map_; - static std::size_t count_; - - private: - element_map (); - - //@endcond - }; - - //@cond - - template <typename C, typename T> - typename element_map<C, T>::map* element_map<C, T>::map_ = 0; - - template <typename C, typename T> - std::size_t element_map<C, T>::count_ = 0; - - template <typename C, typename T> - struct element_map_init - { - element_map_init (); - ~element_map_init (); - }; - - // - // - template<typename T, typename C, typename B> - XSD_AUTO_PTR<element_type<C, B> > - parser_impl (const xercesc::DOMElement&, flags); - - template<typename T, typename C, typename B> - struct parser_init - { - parser_init (const std::basic_string<C>& name, - const std::basic_string<C>& ns); - }; - - // - // - template<typename T, typename C, typename B> - void - serializer_impl (xercesc::DOMElement&, const element_type<C, B>&); - - template<typename T, typename C, typename B> - struct serializer_init - { - serializer_init (const std::basic_string<C>& name, - const std::basic_string<C>& ns); - }; - - //@endcond - } - } -} - -#include <xsd/cxx/tree/element-map.txx> - -#endif // XSD_CXX_TREE_ELEMENT_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/element-map.txx b/libxsd/xsd/cxx/tree/element-map.txx deleted file mode 100644 index 1eb5d9d..0000000 --- a/libxsd/xsd/cxx/tree/element-map.txx +++ /dev/null @@ -1,69 +0,0 @@ -// file : xsd/cxx/tree/element-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // element_map - // - template <typename C, typename T> - void element_map<C, T>:: - register_parser (const qualified_name& n, parser p) - { - (*map_)[n].parser_ = p; - } - - template <typename C, typename T> - void element_map<C, T>:: - register_serializer (const qualified_name& n, serializer s) - { - (*map_)[n].serializer_ = s; - } - - // element_map_init - // - template <typename C, typename T> - element_map_init<C, T>:: - element_map_init () - { - if (element_map<C, T>::count_ == 0) - element_map<C, T>::map_ = new typename element_map<C, T>::map; - - ++element_map<C, T>::count_; - } - - template <typename C, typename T> - element_map_init<C, T>:: - ~element_map_init () - { - if (--element_map<C, T>::count_ == 0) - delete element_map<C, T>::map_; - } - - // parser_init - // - template<typename T, typename C, typename B> - parser_init<T, C, B>:: - parser_init (const std::basic_string<C>& name, - const std::basic_string<C>& ns) - { - element_map<C, B>::register_parser ( - xml::qualified_name<C> (name, ns), &parser_impl<T, C, B>); - } - - // serializer_init - // - template<typename T, typename C, typename B> - serializer_init<T, C, B>:: - serializer_init (const std::basic_string<C>& name, - const std::basic_string<C>& ns) - { - element_map<C, B>::register_serializer ( - xml::qualified_name<C> (name, ns), &serializer_impl<T, C, B>); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/elements.hxx b/libxsd/xsd/cxx/tree/elements.hxx deleted file mode 100644 index 808b35e..0000000 --- a/libxsd/xsd/cxx/tree/elements.hxx +++ /dev/null @@ -1,1865 +0,0 @@ -// file : xsd/cxx/tree/elements.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -/** - * @file - * - * @brief Contains C++ class definitions for XML Schema anyType and - * anySimpleType types as well as supporting code. - * - * This is an internal header and is included by the generated code. You - * normally should not include it directly. - * - */ - -#ifndef XSD_CXX_TREE_ELEMENTS_HXX -#define XSD_CXX_TREE_ELEMENTS_HXX - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR, XSD_CXX11 - -#include <map> -#include <string> -#include <memory> // std::auto_ptr/unique_ptr -#include <cstddef> // std::size_t -#include <istream> -#include <sstream> -#include <cassert> - -#ifdef XSD_CXX11 -# include <utility> // std::move -#endif - -#include <xercesc/dom/DOMNode.hpp> -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> -#include <xercesc/dom/DOMDocument.hpp> -#include <xercesc/dom/DOMNamedNodeMap.hpp> - -#include <xercesc/util/XercesVersion.hpp> - -#include <xsd/cxx/xml/elements.hxx> // xml::properties -#include <xsd/cxx/xml/dom/auto-ptr.hxx> // dom::auto_ptr/unique_ptr -#include <xsd/cxx/xml/dom/wildcard-source.hxx> // dom::create_document() - -#include <xsd/cxx/tree/facet.hxx> -#include <xsd/cxx/tree/exceptions.hxx> -#include <xsd/cxx/tree/istream-fwd.hxx> -#include <xsd/cxx/tree/containers-wildcard.hxx> - -#if _XERCES_VERSION < 30000 -# error Xerces-C++ 2-series is not supported -#endif - -namespace xsd -{ - namespace cxx - { - /** - * @brief C++/Tree mapping runtime namespace. - * - * This is an internal namespace and normally should not be referenced - * directly. Instead you should use the aliases for types in this - * namespaces that are created in the generated code. - * - */ - namespace tree - { - /** - * @brief Parsing and %serialization %flags. - * - * Flags are used to modify the default behavior of %parsing and - * %serialization functions as well as %parsing constructors. - * - * @nosubgrouping - */ - class flags - { - public: - /** - * @name Flag constants - */ - //@{ - - /** - * @brief Keep DOM association in the resulting tree. - */ - static const unsigned long keep_dom = 0x00000100UL; - - /** - * @brief Assume ownership of the DOM document. - * - * This flag only makes sense together with the @c keep_dom - * flag in the call to the %parsing function with the - * @c dom::auto_ptr/unique_ptr\<DOMDocument> argument. - * - */ - static const unsigned long own_dom = 0x00000200UL; - - /** - * @brief Turn off XML Schema validation in the underlying XML - * parser. - */ - static const unsigned long dont_validate = 0x00000400UL; - - /** - * @brief Extract XML content for anyType or anySimpleType. - * Normally you don't need to specify this flag explicitly. - */ - static const unsigned long extract_content = 0x00000800UL; - - /** - * @brief Do not initialize the Xerces-C++ runtime. - */ - static const unsigned long dont_initialize = 0x00000001UL; - - /** - * @brief Do not write XML declaration during %serialization. - */ - static const unsigned long no_xml_declaration = 0x00010000UL; - - /** - * @brief Do not add extra spaces or new lines that make the - * resulting XML easier to read. - */ - static const unsigned long dont_pretty_print = 0x00020000UL; - - //@cond - - // The following flags are for internal use. - // - static const unsigned long base = 0x01000000UL; - - //@endcond - - // Notes on flag blocks: - // - // 0x000000FF - common (applicable to both parsing and serialization) - // 0x0000FF00 - parsing (values aligned with XML parsing) - // 0x00FF0000 - serialization (values aligned with XML serialization) - // 0xFF000000 - internal - - //@} - - public: - /** - * @brief Initialize an instance with an integer value. - * - * @param x A %flags value as an integer. - */ - flags (unsigned long x = 0) - : x_ (x) - { - } - - /** - * @brief Convert an instance to an integer value. - * - * @return An integer %flags value. - */ - operator unsigned long () const - { - return x_; - } - - /** - * @brief Combine two %flags. - * - * @return A %flags object that is a combination of the arguments. - */ - friend flags - operator| (const flags& a, const flags& b) - { - return flags (a.x_ | b.x_); - } - - /** - * @brief Combine two %flags. - * - * @return A %flags object that is a combination of the arguments. - */ - friend flags - operator| (const flags& a, unsigned long b) - { - return flags (a.x_ | b); - } - - /** - * @brief Combine two %flags. - * - * @return A %flags object that is a combination of the arguments. - */ - friend flags - operator| (unsigned long a, const flags& b) - { - return flags (a | b.x_); - } - - private: - unsigned long x_; - }; - - // Parsing properties. Refer to xsd/cxx/xml/elements.hxx for XML- - // related properties. - // - template <typename C> - class properties: public xml::properties<C> - { - }; - - /** - * @brief Content order sequence entry. - * - * @nosubgrouping - */ - struct content_order - { - /** - * @brief Initialize an instance with passed id and index. - * - * @param id Content id. - * @param index Content index in the corresponding sequence. - */ - content_order (std::size_t id, std::size_t index = 0) - : id (id), index (index) - { - } - - /** - * @brief Content id. - */ - std::size_t id; - - /** - * @brief Content index. - */ - std::size_t index; - }; - - bool - operator== (const content_order&, const content_order&); - - bool - operator!= (const content_order&, const content_order&); - - bool - operator< (const content_order&, const content_order&); - - //@cond - - // DOM user data keys. - // - template <int dummy> - struct user_data_keys_template - { - // Back pointers to tree nodes. - // - static const XMLCh node[21]; - }; - - typedef user_data_keys_template<0> user_data_keys; - - // - // - struct identity - { - virtual - ~identity () - { - } - - identity () - { - } - - virtual bool - before (const identity&) const = 0; - - virtual void - throw_duplicate_id () const = 0; - - private: - identity (const identity&); - - identity& - operator= (const identity&); - }; - - //@endcond - - - // anyType. VC++ has a name injection bug that makes it impossible - // to have a member with the same name as a base type. To address - // that we will have to choose some unique name for the definition - // and typedef it to 'type'. - // - class _type; - - /** - * @brief Class corresponding to the XML Schema anyType built-in type. - * - */ - typedef _type type; - - /** - * @brief Container type. - * - */ - typedef _type container; - - /** - * @brief Class corresponding to the XML Schema anyType built-in type. - * - * This class is a base for every generated and built-in type in the - * C++/Tree mapping. - * - * @nosubgrouping - */ - class _type - { - public: - virtual - ~_type () - { - // Everything should have been unregistered by now. - // - assert (map_.get () == 0 || map_->size () == 0); - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor. - */ - _type (); - - /** - * @brief Create an instance from a C string. - * - * @param s A string to initialize the instance with. - * - * Note that this constructor ignores the string and creates an - * empty anyType instance. In particular, it will not convert the - * string into DOM content. The purpose of such a strange constructor - * is to allow statically-initialized default values of anyType type. - */ - template <typename C> - explicit - _type (const C* s); - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - _type (const type& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual type* - _clone (flags f = 0, container* c = 0) const - { - return new type (*this, f, c); - } - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - _type (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - _type (const xercesc::DOMElement& e, - flags f = flags::extract_content, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - _type (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename C> - _type (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - type& - operator= (const type& x) - { - if (this != &x) - { - if (x.content_.get () == 0) - content_.reset (); - else - content_ = x.content_->clone (); - - // Drop DOM association. - // - dom_info_.reset (); - } - - return *this; - } - - // anyType content API. - // - public: - typedef element_optional dom_content_optional; - - /** - * @brief Return a read-only (constant) reference to the anyType - * DOM content. - * - * @return A constant reference to the optional container. - * - * The DOM content is returned as an optional element container, - * the same container as used for optional element wildcards. - */ - const dom_content_optional& - dom_content () const; - - /** - * @brief Return a read-write reference to the anyType DOM content. - * - * @return A reference to the optional container. - * - * The DOM content is returned as an optional element container, - * the same container as used for optional element wildcards. - */ - dom_content_optional& - dom_content (); - - /** - * @brief Set the anyType DOM content. - * - * @param e A new element to set. - * - * This function makes a copy of its argument and sets it as the - * new DOM content. - */ - void - dom_content (const xercesc::DOMElement& e); - - /** - * @brief Set the anyType DOM content. - * - * @param e A new element to use. - * - * This function will use the passed element directly instead - * of making a copy. For this to work the element should belong - * to the DOM document associated with this anyType instance. - * - * @see dom_content_document - */ - void - dom_content (xercesc::DOMElement* e); - - /** - * @brief Set the anyType DOM content. - * - * @param d An optional container with the new element to set. - * - * If the element is present in @a d then this function makes a - * copy of this element and sets it as the new wildcard content. - * Otherwise the element container is set the 'not present' state. - */ - void - dom_content (const dom_content_optional& d); - - /** - * @brief Return a read-only (constant) reference to the DOM - * document associated with this anyType instance. - * - * @return A constant reference to the DOM document. - * - * The DOM document returned by this function is used to store - * the raw XML content corresponding to the anyType instance. - */ - const xercesc::DOMDocument& - dom_content_document () const; - - /** - * @brief Return a read-write reference to the DOM document - * associated with this anyType instance. - * - * @return A reference to the DOM document. - * - * The DOM document returned by this function is used to store - * the raw XML content corresponding to the anyType instance. - */ - xercesc::DOMDocument& - dom_content_document (); - - /** - * @brief Check for absence of DOM (anyType) and text (anySimpleType) - * content. - * - * @return True if there is no content and false otherwise. - * - * This is an optimization function that allows us to check for the - * lack of content without actually creating its empty representation - * (that is, empty DOM document for DOM or empty string for text). - */ - bool - null_content () const; - - // - // - public: - /** - * @brief Comparison operator. It uses DOM (anyType) or text - * (anySimpleType) content if present. If the content is missing - * then the types are assumed unequal. - * - * @return True if the instances are equal, false otherwise. - */ - friend bool - operator== (const type& x, const type& y) - { - return x.content_.get () != 0 && - x.content_->compare (y.content_.get ()); - } - - /** - * @brief Comparison operator. It uses DOM (anyType) or text - * (anySimpleType) content if present. If the content is missing - * then the types are assumed unequal. - * - * @return True if the instances are not equal, false otherwise. - */ - friend bool - operator!= (const type& x, const type& y) {return !(x == y);} - - // Container API. - // - public: - /** - * @brief Get a constant pointer to container, an object model - * node that contains this instance. - * - * @return A constant pointer to container, or 0 if this instance - * is not contained. - */ - const container* - _container () const - { - return container_; - } - - /** - * @brief Get a pointer to container, an object model node that - * contains this instance. - * - * @return A pointer to container, or 0 if this instance is not - * contained. - */ - container* - _container () - { - return container_; - } - - /** - * @brief Set this instance's new container, an object model node - * that contains this instance. - * - * @param c A pointer to container. - */ - virtual void - _container (container* c) - { - container* dr (0); - - if (c != 0) - { - dr = c->_root (); - - if (dr == 0) - dr = c; - } - - XSD_AUTO_PTR<map>& m (dr ? dr->map_ : map_); - - if (container_ == 0) - { - if (c != 0 && map_.get () != 0) - { - // Transfer our IDs to the new root. - // - if (m.get () != 0) - { - m->insert (map_->begin (), map_->end ()); - map_.reset (); - } - else - { -#ifdef XSD_CXX11 - m = std::move (map_); -#else - m = map_; -#endif - } - } - } - else - { - container* sr (_root ()); - - if (sr->map_.get () != 0) - { - // Transfer IDs that belong to this subtree. - // - for (map::iterator i (sr->map_->begin ()), e (sr->map_->end ()); - i != e;) - { - type* x (i->second); - for (; x != this && x != sr; x = x->_container ()) ; - - if (x != sr) - { - // Part of our subtree. - // - if (m.get () == 0) - m.reset (new map); - - m->insert (*i); - sr->map_->erase (i++); - } - else - ++i; - } - } - } - - container_ = c; - } - - /** - * @brief Get a constant pointer to object model's root node. - * - * @return A constant pointer to root node, or 0 if this instance - * is not contained. - */ - const container* - _root () const - { - const container* r (container_); - - for (const container* c (r); c != 0; c = c->container_) - r = c; - - return r; - } - - /** - * @brief Get a pointer to object model's root node. - * - * @return A pointer to root node, or 0 if this instance is not - * contained. - */ - container* - _root () - { - container* r (container_); - - for (container* c (r); c != 0; c = c->container_) - r = c; - - return r; - } - - // DOM association. - // - public: - /** - * @brief Get a constant pointer to a DOM node associated with - * this object model node. - * - * @return A constant pointer to DOM node, or 0 if none associated. - */ - const xercesc::DOMNode* - _node () const - { - return dom_info_.get () ? dom_info_->node() : 0; - } - - /** - * @brief Get a pointer to a DOM node associated with this object - * model node. - * - * @return A pointer to DOM node, or 0 if none associated. - */ - xercesc::DOMNode* - _node () - { - return dom_info_.get () ? dom_info_->node () : 0; - } - - /** - * @brief Exception indicating that a DOM node cannot be associated - * with an object model node. - */ - class bad_dom_node_type: public std::exception //@@ Inherit exception<C>. - { - public: - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw () - { - return "DOM node is not an attribute node or element node"; - } - }; - - /** - * @brief Manually set a DOM node associated with this object - * model node. - * - * The DOM node should be a child of the parent's DOM node. If - * this object model node is a root of the tree, then it will - * assume the ownership of the whole DOM document to which this - * DOM node belongs. - * - * @param n A pointer to DOM node (should be either an element or - * an attribute). - */ - void - _node (xercesc::DOMNode* n) - { - switch (n->getNodeType ()) - { - case xercesc::DOMNode::ELEMENT_NODE: - { - if (container_ != 0) - { - assert (_root ()->_node () != 0); - assert (_root ()->_node ()->getOwnerDocument () == - n->getOwnerDocument ()); - } - - dom_info_ = - dom_info_factory::create ( - *static_cast<xercesc::DOMElement*> (n), - *this, - container_ == 0); - - break; - } - case xercesc::DOMNode::ATTRIBUTE_NODE: - { - assert (container_ != 0); - assert (_root ()->_node () != 0); - assert (_root ()->_node ()->getOwnerDocument () == - n->getOwnerDocument ()); - - dom_info_ = - dom_info_factory::create ( - *static_cast<xercesc::DOMAttr*> (n), - *this); - - break; - } - default: - { - throw bad_dom_node_type (); - } - } - } - - public: - //@cond - - void - _register_id (const identity& i, type* t) - { - // We should be the root. - // - assert (container_ == 0); - - if (map_.get () == 0) - map_.reset (new map); - - if (!map_->insert ( - std::pair<const identity*, type*> (&i, t)).second) - { - i.throw_duplicate_id (); - } - } - - //@@ Does not inherit from exception<C>. - // - struct not_registered: std::exception - { - virtual const char* - what () const throw () - { - return "attempt to unregister non-existent id"; - } - }; - - void - _unregister_id (const identity& id) - { - // We should be the root. - // - assert (container_ == 0); - - if (map_.get () == 0 || map_->erase (&id) == 0) - throw not_registered (); - } - - type* - _lookup_id (const identity& id) const - { - if (map_.get ()) - { - map::const_iterator it (map_->find (&id)); - - if (it != map_->end ()) - return it->second; - } - - return 0; - } - - //@endcond - - private: - //@cond - - struct dom_info - { - virtual - ~dom_info () {} - - dom_info () {} - - virtual XSD_AUTO_PTR<dom_info> - clone (type& tree_node, container*) const = 0; - - virtual xercesc::DOMNode* - node () = 0; - - private: - dom_info (const dom_info&); - dom_info& operator= (const dom_info&); - }; - - struct dom_element_info: public dom_info - { - dom_element_info (xercesc::DOMElement& e, type& n, bool root) - : e_ (e) - { - e_.setUserData (user_data_keys::node, &n, 0); - - if (root) - { - // The caller should have associated a dom::auto/unique_ptr - // object that owns this document with the document node - // using the xml_schema::dom::tree_node_key key. - // - XSD_DOM_AUTO_PTR<xercesc::DOMDocument>* pd ( - reinterpret_cast<XSD_DOM_AUTO_PTR<xercesc::DOMDocument>*> ( - e.getOwnerDocument ()->getUserData (user_data_keys::node))); - - assert (pd != 0); - assert (pd->get () == e.getOwnerDocument ()); - - // Transfer ownership. -#ifdef XSD_CXX11 - doc_ = std::move (*pd); -#else - doc_ = *pd; -#endif - } - } - - virtual XSD_AUTO_PTR<dom_info> - clone (type& tree_node, container* c) const - { - // Check if we are a document root. - // - if (c == 0) - { - // We preserver DOM associations only in complete - // copies from root. - // - return XSD_AUTO_PTR<dom_info> ( - doc_.get () == 0 - ? 0 - : new dom_element_info (*doc_, tree_node)); - } - - // Check if our container does not have DOM association (e.g., - // because it wasn't a complete copy of the tree). - // - using xercesc::DOMNode; - - DOMNode* cn (c->_node ()); - - if (cn == 0) - return XSD_AUTO_PTR<dom_info> (); - - // Now we are going to find the corresponding element in - // the new tree. - // - { - using xercesc::DOMElement; - - DOMNode& pn (*e_.getParentNode ()); - assert (pn.getNodeType () == DOMNode::ELEMENT_NODE); - - DOMNode* sn (pn.getFirstChild ()); // Source. - DOMNode* dn (cn->getFirstChild ()); // Destination. - - // We should have at least one child. - // - assert (sn != 0); - - // Move in parallel until we get to the needed node. - // - for (; sn != 0 && !e_.isSameNode (sn);) - { - sn = sn->getNextSibling (); - dn = dn->getNextSibling (); - } - - // e_ should be on the list. - // - assert (sn != 0); - - assert (dn->getNodeType () == DOMNode::ELEMENT_NODE); - - return XSD_AUTO_PTR<dom_info> ( - new dom_element_info (static_cast<DOMElement&> (*dn), - tree_node, - false)); - } - } - - virtual xercesc::DOMNode* - node () - { - return &e_; - } - - private: - dom_element_info (const xercesc::DOMDocument& d, type& n) - : doc_ (static_cast<xercesc::DOMDocument*> ( - d.cloneNode (true))), - e_ (*doc_->getDocumentElement ()) - { - e_.setUserData (user_data_keys::node, &n, 0); - } - - private: - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> doc_; - xercesc::DOMElement& e_; - }; - - - struct dom_attribute_info: public dom_info - { - dom_attribute_info (xercesc::DOMAttr& a, type& n) - : a_ (a) - { - a_.setUserData (user_data_keys::node, &n, 0); - } - - virtual XSD_AUTO_PTR<dom_info> - clone (type& tree_node, container* c) const - { - // Check if we are a document root. - // - if (c == 0) - { - // We preserver DOM associations only in complete - // copies from root. - // - return XSD_AUTO_PTR<dom_info> (); - } - - // Check if our container does not have DOM association (e.g., - // because it wasn't a complete copy of the tree). - // - using xercesc::DOMNode; - - DOMNode* cn (c->_node ()); - - if (cn == 0) - return XSD_AUTO_PTR<dom_info> (); - - // We are going to find the corresponding attribute in - // the new tree. - // - using xercesc::DOMAttr; - using xercesc::DOMElement; - using xercesc::DOMNamedNodeMap; - - DOMElement& p (*a_.getOwnerElement ()); - DOMNamedNodeMap& nl (*p.getAttributes ()); - - XMLSize_t size (nl.getLength ()), i (0); - - // We should have at least one child. - // - assert (size != 0); - - for ( ;i < size && !a_.isSameNode (nl.item (i)); ++i)/*noop*/; - - // a_ should be in the list. - // - assert (i < size); - - DOMNode& n (*cn->getAttributes ()->item (i)); - assert (n.getNodeType () == DOMNode::ATTRIBUTE_NODE); - - return XSD_AUTO_PTR<dom_info> ( - new dom_attribute_info (static_cast<DOMAttr&> (n), tree_node)); - } - - virtual xercesc::DOMNode* - node () - { - return &a_; - } - - private: - xercesc::DOMAttr& a_; - }; - - // For Sun C++ 5.6. - // - struct dom_info_factory; - friend struct _type::dom_info_factory; - - struct dom_info_factory - { - static XSD_AUTO_PTR<dom_info> - create (const xercesc::DOMElement& e, type& n, bool root) - { - return XSD_AUTO_PTR<dom_info> ( - new dom_element_info ( - const_cast<xercesc::DOMElement&> (e), n, root)); - } - - static XSD_AUTO_PTR<dom_info> - create (const xercesc::DOMAttr& a, type& n) - { - return XSD_AUTO_PTR<dom_info> ( - new dom_attribute_info ( - const_cast<xercesc::DOMAttr&> (a), n)); - } - }; - - //@endcond - - XSD_AUTO_PTR<dom_info> dom_info_; - - - // ID/IDREF map. - // - private: - - //@cond - - struct identity_comparator - { - bool operator () (const identity* x, const identity* y) const - { - return x->before (*y); - } - }; - - //@endcond - - typedef - std::map<const identity*, type*, identity_comparator> - map; - - XSD_AUTO_PTR<map> map_; - - // anyType and anySimpleType content. - // - protected: - - //@cond - - struct content_type - { - virtual - ~content_type () {} - - content_type () {} - - virtual XSD_AUTO_PTR<content_type> - clone () const = 0; - - virtual bool - compare (const content_type*) const = 0; - - private: - content_type (const content_type&); - content_type& operator= (const content_type&); - }; - - struct dom_content_type: content_type - { - dom_content_type () - : doc (xml::dom::create_document<char> ()), dom (*doc) {} - - explicit - dom_content_type (const xercesc::DOMElement& e) - : doc (xml::dom::create_document<char> ()), dom (e, *doc) {} - - explicit - dom_content_type (xercesc::DOMElement* e) - : doc (xml::dom::create_document<char> ()), dom (e, *doc) {} - - explicit - dom_content_type (const dom_content_optional& d) - : doc (xml::dom::create_document<char> ()), dom (d, *doc) {} - - virtual XSD_AUTO_PTR<content_type> - clone () const - { - return XSD_AUTO_PTR<content_type> (new dom_content_type (dom)); - } - - virtual bool - compare (const content_type* c) const - { - if (const dom_content_type* dc = - dynamic_cast<const dom_content_type*> (c)) - return dom == dc->dom; - - return false; - } - - public: - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> doc; - dom_content_optional dom; - }; - - //@endcond - - mutable XSD_AUTO_PTR<content_type> content_; - - private: - container* container_; - }; - - /** - * @brief Class corresponding to the XML Schema anySimpleType built-in - * type. - * - * @nosubgrouping - */ - template <typename C, typename B> - class simple_type: public B - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor. - */ - simple_type (); - - /** - * @brief Create an instance from a C string. - * - * @param s A string to initialize the instance with. - */ - simple_type (const C* s); - - /** - * @brief Create an instance from a string. - * - * @param s A string to initialize the instance with. - */ - simple_type (const std::basic_string<C>& s); - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - simple_type (const simple_type& x, flags f = 0, container* c = 0); - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual simple_type* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - simple_type (istream<S>& s, - flags f = flags::extract_content, - container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - simple_type (const xercesc::DOMElement& e, - flags f = flags::extract_content, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - simple_type (const xercesc::DOMAttr& a, - flags f = flags::extract_content, - container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - simple_type (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = flags::extract_content, - container* c = 0); - //@} - - // anySimpleType content API. - // - public: - /** - * @brief Return a read-only (constant) reference to the anySimpleType - * text content. - * - * @return A constant reference to the text string. - */ - const std::basic_string<C>& - text_content () const; - - /** - * @brief Return a read-write reference to the anySimpleType text - * content. - * - * @return A reference to the text string. - */ - std::basic_string<C>& - text_content (); - - /** - * @brief Set the anySimpleType text content. - * - * @param t A new text string to set. - */ - void - text_content (const std::basic_string<C>& t); - - protected: - //@cond - - typedef typename B::content_type content_type; - - struct text_content_type: content_type - { - text_content_type () {} - - explicit - text_content_type (const std::basic_string<C>& t): text (t) {} - - explicit - text_content_type (const C* t): text (t) {} - - virtual XSD_AUTO_PTR<content_type> - clone () const - { - return XSD_AUTO_PTR<content_type> (new text_content_type (text)); - } - - virtual bool - compare (const content_type* c) const - { - if (const text_content_type* tc = - dynamic_cast<const text_content_type*> (c)) - return text == tc->text; - - return false; - } - - public: - // It would have been more elegant to store text content as DOMText. - // However, that would require Xerces-C++ initialization. Also - // having a separate DOMDocument for each text node seems like - // an overkill. - // - std::basic_string<C> text; - }; - - //@endcond - }; - - - /** - * @brief Base class for element types. - * - * This class is a base for every generated element type. - * - * @nosubgrouping - */ - template <typename C, typename T> - class element_type - { - public: - virtual - ~element_type () - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual element_type* - _clone (flags f = 0) const = 0; - - /** - * @brief Return the element name. - * - * @return A read-only string reference containing the element - * name. - */ - virtual const std::basic_string<C>& - _name () const = 0; - - /** - * @brief Return the element namespace. - * - * @return A read-only string reference containing the element - * namespace. Empty string is returned if the element is - * unqualified. - */ - virtual const std::basic_string<C>& - _namespace () const = 0; - - /** - * @brief Return the element value. - * - * @return A pointer to the element value or 0 if the element - * is of a fundamental type. - */ - virtual T* - _value () = 0; - - /** - * @brief Return the element value. - * - * @return A read-only pointer to the element value or 0 if the - * element is of a fundamental type. - */ - virtual const T* - _value () const = 0; - }; - - - //@cond - - // Extra schema type id to disambiguate certain cases where - // different XML Schema types (e.g., double and decimal) are - // mapped to the same fundamental C++ type (e.g., double). - // - struct schema_type - { - enum value - { - other, - double_, - decimal - }; - }; - - //@endcond - - - //@cond - template <typename T, - typename C, - schema_type::value ST = schema_type::other> - struct traits - { - typedef T type; - - static XSD_AUTO_PTR<T> - create (const xercesc::DOMElement& e, flags f, container* c) - { - return XSD_AUTO_PTR<T> (new T (e, f, c)); - } - - static XSD_AUTO_PTR<T> - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return XSD_AUTO_PTR<T> (new T (a, f, c)); - } - - static XSD_AUTO_PTR<T> - create (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - { - return XSD_AUTO_PTR<T> (new T (s, e, f, c)); - } - - // For now for istream we only go through traits for non- - // fundamental types. - // - template <typename S> - static XSD_AUTO_PTR<T> - create (istream<S>& s, flags f, container* c) - { - return XSD_AUTO_PTR<T> (new T (s, f, c)); - } - }; - - template <typename B, - typename C, - schema_type::value ST> - struct traits<simple_type<C, B>, C, ST> - { - typedef simple_type<C, B> type; - - static XSD_AUTO_PTR<type> - create (const xercesc::DOMElement& e, flags f, container* c) - { - return XSD_AUTO_PTR<type> ( - new type (e, f | flags::extract_content, c)); - } - - static XSD_AUTO_PTR<type> - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return XSD_AUTO_PTR<type> ( - new type (a, f | flags::extract_content, c)); - } - - static XSD_AUTO_PTR<type> - create (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - { - return XSD_AUTO_PTR<type> ( - new type (s, e, f | flags::extract_content, c)); - } - - template <typename S> - static XSD_AUTO_PTR<type> - create (istream<S>& s, flags f, container* c) - { - return XSD_AUTO_PTR<type> ( - new type (s, f | flags::extract_content, c)); - } - }; - //@endcond - - - /** - * @brief Class template that emulates inheritance from a - * fundamental C++ type. - * - * @nosubgrouping - */ - template <typename T, - typename C, - typename B, - schema_type::value ST = schema_type::other> - class fundamental_base: public B - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor. - */ - fundamental_base () - : facet_table_ (0), x_ () - { - } - - /** - * @brief Initialize an instance with an underlying type value. - * - * @param x An underlying type value. - */ - fundamental_base (T x) - : facet_table_ (0), x_ (x) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - fundamental_base (const fundamental_base& x, - flags f = 0, - container* c = 0) - : B (x, f, c), facet_table_ (0), x_ (x.x_) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual fundamental_base* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - fundamental_base (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - fundamental_base (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - fundamental_base (const xercesc::DOMAttr& a, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - fundamental_base (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign an underlying type value to the instance. - * - * @param x An underlying type value. - * @return A reference to the instance. - */ - fundamental_base& - operator= (const T& x) - { - if (&x_ != &x) - x_ = x; - - return *this; - } - - public: - /** - * @brief Implicitly convert the instance to constant reference to - * the underlying type. - * - * @return A constant reference to the underlying type. - */ - operator const T& () const - { - return x_; - } - - /** - * @brief Implicitly convert the instance to reference to the - * underlying type. - * - * @return A reference to the underlying type. - */ - operator T& () - { - return x_; - } - - // The following extra conversion operators causes problems on - // some compilers (notably VC 9.0) and are disabled by default. - // -#ifdef XSD_TREE_EXTRA_FUND_CONV - /** - * @brief Implicitly convert the instance to another type (const - * version). - * - * @return A value converted to the target type. - */ - template <typename T2> - operator T2 () const - { - return x_; - } - - /** - * @brief Implicitly convert the instance to another type. - * - * @return A value converted to the target type. - */ - template <typename T2> - operator T2 () - { - return x_; - } -#endif // XSD_TREE_EXTRA_FUND_CONV - - public: - /** - * @brief Get the facet table associated with this type. - * - * @return A pointer to read-only facet table or 0. - */ - const facet* - _facet_table () const - { - return facet_table_; - } - - protected: - /** - * @brief Set the facet table associated with this type. - * - * @param ft A pointer to read-only facet table. - */ - void - _facet_table (const facet* ft) - { - facet_table_ = ft; - } - - private: - const facet* facet_table_; - T x_; - }; - - // While thse operators are not normally necessary, they - // help resolve ambiguities between implicit conversion and - // construction. - // - - /** - * @brief %fundamental_base comparison operator. - * - * @return True if the underlying values are equal, false otherwise. - */ - template <typename T, typename C, typename B, schema_type::value ST> - inline bool - operator== (const fundamental_base<T, C, B, ST>& x, - const fundamental_base<T, C, B, ST>& y) - { - T x_ (x); - T y_ (y); - return x_ == y_; - } - - /** - * @brief %fundamental_base comparison operator. - * - * @return True if the underlying values are not equal, false otherwise. - */ - template <typename T, typename C, typename B, schema_type::value ST> - inline bool - operator!= (const fundamental_base<T, C, B, ST>& x, - const fundamental_base<T, C, B, ST>& y) - { - T x_ (x); - T y_ (y); - return x_ != y_; - } - - - //@cond - - // Comparator for enum tables. - // - template <typename C> - struct enum_comparator - { - enum_comparator (const C* const* table) - : table_ (table) - { - } - - bool - operator() (std::size_t i, const std::basic_string<C>& s) const - { - return table_[i] < s; - } - - bool - operator() (const std::basic_string<C>& s, std::size_t i) const - { - return s < table_[i]; - } - - // This overload shouldn't be necessary according to the standard - // and removing it doesn't appear to trip any old compilers that - // we still support. But let's keeps preprocessed-out until we - // go C++11-only. - // -#if 0 - bool - operator() (std::size_t i, std::size_t j) const - { - return std::basic_string<C> (table_[i]) < table_[j]; - } -#endif - - private: - const C* const* table_; - }; - - //@endcond - } - } -} - -#include <xsd/cxx/tree/elements.ixx> -#include <xsd/cxx/tree/elements.txx> - -#endif // XSD_CXX_TREE_ELEMENTS_HXX diff --git a/libxsd/xsd/cxx/tree/elements.ixx b/libxsd/xsd/cxx/tree/elements.ixx deleted file mode 100644 index 6e758e4..0000000 --- a/libxsd/xsd/cxx/tree/elements.ixx +++ /dev/null @@ -1,265 +0,0 @@ -// file : xsd/cxx/tree/elements.ixx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // content_order_type - // - - inline bool - operator== (const content_order& x, const content_order& y) - { - return x.id == y.id && x.index == y.index; - } - - inline bool - operator!= (const content_order& x, const content_order& y) - { - return !(x == y); - } - - inline bool - operator< (const content_order& x, const content_order& y) - { - return x.id < y.id || (x.id == y.id && x.index < y.index); - } - - // type - // - - inline _type:: - _type () - : container_ (0) - { - } - - template <typename C> - inline _type:: - _type (const C*) - : container_ (0) - { - } - - inline _type:: - _type (const type& x, flags f, container* c) - : container_ (c) - { - if (x.content_.get () != 0) - content_ = x.content_->clone (); - - if (x.dom_info_.get () != 0 && (f & flags::keep_dom)) - { - dom_info_ = x.dom_info_->clone (*this, c); - } - } - - inline const _type::dom_content_optional& _type:: - dom_content () const - { - const content_type* c (content_.get ()); - - if (c == 0) - { - content_.reset (new dom_content_type); - c = content_.get (); - } - - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<const dom_content_type*> (c) != 0); - - return static_cast<const dom_content_type*> (c)->dom; - } - - inline _type::dom_content_optional& _type:: - dom_content () - { - content_type* c (content_.get ()); - - if (c == 0) - { - content_.reset (new dom_content_type); - c = content_.get (); - } - - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<dom_content_type*> (c) != 0); - - return static_cast<dom_content_type*> (c)->dom; - } - - inline void _type:: - dom_content (const xercesc::DOMElement& e) - { - content_type* c (content_.get ()); - - if (c == 0) - content_.reset (new dom_content_type (e)); - else - { - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<dom_content_type*> (c) != 0); - static_cast<dom_content_type*> (c)->dom.set (e); - } - } - - inline void _type:: - dom_content (xercesc::DOMElement* e) - { - content_type* c (content_.get ()); - - if (c == 0) - content_.reset (new dom_content_type (e)); - else - { - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<dom_content_type*> (c) != 0); - static_cast<dom_content_type*> (c)->dom.set (e); - } - } - - inline void _type:: - dom_content (const dom_content_optional& d) - { - content_type* c (content_.get ()); - - if (c == 0) - content_.reset (new dom_content_type (d)); - else - { - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<dom_content_type*> (c) != 0); - static_cast<dom_content_type*> (c)->dom = d; - } - } - - inline const xercesc::DOMDocument& _type:: - dom_content_document () const - { - const content_type* c (content_.get ()); - - if (c == 0) - { - content_.reset (new dom_content_type); - c = content_.get (); - } - - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<const dom_content_type*> (c) != 0); - - return *static_cast<const dom_content_type*> (c)->doc; - } - - inline xercesc::DOMDocument& _type:: - dom_content_document () - { - content_type* c (content_.get ()); - - if (c == 0) - { - content_.reset (new dom_content_type); - c = content_.get (); - } - - // Accessing non-DOM content via the DOM API. - // - assert (dynamic_cast<dom_content_type*> (c) != 0); - - return *static_cast<dom_content_type*> (c)->doc; - } - - inline bool _type:: - null_content () const - { - return content_.get () == 0; - } - - // simple_type - // - - template <typename C, typename B> - inline simple_type<C, B>:: - simple_type () - { - } - - template <typename C, typename B> - inline simple_type<C, B>:: - simple_type (const C* s) - { - this->content_.reset (new text_content_type (s)); - } - - template <typename C, typename B> - inline simple_type<C, B>:: - simple_type (const std::basic_string<C>& s) - { - this->content_.reset (new text_content_type (s)); - } - - template <typename C, typename B> - inline const std::basic_string<C>& simple_type<C, B>:: - text_content () const - { - const content_type* c (this->content_.get ()); - - if (c == 0) - { - this->content_.reset (new text_content_type); - c = this->content_.get (); - } - - // Accessing non-text content via the text API. - // - assert (dynamic_cast<const text_content_type*> (c) != 0); - - return static_cast<const text_content_type*> (c)->text; - } - - template <typename C, typename B> - inline std::basic_string<C>& simple_type<C, B>:: - text_content () - { - content_type* c (this->content_.get ()); - - if (c == 0) - { - this->content_.reset (new text_content_type); - c = this->content_.get (); - } - - // Accessing non-text content via the text API. - // - assert (dynamic_cast<text_content_type*> (c) != 0); - - return static_cast<text_content_type*> (c)->text; - } - - template <typename C, typename B> - inline void simple_type<C, B>:: - text_content (const std::basic_string<C>& t) - { - content_type* c (this->content_.get ()); - - if (c == 0) - this->content_.reset (new text_content_type (t)); - else - { - // Accessing non-text content via the text API. - // - assert (dynamic_cast<text_content_type*> (c) != 0); - static_cast<text_content_type*> (c)->text = t; - } - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/elements.txx b/libxsd/xsd/cxx/tree/elements.txx deleted file mode 100644 index f57e3c8..0000000 --- a/libxsd/xsd/cxx/tree/elements.txx +++ /dev/null @@ -1,55 +0,0 @@ -// file : xsd/cxx/tree/elements.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/util/XMLUniDefs.hpp> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // user_data_keys_template - // - template <int dummy> - const XMLCh user_data_keys_template<dummy>::node[21] = - {xercesc::chLatin_x, xercesc::chLatin_s, xercesc::chLatin_d, // xsd - xercesc::chColon, xercesc::chColon, // :: - xercesc::chLatin_c, xercesc::chLatin_x, xercesc::chLatin_x, // cxx - xercesc::chColon, xercesc::chColon, // :: - xercesc::chLatin_t, xercesc::chLatin_r, xercesc::chLatin_e, // tre - xercesc::chLatin_e, xercesc::chColon, xercesc::chColon, // e:: - xercesc::chLatin_n, xercesc::chLatin_o, xercesc::chLatin_d, // nod - xercesc::chLatin_e, xercesc::chNull // e\0 - }; - - - // simple_type - // - template <typename C, typename B> - simple_type<C, B>:: - simple_type (const simple_type& other, - flags f, - container* c) - : B (other, f, c) - { - } - - template <typename C, typename B> - simple_type<C, B>* simple_type<C, B>:: - _clone (flags f, container* c) const - { - return new simple_type (*this, f, c); - } - - // fundamental_base - // - template <typename T, typename C, typename B, schema_type::value ST> - fundamental_base<T, C, B, ST>* fundamental_base<T, C, B, ST>:: - _clone (flags f, container* c) const - { - return new fundamental_base (*this, f, c); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/error-handler.hxx b/libxsd/xsd/cxx/tree/error-handler.hxx deleted file mode 100644 index 35cd85c..0000000 --- a/libxsd/xsd/cxx/tree/error-handler.hxx +++ /dev/null @@ -1,60 +0,0 @@ -// file : xsd/cxx/tree/error-handler.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ERROR_HANDLER_HXX -#define XSD_CXX_TREE_ERROR_HANDLER_HXX - -#include <xsd/cxx/xml/error-handler.hxx> - -#include <xsd/cxx/tree/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - class error_handler: public xml::error_handler<C> - { - public: - typedef typename xml::error_handler<C>::severity severity; - - error_handler () - : failed_ (false) - { - } - - virtual bool - handle (const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - severity, - const std::basic_string<C>& message); - - template <typename E> - void - throw_if_failed () const - { - if (failed_) - throw E (diagnostics_); - } - - void - reset () - { - failed_ = false; - diagnostics_.clear (); - } - - private: - bool failed_; - diagnostics<C> diagnostics_; - }; - } - } -} - -#include <xsd/cxx/tree/error-handler.txx> - -#endif // XSD_CXX_TREE_ERROR_HANDLER_HXX diff --git a/libxsd/xsd/cxx/tree/error-handler.txx b/libxsd/xsd/cxx/tree/error-handler.txx deleted file mode 100644 index 5fde8b7..0000000 --- a/libxsd/xsd/cxx/tree/error-handler.txx +++ /dev/null @@ -1,30 +0,0 @@ -// file : xsd/cxx/tree/error-handler.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - bool error_handler<C>:: - handle (const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - severity s, - const std::basic_string<C>& message) - { - diagnostics_.push_back ( - error<C> (s == severity::warning - ? tree::severity::warning - : tree::severity::error, id, line, column, message)); - - if (!failed_ && s != severity::warning) - failed_ = true; - - return true; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/exceptions.hxx b/libxsd/xsd/cxx/tree/exceptions.hxx deleted file mode 100644 index 928652f..0000000 --- a/libxsd/xsd/cxx/tree/exceptions.hxx +++ /dev/null @@ -1,1032 +0,0 @@ -// file : xsd/cxx/tree/exceptions.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -/** - * @file - * - * @brief Contains exception definitions for the C++/Tree mapping. - * - * This is an internal header and is included by the generated code. - * You normally should not include it directly. - * - */ - -#ifndef XSD_CXX_TREE_EXCEPTIONS_HXX -#define XSD_CXX_TREE_EXCEPTIONS_HXX - -#include <string> -#include <vector> -#include <ostream> - -#include <xsd/cxx/exceptions.hxx> // xsd::cxx::exception - -namespace xsd -{ - namespace cxx - { - /** - * @brief C++/Tree mapping runtime namespace. - * - * This is an internal namespace and normally should not be referenced - * directly. Instead you should use the aliases for types in this - * namespaces that are created in the generated code. - * - */ - namespace tree - { - /** - * @brief Root of the C++/Tree %exception hierarchy. - * - * You can catch this %exception in order to handle all C++/Tree - * errors. - * - * @nosubgrouping - */ - template <typename C> - class exception: public xsd::cxx::exception - { - public: - /** - * @brief Stream insertion operator for %exception. - */ - friend - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const exception& e) - { - e.print (os); - return os; - } - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const = 0; - - //@endcond - }; - - - /** - * @brief Error %severity. - * - * @nosubgrouping - */ - class severity - { - public: - /** - * @brief Underlying enum type. - */ - enum value - { - /** - * @brief Indicates the warning condition. - */ - warning, - - /** - * @brief Indicates the %error condition. - */ - error - }; - - /** - * @brief Initialize an instance with the underlying enum value. - * - * @param v An underlying enum value. - */ - severity (value v) : v_ (v) {} - - /** - * @brief Implicitly convert the instance to the underlying enum - * value. - * - * @return The underlying enum value. - */ - operator value () const { return v_; } - - private: - value v_; - }; - - /** - * @brief Error condition. - * - * @nosubgrouping - */ - template <typename C> - class error - { - public: - /** - * @brief Initialize an instance with %error description. - * - * @param s An %error %severity. - * @param res_id A resource %id where the %error occurred. - * @param line A line number where the %error occurred. - * @param column A column number where the %error occurred. - * @param message A message describing the %error. - */ - error (tree::severity s, - const std::basic_string<C>& res_id, - unsigned long line, - unsigned long column, - const std::basic_string<C>& message); - - /** - * @brief Get %error %severity. - * - * @return The %severity of this %error. - */ - tree::severity - severity () const - { - return severity_; - } - - /** - * @brief Get resource %id. - * - * @return The %id of the resource where this %error occurred. - */ - const std::basic_string<C>& - id () const - { - return id_; - } - - /** - * @brief Get %error line. - * - * @return The line number where this %error occurred. - */ - unsigned long - line () const - { - return line_; - } - - /** - * @brief Get %error column. - * - * @return The column number where this %error occurred. - */ - unsigned long - column () const - { - return column_; - } - - /** - * @brief Get %error message. - * - * @return The message for this %error. - */ - const std::basic_string<C>& - message () const - { - return message_; - } - - //@cond - - // Default c-tor that shouldn't be. Needed when we completely - // instantiate std::vector in diagnostics below. - // - error (); - - //@endcond - - - private: - tree::severity severity_; - std::basic_string<C> id_; - unsigned long line_; - unsigned long column_; - std::basic_string<C> message_; - }; - - // See exceptions.ixx for operator<< (error). - - - /** - * @brief List of %error conditions. - * - * @nosubgrouping - */ - template <typename C> - class diagnostics: public std::vector<error<C> > - { - }; - - // See exceptions.ixx for operator<< (diagnostics). - - /** - * @brief Exception indicating a %parsing failure. - * - * @nosubgrouping - */ - template <typename C> - class parsing: public exception<C> - { - public: - virtual - ~parsing () throw (); - - /** - * @brief Default constructor. - */ - parsing (); - - /** - * @brief Initialize an instance with a %list of %error conditions. - * - * @param d A %list of %error conditions. - */ - parsing (const tree::diagnostics<C>& d); - - public: - /** - * @brief Get the %list of %error conditions. - * - * @return The %list of %error conditions. - */ - const tree::diagnostics<C>& - diagnostics () const - { - return diagnostics_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - tree::diagnostics<C> diagnostics_; - }; - - - /** - * @brief Exception indicating that an expected element was not - * encountered. - * - * @nosubgrouping - */ - template <typename C> - class expected_element: public exception<C> - { - public: - virtual - ~expected_element () throw (); - - /** - * @brief Initialize an instance with the expected element - * description. - * - * @param name A name of the expected element. - * @param ns A namespace of the expected element. - */ - expected_element (const std::basic_string<C>& name, - const std::basic_string<C>& ns); - - - public: - /** - * @brief Get the name of the expected element. - * - * @return The name of the expected element. - */ - const std::basic_string<C>& - name () const - { - return name_; - } - - /** - * @brief Get the namespace of the expected element. - * - * @return The namespace of the expected element. - */ - const std::basic_string<C>& - namespace_ () const - { - return namespace__; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> name_; - std::basic_string<C> namespace__; - }; - - - /** - * @brief Exception indicating that an unexpected element was - * encountered. - * - * @nosubgrouping - */ - template <typename C> - class unexpected_element: public exception<C> - { - public: - virtual - ~unexpected_element () throw (); - - /** - * @brief Initialize an instance with the encountered and expected - * element descriptions. - * - * @param encountered_name A name of the encountered element. - * @param encountered_ns A namespace of the encountered element. - * @param expected_name A name of the expected element. - * @param expected_ns A namespace of the expected element. - */ - unexpected_element (const std::basic_string<C>& encountered_name, - const std::basic_string<C>& encountered_ns, - const std::basic_string<C>& expected_name, - const std::basic_string<C>& expected_ns); - - public: - /** - * @brief Get the name of the encountered element. - * - * @return The name of the encountered element. - */ - const std::basic_string<C>& - encountered_name () const - { - return encountered_name_; - } - - /** - * @brief Get the namespace of the encountered element. - * - * @return The namespace of the encountered element. - */ - const std::basic_string<C>& - encountered_namespace () const - { - return encountered_namespace_; - } - - /** - * @brief Get the name of the expected element. - * - * @return The name of the expected element. - */ - const std::basic_string<C>& - expected_name () const - { - return expected_name_; - } - - /** - * @brief Get the namespace of the expected element. - * - * @return The namespace of the expected element. - */ - const std::basic_string<C>& - expected_namespace () const - { - return expected_namespace_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> encountered_name_; - std::basic_string<C> encountered_namespace_; - std::basic_string<C> expected_name_; - std::basic_string<C> expected_namespace_; - }; - - - /** - * @brief Exception indicating that an expected attribute was not - * encountered. - * - * @nosubgrouping - */ - template <typename C> - class expected_attribute: public exception<C> - { - public: - virtual - ~expected_attribute () throw (); - - /** - * @brief Initialize an instance with the expected attribute - * description. - * - * @param name A name of the expected attribute. - * @param ns A namespace of the expected attribute. - */ - expected_attribute (const std::basic_string<C>& name, - const std::basic_string<C>& ns); - - public: - /** - * @brief Get the name of the expected attribute. - * - * @return The name of the expected attribute. - */ - const std::basic_string<C>& - name () const - { - return name_; - } - - /** - * @brief Get the namespace of the expected attribute. - * - * @return The namespace of the expected attribute. - */ - const std::basic_string<C>& - namespace_ () const - { - return namespace__; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> name_; - std::basic_string<C> namespace__; - }; - - - /** - * @brief Exception indicating that an unexpected enumerator was - * encountered. - * - * @nosubgrouping - */ - template <typename C> - class unexpected_enumerator: public exception<C> - { - public: - virtual - ~unexpected_enumerator () throw (); - - /** - * @brief Initialize an instance with the encountered enumerator. - * - * @param e A value of the encountered enumerator. - */ - unexpected_enumerator (const std::basic_string<C>& e); - - public: - /** - * @brief Get the value of the encountered enumerator. - * - * @return The value of the encountered enumerator. - */ - const std::basic_string<C>& - enumerator () const - { - return enumerator_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> enumerator_; - }; - - - /** - * @brief Exception indicating that the text content was expected - * for an element. - * - * @nosubgrouping - */ - template <typename C> - class expected_text_content: public exception<C> - { - public: - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - }; - - - /** - * @brief Exception indicating that the type information is not - * available for a type. - * - * @nosubgrouping - */ - template <typename C> - class no_type_info: public exception<C> - { - public: - virtual - ~no_type_info () throw (); - - /** - * @brief Initialize an instance with the type description. - * - * @param type_name A name of the type. - * @param type_ns A namespace of the type. - */ - no_type_info (const std::basic_string<C>& type_name, - const std::basic_string<C>& type_ns); - - public: - /** - * @brief Get the type name. - * - * @return The type name. - */ - const std::basic_string<C>& - type_name () const - { - return type_name_; - } - - /** - * @brief Get the type namespace. - * - * @return The type namespace. - */ - const std::basic_string<C>& - type_namespace () const - { - return type_namespace_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> type_name_; - std::basic_string<C> type_namespace_; - }; - - /** - * @brief Exception indicating that %parsing or %serialization - * information is not available for an element. - * - * @nosubgrouping - */ - template <typename C> - class no_element_info: public exception<C> - { - public: - virtual - ~no_element_info () throw (); - - /** - * @brief Initialize an instance with the element description. - * - * @param element_name An element name. - * @param element_ns An element namespace. - */ - no_element_info (const std::basic_string<C>& element_name, - const std::basic_string<C>& element_ns); - - public: - /** - * @brief Get the element name. - * - * @return The element name. - */ - const std::basic_string<C>& - element_name () const - { - return element_name_; - } - - /** - * @brief Get the element namespace. - * - * @return The element namespace. - */ - const std::basic_string<C>& - element_namespace () const - { - return element_namespace_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> element_name_; - std::basic_string<C> element_namespace_; - }; - - /** - * @brief Exception indicating that the types are not related by - * inheritance. - * - * @nosubgrouping - */ - template <typename C> - class not_derived: public exception<C> - { - public: - virtual - ~not_derived () throw (); - - //@cond - - // @@ tmp - // - not_derived () - { - } - - //@endcond - - /** - * @brief Initialize an instance with the type descriptions. - * - * @param base_type_name A name of the base type. - * @param base_type_ns A namespace of the base type. - * @param derived_type_name A name of the derived type. - * @param derived_type_ns A namespace of the derived type. - */ - not_derived (const std::basic_string<C>& base_type_name, - const std::basic_string<C>& base_type_ns, - const std::basic_string<C>& derived_type_name, - const std::basic_string<C>& derived_type_ns); - - public: - /** - * @brief Get the base type name. - * - * @return The base type name. - */ - const std::basic_string<C>& - base_type_name () const - { - return base_type_name_; - } - - /** - * @brief Get the base type namespace. - * - * @return The base type namespace. - */ - const std::basic_string<C>& - base_type_namespace () const - { - return base_type_namespace_; - } - - /** - * @brief Get the derived type name. - * - * @return The derived type name. - */ - const std::basic_string<C>& - derived_type_name () const - { - return derived_type_name_; - } - - /** - * @brief Get the derived type namespace. - * - * @return The derived type namespace. - */ - const std::basic_string<C>& - derived_type_namespace () const - { - return derived_type_namespace_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> base_type_name_; - std::basic_string<C> base_type_namespace_; - std::basic_string<C> derived_type_name_; - std::basic_string<C> derived_type_namespace_; - }; - - - /** - * @brief Exception indicating that a duplicate ID value was - * encountered in the object model. - * - * @nosubgrouping - */ - template <typename C> - class duplicate_id: public exception<C> - { - public: - virtual - ~duplicate_id () throw (); - - /** - * @brief Initialize an instance with the offending ID value. - * - * @param id An offending ID value. - */ - duplicate_id (const std::basic_string<C>& id); - - public: - /** - * @brief Get the offending ID value. - * - * @return The offending ID value. - */ - const std::basic_string<C>& - id () const - { - return id_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> id_; - }; - - - /** - * @brief Exception indicating a %serialization failure. - * - * @nosubgrouping - */ - template <typename C> - class serialization: public exception<C> - { - public: - virtual - ~serialization () throw (); - - /** - * @brief Default constructor. - */ - serialization (); - - /** - * @brief Initialize an instance with a %list of %error conditions. - * - * @param d A %list of %error conditions. - */ - serialization (const tree::diagnostics<C>& d); - - public: - /** - * @brief Get the %list of %error conditions. - * - * @return The %list of %error conditions. - */ - const tree::diagnostics<C>& - diagnostics () const - { - return diagnostics_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - tree::diagnostics<C> diagnostics_; - }; - - - /** - * @brief Exception indicating that a prefix-namespace mapping was - * not provided. - * - * @nosubgrouping - */ - template <typename C> - class no_prefix_mapping: public exception<C> - { - public: - virtual - ~no_prefix_mapping () throw (); - - /** - * @brief Initialize an instance with the prefix for which the - * prefix-namespace mapping was not provided. - * - * @param prefix A prefix. - */ - no_prefix_mapping (const std::basic_string<C>& prefix); - - public: - /** - * @brief Get the prefix for which the prefix-namespace mapping was - * not provided. - * - * @return The prefix. - */ - const std::basic_string<C>& - prefix () const - { - return prefix_; - } - - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - - private: - std::basic_string<C> prefix_; - }; - - - /** - * @brief Exception indicating that the size argument exceeds - * the capacity argument. - * - * See the buffer class for details. - * - * @nosubgrouping - */ - template <typename C> - class bounds: public exception<C> - { - public: - /** - * @brief Get %exception description. - * - * @return A C %string describing the %exception. - */ - virtual const char* - what () const throw (); - - protected: - //@cond - - virtual void - print (std::basic_ostream<C>&) const; - - //@endcond - }; - } - } -} - -#include <xsd/cxx/tree/exceptions.txx> - -#endif // XSD_CXX_TREE_EXCEPTIONS_HXX diff --git a/libxsd/xsd/cxx/tree/exceptions.txx b/libxsd/xsd/cxx/tree/exceptions.txx deleted file mode 100644 index 2ff645e..0000000 --- a/libxsd/xsd/cxx/tree/exceptions.txx +++ /dev/null @@ -1,508 +0,0 @@ -// file : xsd/cxx/tree/exceptions.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // error - // - template <typename C> - error<C>:: - error (tree::severity s, - const std::basic_string<C>& id, - unsigned long line, - unsigned long column, - const std::basic_string<C>& message) - : severity_ (s), - id_ (id), - line_ (line), - column_ (column), - message_ (message) - { - } - - template <typename C> - error<C>:: - error () - : severity_ (tree::severity::error), line_ (0), column_ (0) - { - } - - template <typename C> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const error<C>& e) - { - return os << e.id () << C (':') << e.line () << C (':') << e.column () - << (e.severity () == severity::error - ? bits::ex_error_error<C> () - : bits::ex_error_warning<C> ()) << e.message (); - } - - // diagnostics - // - template <typename C> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const diagnostics<C>& d) - { - for (typename diagnostics<C>::const_iterator b (d.begin ()), i (b); - i != d.end (); - ++i) - { - if (i != b) - os << C ('\n'); - - os << *i; - } - - return os; - } - - // parsing - // - template <typename C> - parsing<C>:: - ~parsing () throw () - { - } - - template <typename C> - parsing<C>:: - parsing () - { - } - - template <typename C> - parsing<C>:: - parsing (const tree::diagnostics<C>& diagnostics) - : diagnostics_ (diagnostics) - { - } - - template <typename C> - const char* parsing<C>:: - what () const throw () - { - return "instance document parsing failed"; - } - - template <typename C> - void parsing<C>:: - print (std::basic_ostream<C>& os) const - { - if (diagnostics_.empty ()) - os << bits::ex_parsing_msg<C> (); - else - os << diagnostics_; - } - - // expected_element - // - template <typename C> - expected_element<C>:: - ~expected_element () throw () - { - } - - template <typename C> - expected_element<C>:: - expected_element (const std::basic_string<C>& name, - const std::basic_string<C>& namespace_) - : name_ (name), namespace__ (namespace_) - { - } - - template <typename C> - const char* expected_element<C>:: - what () const throw () - { - return "expected element not encountered"; - } - - template <typename C> - void expected_element<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_eel_expected<C> (); - - if (!namespace_ ().empty ()) - os << namespace_ () << C ('#'); - - os << name () << C ('\''); - } - - // unexpected_element - // - template <typename C> - unexpected_element<C>:: - ~unexpected_element () throw () - { - } - - template <typename C> - unexpected_element<C>:: - unexpected_element (const std::basic_string<C>& encountered_name, - const std::basic_string<C>& encountered_namespace, - const std::basic_string<C>& expected_name, - const std::basic_string<C>& expected_namespace) - : encountered_name_ (encountered_name), - encountered_namespace_ (encountered_namespace), - expected_name_ (expected_name), - expected_namespace_ (expected_namespace) - { - } - - template <typename C> - const char* unexpected_element<C>:: - what () const throw () - { - return "unexpected element encountered"; - } - - template <typename C> - void unexpected_element<C>:: - print (std::basic_ostream<C>& os) const - { - if (!expected_name ().empty ()) - { - os << bits::ex_uel_expected<C> (); - - if (!expected_namespace ().empty ()) - os << expected_namespace () << C ('#'); - - os << expected_name () << bits::ex_uel_instead<C> (); - - if (!encountered_namespace ().empty ()) - os << encountered_namespace () << C ('#'); - - os << encountered_name () << C ('\''); - } - else - { - os << bits::ex_uel_unexpected<C> (); - - if (!encountered_namespace ().empty ()) - os << encountered_namespace () << C ('#'); - - os << encountered_name () << C ('\''); - } - } - - // expected_attribute - // - template <typename C> - expected_attribute<C>:: - ~expected_attribute () throw () - { - } - - template <typename C> - expected_attribute<C>:: - expected_attribute (const std::basic_string<C>& name, - const std::basic_string<C>& namespace_) - : name_ (name), namespace__ (namespace_) - { - } - - template <typename C> - const char* expected_attribute<C>:: - what () const throw () - { - return "expected attribute not encountered"; - } - - template <typename C> - void expected_attribute<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_eat_expected<C> (); - - if (!namespace_ ().empty ()) - os << namespace_ () << C ('#'); - - os << name () << C ('\''); - } - - // unexpected_enumerator - // - template <typename C> - unexpected_enumerator<C>:: - ~unexpected_enumerator () throw () - { - } - - template <typename C> - unexpected_enumerator<C>:: - unexpected_enumerator (const std::basic_string<C>& enumerator) - : enumerator_ (enumerator) - { - } - - template <typename C> - const char* unexpected_enumerator<C>:: - what () const throw () - { - return "unexpected enumerator encountered"; - } - - template <typename C> - void unexpected_enumerator<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_uen_unexpected<C> () << enumerator () << C ('\''); - } - - // expected_text_content - // - template <typename C> - const char* expected_text_content<C>:: - what () const throw () - { - return "expected text content"; - } - - template <typename C> - void expected_text_content<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_etc_msg<C> (); - } - - // no_type_info - // - template <typename C> - no_type_info<C>:: - ~no_type_info () throw () - { - } - - template <typename C> - no_type_info<C>:: - no_type_info (const std::basic_string<C>& type_name, - const std::basic_string<C>& type_namespace) - : type_name_ (type_name), - type_namespace_ (type_namespace) - { - } - - template <typename C> - const char* no_type_info<C>:: - what () const throw () - { - return "no type information available for a type"; - } - - template <typename C> - void no_type_info<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_nti_no_type_info<C> (); - - if (!type_namespace ().empty ()) - os << type_namespace () << C ('#'); - - os << type_name () << C ('\''); - } - - // no_element_info - // - template <typename C> - no_element_info<C>:: - ~no_element_info () throw () - { - } - - template <typename C> - no_element_info<C>:: - no_element_info (const std::basic_string<C>& element_name, - const std::basic_string<C>& element_namespace) - : element_name_ (element_name), - element_namespace_ (element_namespace) - { - } - - template <typename C> - const char* no_element_info<C>:: - what () const throw () - { - return "no parsing or serialization information available for " - "an element"; - } - - template <typename C> - void no_element_info<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_nei_no_element_info<C> (); - - if (!element_namespace ().empty ()) - os << element_namespace () << C ('#'); - - os << element_name () << C ('\''); - } - - // not_derived - // - template <typename C> - not_derived<C>:: - ~not_derived () throw () - { - } - - template <typename C> - not_derived<C>:: - not_derived (const std::basic_string<C>& base_type_name, - const std::basic_string<C>& base_type_namespace, - const std::basic_string<C>& derived_type_name, - const std::basic_string<C>& derived_type_namespace) - : base_type_name_ (base_type_name), - base_type_namespace_ (base_type_namespace), - derived_type_name_ (derived_type_name), - derived_type_namespace_ (derived_type_namespace) - { - } - - template <typename C> - const char* not_derived<C>:: - what () const throw () - { - return "type is not derived"; - } - - template <typename C> - void not_derived<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_nd_type<C> (); - - if (!derived_type_namespace ().empty ()) - os << derived_type_namespace () << C ('#'); - - os << derived_type_name () << bits::ex_nd_not_derived<C> (); - - if (!base_type_namespace ().empty ()) - os << base_type_namespace () << C ('#'); - - os << base_type_name () << C ('\''); - } - - // duplicate_id - // - template <typename C> - duplicate_id<C>:: - ~duplicate_id () throw () - { - } - - template <typename C> - duplicate_id<C>:: - duplicate_id (const std::basic_string<C>& id) - : id_ (id) - { - } - - template <typename C> - const char* duplicate_id<C>:: - what () const throw () - { - return "ID already exist"; - } - - template <typename C> - void duplicate_id<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_di_id<C> () << id () << bits::ex_di_already_exist<C> (); - } - - // serialization - // - template <typename C> - serialization<C>:: - ~serialization () throw () - { - } - - template <typename C> - serialization<C>:: - serialization () - { - } - - template <typename C> - serialization<C>:: - serialization (const tree::diagnostics<C>& diagnostics) - : diagnostics_ (diagnostics) - { - } - - template <typename C> - const char* serialization<C>:: - what () const throw () - { - return "serialization failed"; - } - - template <typename C> - void serialization<C>:: - print (std::basic_ostream<C>& os) const - { - if (diagnostics_.empty ()) - os << bits::ex_serialization_msg<C> (); - else - os << diagnostics_; - } - - - // no_prefix_mapping - // - template <typename C> - no_prefix_mapping<C>:: - ~no_prefix_mapping () throw () - { - } - - template <typename C> - no_prefix_mapping<C>:: - no_prefix_mapping (const std::basic_string<C>& prefix) - : prefix_ (prefix) - { - } - - template <typename C> - const char* no_prefix_mapping<C>:: - what () const throw () - { - return "no mapping provided for a namespace prefix"; - } - - template <typename C> - void no_prefix_mapping<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_npm_no_mapping<C> () << prefix () << C ('\''); - } - - - // bounds - // - template <typename C> - const char* bounds<C>:: - what () const throw () - { - return "buffer boundary rules have been violated"; - } - - template <typename C> - void bounds<C>:: - print (std::basic_ostream<C>& os) const - { - os << bits::ex_bounds_msg<C> (); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/facet.hxx b/libxsd/xsd/cxx/tree/facet.hxx deleted file mode 100644 index d0a5d8c..0000000 --- a/libxsd/xsd/cxx/tree/facet.hxx +++ /dev/null @@ -1,41 +0,0 @@ -// file : xsd/cxx/tree/facet.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_FACET_HXX -#define XSD_CXX_TREE_FACET_HXX - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // We need to keep this type POD in order to be able to create a - // static array. - // - struct facet - { - enum id_type - { - none, - total_digits, - fraction_digits - }; - - id_type id; - unsigned long value; - - static const facet* - find (const facet* facets, facet::id_type id) - { - while (facets->id != id && facets->id != none) - ++facets; - - return facets->id != none ? facets : 0; - } - }; - } - } -} - -#endif // XSD_CXX_TREE_FACET_HXX diff --git a/libxsd/xsd/cxx/tree/istream-fwd.hxx b/libxsd/xsd/cxx/tree/istream-fwd.hxx deleted file mode 100644 index 801b89d..0000000 --- a/libxsd/xsd/cxx/tree/istream-fwd.hxx +++ /dev/null @@ -1,19 +0,0 @@ -// file : xsd/cxx/tree/istream-fwd.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ISTREAM_FWD_HXX -#define XSD_CXX_TREE_ISTREAM_FWD_HXX - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template<typename S> - class istream; - } - } -} - -#endif // XSD_CXX_TREE_ISTREAM_FWD_HXX diff --git a/libxsd/xsd/cxx/tree/istream.hxx b/libxsd/xsd/cxx/tree/istream.hxx deleted file mode 100644 index c50a122..0000000 --- a/libxsd/xsd/cxx/tree/istream.hxx +++ /dev/null @@ -1,453 +0,0 @@ -// file : xsd/cxx/tree/istream.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ISTREAM_HXX -#define XSD_CXX_TREE_ISTREAM_HXX - -#include <map> -#include <string> -#include <memory> // std::auto_ptr/unique_ptr -#include <cstddef> // std::size_t - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/tree/istream-fwd.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - class istream_common - { - public: - template <typename T> - struct as_size - { - explicit as_size (T& x) : x_ (x) {} - T& x_; - }; - - - // 8-bit - // - template <typename T> - struct as_int8 - { - explicit as_int8 (T& x) : x_ (x) {} - T& x_; - }; - - template <typename T> - struct as_uint8 - { - explicit as_uint8 (T& x) : x_ (x) {} - T& x_; - }; - - - // 16-bit - // - template <typename T> - struct as_int16 - { - explicit as_int16 (T& x) : x_ (x) {} - T& x_; - }; - - template <typename T> - struct as_uint16 - { - explicit as_uint16 (T& x) : x_ (x) {} - T& x_; - }; - - - // 32-bit - // - template <typename T> - struct as_int32 - { - explicit as_int32 (T& x) : x_ (x) {} - T& x_; - }; - - template <typename T> - struct as_uint32 - { - explicit as_uint32 (T& x) : x_ (x) {} - T& x_; - }; - - - // 64-bit - // - template <typename T> - struct as_int64 - { - explicit as_int64 (T& x) : x_ (x) {} - T& x_; - }; - - template <typename T> - struct as_uint64 - { - explicit as_uint64 (T& x) : x_ (x) {} - T& x_; - }; - - - // Boolean - // - template <typename T> - struct as_bool - { - explicit as_bool (T& x) : x_ (x) {} - T& x_; - }; - - - // Floating-point - // - template <typename T> - struct as_float32 - { - explicit as_float32 (T& x) : x_ (x) {} - T& x_; - }; - - template <typename T> - struct as_float64 - { - explicit as_float64 (T& x) : x_ (x) {} - T& x_; - }; - }; - - template<typename S> - class istream: public istream_common - { - public: - explicit - istream (S& s) - : s_ (s) - { - } - - S& - impl () - { - return s_; - } - - // Add string to the pool. The application should add every - // potentially pooled string to correctly re-create the pool - // constructed during insertion. - // - template <typename C> - void - pool_add (const std::basic_string<C>& s) - { - typedef pool_impl<C> pool_type; - - if (pool_.get () == 0) - pool_.reset (new pool_type); - - pool_type& p (*static_cast<pool_type*> (pool_.get ())); - p.push_back (s); - } - - // Get string from pool id. We return the result via an argument - // instead of as a return type to avoid difficulties some compilers - // (e.g., GCC) experience with calls like istream<S>::pool_string<C>. - // - template <typename C> - void - pool_string (std::size_t id, std::basic_string<C>& out) - { - typedef pool_impl<C> pool_type; - pool_type& p (*static_cast<pool_type*> (pool_.get ())); - out = p[id - 1]; - } - - public: - // 8-bit - // - signed char - read_char (); - - unsigned char - read_uchar (); - - // 16-bit - // - unsigned short - read_short (); - - unsigned short - read_ushort (); - - // 32-bit - // - unsigned int - read_int (); - - unsigned int - read_uint (); - - // 64-bit - // - unsigned long long - read_ulonglong (); - - unsigned long long - read_longlong (); - - // Boolean - // - bool - read_bool (); - - // Floating-point - // - float - read_float (); - - double - read_double (); - - private: - istream (const istream&); - istream& - operator= (const istream&); - - private: - struct pool - { - virtual - ~pool () {} - }; - - template <typename C> - struct pool_impl: pool, std::vector<std::basic_string<C> > - { - }; - - S& s_; - std::size_t seq_; - XSD_AUTO_PTR<pool> pool_; - }; - - - // 8-bit - // - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, signed char& x) - { - istream_common::as_int8<signed char> as_int8 (x); - return s >> as_int8; - } - - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, unsigned char& x) - { - istream_common::as_uint8<unsigned char> as_uint8 (x); - return s >> as_uint8; - } - - - // 16-bit - // - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, short& x) - { - istream_common::as_int16<short> as_int16 (x); - return s >> as_int16; - } - - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, unsigned short& x) - { - istream_common::as_uint16<unsigned short> as_uint16 (x); - return s >> as_uint16; - } - - - // 32-bit - // - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, int& x) - { - istream_common::as_int32<int> as_int32 (x); - return s >> as_int32; - } - - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, unsigned int& x) - { - istream_common::as_uint32<unsigned int> as_uint32 (x); - return s >> as_uint32; - } - - - // 64-bit - // - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, long long& x) - { - istream_common::as_int64<long long> as_int64 (x); - return s >> as_int64; - } - - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, unsigned long long& x) - { - istream_common::as_uint64<unsigned long long> as_uint64 (x); - return s >> as_uint64; - } - - // Boolean - // - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, bool& x) - { - istream_common::as_bool<bool> as_bool (x); - return s >> as_bool; - } - - - // Floating-point - // - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, float& x) - { - istream_common::as_float32<float> as_float32 (x); - return s >> as_float32; - } - - template <typename S> - inline istream<S>& - operator>> (istream<S>& s, double& x) - { - istream_common::as_float64<double> as_float64 (x); - return s >> as_float64; - } - - // - // read_* functions. - // - - template <typename S> - inline signed char istream<S>:: - read_char () - { - signed char r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned char istream<S>:: - read_uchar () - { - unsigned char r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned short istream<S>:: - read_short () - { - short r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned short istream<S>:: - read_ushort () - { - unsigned short r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned int istream<S>:: - read_int () - { - int r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned int istream<S>:: - read_uint () - { - unsigned int r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned long long istream<S>:: - read_ulonglong () - { - long long r; - *this >> r; - return r; - } - - template <typename S> - inline unsigned long long istream<S>:: - read_longlong () - { - unsigned long long r; - *this >> r; - return r; - } - - template <typename S> - inline bool istream<S>:: - read_bool () - { - bool r; - *this >> r; - return r; - } - - template <typename S> - inline float istream<S>:: - read_float () - { - float r; - *this >> r; - return r; - } - - template <typename S> - inline double istream<S>:: - read_double () - { - double r; - *this >> r; - return r; - } - } - } -} - -#endif // XSD_CXX_TREE_ISTREAM_HXX diff --git a/libxsd/xsd/cxx/tree/iterator-adapter.hxx b/libxsd/xsd/cxx/tree/iterator-adapter.hxx deleted file mode 100644 index d1f5d51..0000000 --- a/libxsd/xsd/cxx/tree/iterator-adapter.hxx +++ /dev/null @@ -1,269 +0,0 @@ -// file : xsd/cxx/tree/iterator-adapter.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_ITERATOR_ADAPTER_HXX -#define XSD_CXX_TREE_ITERATOR_ADAPTER_HXX - -#include <cstddef> // std::ptrdiff_t -#include <iterator> // std::iterator_traits - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Sun CC's <iterator> does not have iterator_traits. To overcome - // this, we will wrap std::iterator_traits into our own and also - // specialize it for pointer types. Since Sun CC uses pointer - // for vector::iterator, it will use the specialization and won't - // notice the std::iterator_traits. - // -#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC - template <typename I> - struct iterator_traits - { - typedef - typename std::iterator_traits<I>::iterator_category - iterator_category; - - typedef - typename std::iterator_traits<I>::value_type - value_type; - - typedef - typename std::iterator_traits<I>::difference_type - difference_type; - }; -#else - // The Pointer specialization does not work for reverse and - // set iterators. But these iterators are user-dfined types - // and have suitable typedefs that we can use. - // - template <typename I> - struct iterator_traits - { - typedef typename I::iterator_category iterator_category; - typedef typename I::value_type value_type; - typedef typename I::difference_type difference_type; - }; - - template <typename T> - struct iterator_traits<T*> - { - typedef std::random_access_iterator_tag iterator_category; - typedef T value_type; - typedef std::ptrdiff_t difference_type; - }; -#endif - - // Iterator adapter for complex types. It expects I to point to - // a smart pointer-like object that has operator*() that returns - // a refernce to a type static_cast'able to T and get() that - // returns a pointer to a type static_cast'able to T. - // - - template <typename I, typename T> - struct iterator_adapter - { - typedef T value_type; - typedef value_type& reference; - typedef value_type* pointer; - - typedef - typename iterator_traits<I>::iterator_category - iterator_category; - - typedef - typename iterator_traits<I>::difference_type - difference_type; - - - public: - iterator_adapter () - : i_ () // i_ can be of a pointer type. - { - } - - // Allow iterator to const_iterator conversion. - // - template <typename J, typename T2> - iterator_adapter (const iterator_adapter<J, T2>& j) - : i_ (j.base ()) - { - } - - explicit - iterator_adapter (const I& i) - : i_ (i) - { - } - - public: - // Forward iterator requirements. - // - reference - operator* () const - { - return static_cast<reference> (**i_); - } - - pointer - operator-> () const - { - return static_cast<pointer> (i_->get ()); - } - - iterator_adapter& - operator++ () - { - ++i_; - return *this; - } - - iterator_adapter - operator++ (int) - { - iterator_adapter r (*this); - ++i_; - return r; - } - - // Bidirectional iterator requirements. - // - iterator_adapter& - operator-- () - { - --i_; - return *this; - } - - iterator_adapter - operator-- (int) - { - iterator_adapter r (*this); - --i_; - return r; - } - - // Random access iterator requirements. - // - reference - operator[] (difference_type n) const - { - return static_cast<reference> (*(i_[n])); - } - - iterator_adapter& - operator+= (difference_type n) - { - i_ += n; - return *this; - } - - iterator_adapter - operator+ (difference_type n) const - { - return iterator_adapter (i_ + n); - } - - iterator_adapter& - operator-= (difference_type n) - { - i_ -= n; - return *this; - } - - iterator_adapter - operator- (difference_type n) const - { - return iterator_adapter (i_ - n); - } - - public: - const I& - base () const - { - return i_; - } - - private: - I i_; - }; - - // Note: We use different types for left- and right-hand-side - // arguments to allow comparison between iterator and const_iterator. - // - - // Forward iterator requirements. - // - template <typename I, typename J, typename T1, typename T2> - inline bool - operator== (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () == j.base (); - } - - template <typename I, typename J, typename T1, typename T2> - inline bool - operator!= (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () != j.base (); - } - - // Random access iterator requirements - // - template <typename I, typename J, typename T1, typename T2> - inline bool - operator< (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () < j.base (); - } - - template <typename I, typename J, typename T1, typename T2> - inline bool - operator> (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () > j.base (); - } - - template <typename I, typename J, typename T1, typename T2> - inline bool - operator<= (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () <= j.base (); - } - - template <typename I, typename J, typename T1, typename T2> - inline bool - operator>= (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () >= j.base (); - } - - template <typename I, typename J, typename T1, typename T2> - inline typename iterator_adapter<I, T1>::difference_type - operator- (const iterator_adapter<I, T1>& i, - const iterator_adapter<J, T2>& j) - { - return i.base () - j.base (); - } - - template <typename I, typename T> - inline iterator_adapter<I, T> - operator+ (typename iterator_adapter<I, T>::difference_type n, - const iterator_adapter<I, T>& i) - { - return iterator_adapter<I, T> (i.base () + n); - } - } - } -} - -#endif // XSD_CXX_TREE_ITERATOR_ADAPTER_HXX diff --git a/libxsd/xsd/cxx/tree/list.hxx b/libxsd/xsd/cxx/tree/list.hxx deleted file mode 100644 index f83297a..0000000 --- a/libxsd/xsd/cxx/tree/list.hxx +++ /dev/null @@ -1,133 +0,0 @@ -// file : xsd/cxx/tree/list.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_LIST_HXX -#define XSD_CXX_TREE_LIST_HXX - -#include <string> - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/istream-fwd.hxx> // tree::istream -#include <xsd/cxx/tree/containers.hxx> // fundamental_p, sequence - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Class template for xsd:list mapping. Based on the sequence - // template. - // - template <typename T, - typename C, - schema_type::value ST = schema_type::other, - bool fund = fundamental_p<T>::r> - class list; - - - // - // - template <typename T, typename C, schema_type::value ST> - class list<T, C, ST, false>: public sequence<T> - { - public: - explicit - list (container* c = 0) - : sequence<T> (c) - { - } - - list (typename sequence<T>::size_type n, - const T& x, - container* c = 0) - : sequence<T> (n, x, c) - { - } - - template<typename I> - list (const I& b, const I& e, container* c = 0) - : sequence<T> (b, e, c) - { - } - - template <typename S> - list (istream<S>&, flags = 0, container* c = 0); - - list (const list<T, C, ST, false>& l, flags f = 0, container* c = 0) - : sequence<T> (l, f, c) - { - } - - public: - list (const xercesc::DOMElement&, flags = 0, container* c = 0); - - list (const xercesc::DOMAttr&, flags = 0, container* c = 0); - - list (const std::basic_string<C>&, - const xercesc::DOMElement*, - flags = 0, - container* c = 0); - - private: - void - init (const std::basic_string<C>&, - const xercesc::DOMElement*, - flags); - }; - - - // - // - template <typename T, typename C, schema_type::value ST> - class list<T, C, ST, true>: public sequence<T> - { - public: - explicit - list (container* c = 0) - : sequence<T> (c) - { - } - - explicit - list (typename sequence<T>::size_type n, const T& x, container* c = 0) - : sequence<T> (n, x, c) - { - } - - template<typename I> - list (const I& b, const I& e, container* c = 0) - : sequence<T> (b, e, c) - { - } - - template <typename S> - list (istream<S>&, flags = 0, container* c = 0); - - list (const list<T, C, ST, true>& l, flags f = 0, container* c = 0) - : sequence<T> (l, f, c) - { - } - - public: - list (const xercesc::DOMElement&, flags = 0, container* c = 0); - - list (const xercesc::DOMAttr&, flags = 0, container* c = 0); - - list (const std::basic_string<C>&, - const xercesc::DOMElement*, - flags = 0, - container* c = 0); - - private: - void - init (const std::basic_string<C>&, const xercesc::DOMElement*); - }; - } - } -} - -#endif // XSD_CXX_TREE_LIST_HXX diff --git a/libxsd/xsd/cxx/tree/ostream.hxx b/libxsd/xsd/cxx/tree/ostream.hxx deleted file mode 100644 index 179dba0..0000000 --- a/libxsd/xsd/cxx/tree/ostream.hxx +++ /dev/null @@ -1,290 +0,0 @@ -// file : xsd/cxx/tree/ostream.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_OSTREAM_HXX -#define XSD_CXX_TREE_OSTREAM_HXX - -#include <map> -#include <string> -#include <memory> // std::auto_ptr/unique_ptr -#include <cstddef> // std::size_t - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -namespace xsd -{ - namespace cxx - { - namespace tree - { - class ostream_common - { - public: - template <typename T> - struct as_size - { - explicit as_size (T x) : x_ (x) {} - T x_; - }; - - - // 8-bit - // - template <typename T> - struct as_int8 - { - explicit as_int8 (T x) : x_ (x) {} - T x_; - }; - - template <typename T> - struct as_uint8 - { - explicit as_uint8 (T x) : x_ (x) {} - T x_; - }; - - - // 16-bit - // - template <typename T> - struct as_int16 - { - explicit as_int16 (T x) : x_ (x) {} - T x_; - }; - - template <typename T> - struct as_uint16 - { - explicit as_uint16 (T x) : x_ (x) {} - T x_; - }; - - - // 32-bit - // - template <typename T> - struct as_int32 - { - explicit as_int32 (T x) : x_ (x) {} - T x_; - }; - - template <typename T> - struct as_uint32 - { - explicit as_uint32 (T x) : x_ (x) {} - T x_; - }; - - - // 64-bit - // - template <typename T> - struct as_int64 - { - explicit as_int64 (T x) : x_ (x) {} - T x_; - }; - - template <typename T> - struct as_uint64 - { - explicit as_uint64 (T x) : x_ (x) {} - T x_; - }; - - - // Boolean - // - template <typename T> - struct as_bool - { - explicit as_bool (T x) : x_ (x) {} - T x_; - }; - - - // Floating-point - // - template <typename T> - struct as_float32 - { - explicit as_float32 (T x) : x_ (x) {} - T x_; - }; - - template <typename T> - struct as_float64 - { - explicit as_float64 (T x) : x_ (x) {} - T x_; - }; - }; - - template<typename S> - class ostream: public ostream_common - { - public: - explicit - ostream (S& s) - : s_ (s), seq_ (1) - { - } - - S& - impl () - { - return s_; - } - - // If the string is not in the pool, add it and return 0. Otherwise - // return the string's pool id. In the former case the application - // should serialize the original string. - // - // The returned ids are sequential and start with 1. 0 is reserved - // as a special marker to be used by the application for the first - // encounter of the string. - // - template <typename C> - std::size_t - pool_string (const std::basic_string<C>& s) - { - typedef pool_impl<C> pool_type; - - if (pool_.get () == 0) - pool_.reset (new pool_type); - - pool_type& p (*static_cast<pool_type*> (pool_.get ())); - - std::pair<typename pool_type::iterator, bool> r ( - p.insert (std::pair<std::basic_string<C>, std::size_t> (s, seq_))); - - if (!r.second) - return r.first->second; - - seq_++; - return 0; - } - - private: - ostream (const ostream&); - ostream& - operator= (const ostream&); - - private: - struct pool - { - virtual - ~pool () {} - }; - - template <typename C> - struct pool_impl: pool, std::map<std::basic_string<C>, std::size_t> - { - }; - - S& s_; - std::size_t seq_; - XSD_AUTO_PTR<pool> pool_; - }; - - - // 8-bit - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, signed char x) - { - return s << ostream_common::as_int8<signed char> (x); - } - - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, unsigned char x) - { - return s << ostream_common::as_uint8<unsigned char> (x); - } - - - // 16-bit - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, short x) - { - return s << ostream_common::as_int16<short> (x); - } - - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, unsigned short x) - { - return s << ostream_common::as_uint16<unsigned short> (x); - } - - - // 32-bit - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, int x) - { - return s << ostream_common::as_int32<int> (x); - } - - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, unsigned int x) - { - return s << ostream_common::as_uint32<unsigned int> (x); - } - - - // 64-bit - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, long long x) - { - return s << ostream_common::as_int64<long long> (x); - } - - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, unsigned long long x) - { - return s << ostream_common::as_uint64<unsigned long long> (x); - } - - // Boolean - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, bool x) - { - return s << ostream_common::as_bool<bool> (x); - } - - - // Floating-point - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, float x) - { - return s << ostream_common::as_float32<float> (x); - } - - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, double x) - { - return s << ostream_common::as_float64<double> (x); - } - } - } -} - -#endif // XSD_CXX_TREE_OSTREAM_HXX diff --git a/libxsd/xsd/cxx/tree/parsing.hxx b/libxsd/xsd/cxx/tree/parsing.hxx deleted file mode 100644 index 388e364..0000000 --- a/libxsd/xsd/cxx/tree/parsing.hxx +++ /dev/null @@ -1,10 +0,0 @@ -// file : xsd/cxx/tree/parsing.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_HXX -#define XSD_CXX_TREE_PARSING_HXX - -#include <xsd/cxx/tree/parsing.txx> -#include <xsd/cxx/tree/parsing/date-time.txx> - -#endif // XSD_CXX_TREE_PARSING_HXX diff --git a/libxsd/xsd/cxx/tree/parsing.txx b/libxsd/xsd/cxx/tree/parsing.txx deleted file mode 100644 index 6dd2fc1..0000000 --- a/libxsd/xsd/cxx/tree/parsing.txx +++ /dev/null @@ -1,918 +0,0 @@ -// file : xsd/cxx/tree/parsing.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <string> - -#include <xsd/cxx/ro-string.hxx> // trim - -#include <xsd/cxx/xml/string.hxx> // xml::{string, transcode} -#include <xsd/cxx/xml/elements.hxx> // xml::{prefix, uq_name} -#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_prefix, - // xml_namespace} - -#include <xsd/cxx/tree/exceptions.hxx> // no_prefix_mapping -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/list.hxx> -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Note that most of the types implemented here (except string, - // (normalizedString, and base64Binary) cannot have whitespaces - // in the value. As result we don't need to waste time collapsing - // whitespaces. All we need to do is trim the string representation - // which can be done without copying. - // - - // type - // - inline _type:: - _type (const xercesc::DOMElement& e, flags f, container* c) - : container_ (c) - { - if (f & flags::extract_content) - content_.reset (new dom_content_type (e)); - - if (f & flags::keep_dom) - dom_info_ = dom_info_factory::create (e, *this, c == 0); - } - - inline _type:: - _type (const xercesc::DOMAttr& a, flags f, container* c) - : container_ (c) - { - // anyType cannot be an attribute type so no content extraction. - - if (f & flags::keep_dom) - dom_info_ = dom_info_factory::create (a, *this); - } - - template <typename C> - inline _type:: - _type (const std::basic_string<C>&, - const xercesc::DOMElement*, - flags, - container* c) - : container_ (c) // List elements don't have associated DOM nodes. - { - // anyType cannot be a list element type so no content extraction. - } - - // simple_type - // - template <typename C, typename B> - inline simple_type<C, B>:: - simple_type (const xercesc::DOMElement& e, flags f, container* c) - : B (e, (f & ~flags::extract_content), c) - { - if (f & flags::extract_content) - this->content_.reset ( - new text_content_type (tree::text_content<C> (e))); - } - - template <typename C, typename B> - inline simple_type<C, B>:: - simple_type (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, (f & ~flags::extract_content), c) - { - if (f & flags::extract_content) - this->content_.reset (new text_content_type ( - xml::transcode<C> (a.getValue ()))); - } - - template <typename C, typename B> - inline simple_type<C, B>:: - simple_type (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, (f & ~flags::extract_content), c) - { - if (f & flags::extract_content) - this->content_.reset (new text_content_type (s)); - } - - // fundamental_base - // - template <typename T, typename C, typename B, schema_type::value ST> - fundamental_base<T, C, B, ST>:: - fundamental_base (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c), - facet_table_ (0), - x_ (traits<T, C, ST>::create (e, f, c)) - { - } - - template <typename T, typename C, typename B, schema_type::value ST> - fundamental_base<T, C, B, ST>:: - fundamental_base (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c), - facet_table_ (0), - x_ (traits<T, C, ST>::create (a, f, c)) - { - } - - template <typename T, typename C, typename B, schema_type::value ST> - fundamental_base<T, C, B, ST>:: - fundamental_base (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c), - facet_table_ (0), - x_ (traits<T, C, ST>::create (s, e, f, c)) - { - } - - - // Parsing c-tors for list. - // - - namespace bits - { - // Find first non-space character. - // - template <typename C> - typename std::basic_string<C>::size_type - find_ns (const C* s, - typename std::basic_string<C>::size_type size, - typename std::basic_string<C>::size_type pos) - { - while (pos < size && - (s[pos] == C (0x20) || // space - s[pos] == C (0x0D) || // carriage return - s[pos] == C (0x09) || // tab - s[pos] == C (0x0A))) - ++pos; - - return pos < size ? pos : std::basic_string<C>::npos; - } - - // Find first space character. - // - template <typename C> - typename std::basic_string<C>::size_type - find_s (const C* s, - typename std::basic_string<C>::size_type size, - typename std::basic_string<C>::size_type pos) - { - while (pos < size && - s[pos] != C (0x20) && // space - s[pos] != C (0x0D) && // carriage return - s[pos] != C (0x09) && // tab - s[pos] != C (0x0A)) - ++pos; - - return pos < size ? pos : std::basic_string<C>::npos; - } - } - - // Individual items of the list have no DOM association. Therefore - // we clear keep_dom from flags. - // - - template <typename T, typename C, schema_type::value ST> - list<T, C, ST, false>:: - list (const xercesc::DOMElement& e, flags f, container* c) - : sequence<T> (c) - { - init (tree::text_content<C> (e), &e, f & ~flags::keep_dom); - } - - template <typename T, typename C, schema_type::value ST> - list<T, C, ST, false>:: - list (const xercesc::DOMAttr& a, flags f, container* c) - : sequence<T> (c) - { - init (xml::transcode<C> (a.getValue ()), - a.getOwnerElement (), - f & ~flags::keep_dom); - } - - template <typename T, typename C, schema_type::value ST> - list<T, C, ST, false>:: - list (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : sequence<T> (c) - { - init (s, e, f & ~flags::keep_dom); - } - - template <typename T, typename C, schema_type::value ST> - void list<T, C, ST, false>:: - init (const std::basic_string<C>& s, - const xercesc::DOMElement* parent, - flags f) - { - if (s.size () == 0) - return; - - using std::basic_string; - typedef typename basic_string<C>::size_type size_type; - - const C* data (s.c_str ()); - size_type size (s.size ()); - - // Traverse the data while logically collapsing spaces. - // - for (size_type i (bits::find_ns<C> (data, size, 0)); - i != basic_string<C>::npos;) - { - size_type j (bits::find_s (data, size, i)); - - if (j != basic_string<C>::npos) - { - this->push_back ( - traits<T, C, ST>::create ( - basic_string<C> (data + i, j - i), - parent, - f, - this->container_)); - - i = bits::find_ns (data, size, j); - } - else - { - // Last element. - // - this->push_back ( - traits<T, C, ST>::create ( - basic_string<C> (data + i, size - i), - parent, - f, - this->container_)); - - break; - } - } - } - - template <typename T, typename C, schema_type::value ST> - list<T, C, ST, true>:: - list (const xercesc::DOMElement& e, flags, container* c) - : sequence<T> (c) - { - init (tree::text_content<C> (e), &e); - } - - template <typename T, typename C, schema_type::value ST> - inline list<T, C, ST, true>:: - list (const xercesc::DOMAttr& a, flags, container* c) - : sequence<T> (c) - { - init (xml::transcode<C> (a.getValue ()), a.getOwnerElement ()); - } - - template <typename T, typename C, schema_type::value ST> - inline list<T, C, ST, true>:: - list (const std::basic_string<C>& s, - const xercesc::DOMElement* parent, - flags, - container* c) - : sequence<T> (c) - { - init (s, parent); - } - - template <typename T, typename C, schema_type::value ST> - inline void list<T, C, ST, true>:: - init (const std::basic_string<C>& s, const xercesc::DOMElement* parent) - { - if (s.size () == 0) - return; - - using std::basic_string; - typedef typename basic_string<C>::size_type size_type; - - const C* data (s.c_str ()); - size_type size (s.size ()); - - // Traverse the data while logically collapsing spaces. - // - for (size_type i (bits::find_ns<C> (data, size, 0)); - i != basic_string<C>::npos;) - { - size_type j (bits::find_s (data, size, i)); - - if (j != basic_string<C>::npos) - { - this->push_back ( - traits<T, C, ST>::create ( - basic_string<C> (data + i, j - i), parent, 0, 0)); - - i = bits::find_ns (data, size, j); - } - else - { - // Last element. - // - this->push_back ( - traits<T, C, ST>::create ( - basic_string<C> (data + i, size - i), parent, 0, 0)); - - break; - } - } - } - - - // Parsing c-tors for built-in types. - // - - - // string - // - template <typename C, typename B> - string<C, B>:: - string (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c), - base_type (tree::text_content<C> (e)) - { - } - - template <typename C, typename B> - string<C, B>:: - string (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c), - base_type (xml::transcode<C> (a.getValue ())) - { - } - - template <typename C, typename B> - string<C, B>:: - string (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c), base_type (s) - { - } - - - // normalized_string - // - template <typename C, typename B> - normalized_string<C, B>:: - normalized_string (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - normalize (); - } - - template <typename C, typename B> - normalized_string<C, B>:: - normalized_string (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - normalize (); - } - - template <typename C, typename B> - normalized_string<C, B>:: - normalized_string (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - normalize (); - } - - template <typename C, typename B> - void normalized_string<C, B>:: - normalize () - { - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (this->size ()); - - for (size_type i (0); i < size; ++i) - { - C& c ((*this)[i]); - - if (c == C (0x0D) || // carriage return - c == C (0x09) || // tab - c == C (0x0A)) - c = C (0x20); - } - } - - - // token - // - template <typename C, typename B> - token<C, B>:: - token (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - collapse (); - } - - template <typename C, typename B> - token<C, B>:: - token (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - collapse (); - } - - template <typename C, typename B> - token<C, B>:: - token (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - collapse (); - } - - template <typename C, typename B> - void token<C, B>:: - collapse () - { - // We have all whitespace normilized by our base. We just - // need to collapse them. - // - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (this->size ()), j (0); - bool subs (false), trim (true); - - for (size_type i (0); i < size; ++i) - { - C c ((*this)[i]); - - if (c == C (0x20)) - { - subs = true; - } - else - { - if (subs) - { - subs = false; - - if (!trim) - (*this)[j++] = C (0x20); - } - - if (trim) - trim = false; - - (*this)[j++] = c; - } - } - - this->resize (j); - } - - - // nmtoken - // - template <typename C, typename B> - nmtoken<C, B>:: - nmtoken (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - } - - template <typename C, typename B> - nmtoken<C, B>:: - nmtoken (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - } - - template <typename C, typename B> - nmtoken<C, B>:: - nmtoken (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - } - - - // nmtokens - // - template <typename C, typename B, typename nmtoken> - nmtokens<C, B, nmtoken>:: - nmtokens (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c), base_type (e, f, this) - { - } - - template <typename C, typename B, typename nmtoken> - nmtokens<C, B, nmtoken>:: - nmtokens (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c), base_type (a, f, this) - { - } - - template <typename C, typename B, typename nmtoken> - nmtokens<C, B, nmtoken>:: - nmtokens (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c), base_type (s, e, f, this) - { - } - - - // name - // - template <typename C, typename B> - name<C, B>:: - name (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - } - - template <typename C, typename B> - name<C, B>:: - name (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - } - - template <typename C, typename B> - name<C, B>:: - name (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - } - - - // ncname - // - template <typename C, typename B> - ncname<C, B>:: - ncname (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - } - - template <typename C, typename B> - ncname<C, B>:: - ncname (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - } - - template <typename C, typename B> - ncname<C, B>:: - ncname (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - } - - - // language - // - template <typename C, typename B> - language<C, B>:: - language (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - } - - template <typename C, typename B> - language<C, B>:: - language (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - } - - template <typename C, typename B> - language<C, B>:: - language (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - } - - - // id - // - template <typename C, typename B> - id<C, B>:: - id (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c), identity_ (*this) - { - register_id (); - } - - template <typename C, typename B> - id<C, B>:: - id (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c), identity_ (*this) - { - register_id (); - } - - template <typename C, typename B> - id<C, B>:: - id (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c), identity_ (*this) - { - register_id (); - } - - - // idref - // - template <typename C, typename B, typename T> - idref<C, B, T>:: - idref (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c), identity_ (*this) - { - } - - template <typename C, typename B, typename T> - idref<C, B, T>:: - idref (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f , c), identity_ (*this) - { - } - - template <typename C, typename B, typename T> - idref<C, B, T>:: - idref (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c), identity_ (*this) - { - } - - - // idrefs - // - template <typename C, typename B, typename idref> - idrefs<C, B, idref>:: - idrefs (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c), base_type (e, f, this) - { - } - - template <typename C, typename B, typename idref> - idrefs<C, B, idref>:: - idrefs (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c), base_type (a, f, this) - { - } - - template <typename C, typename B, typename idref> - idrefs<C, B, idref>:: - idrefs (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c), base_type (s, e, f, this) - { - } - - - // uri - // - template <typename C, typename B> - uri<C, B>:: - uri (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c), - base_type (trim (tree::text_content<C> (e))) - { - } - - template <typename C, typename B> - uri<C, B>:: - uri (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c), - base_type (trim (xml::transcode<C> (a.getValue ()))) - { - } - - template <typename C, typename B> - uri<C, B>:: - uri (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c), base_type (trim (s)) - { - } - - - // qname - // - template <typename C, typename B, typename uri, typename ncname> - qname<C, B, uri, ncname>:: - qname (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - std::basic_string<C> v (trim (tree::text_content<C> (e))); - ns_ = resolve (v, &e); - name_ = xml::uq_name (v); - } - - template <typename C, typename B, typename uri, typename ncname> - qname<C, B, uri, ncname>:: - qname (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - std::basic_string<C> v (trim (xml::transcode<C> (a.getValue ()))); - ns_ = resolve (v, a.getOwnerElement ()); - name_ = xml::uq_name (v); - } - - template <typename C, typename B, typename uri, typename ncname> - qname<C, B, uri, ncname>:: - qname (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - std::basic_string<C> v (trim (s)); - ns_ = resolve (v, e); - name_ = xml::uq_name (v); - } - - template <typename C, typename B, typename uri, typename ncname> - uri qname<C, B, uri, ncname>:: - resolve (const std::basic_string<C>& s, const xercesc::DOMElement* e) - { - std::basic_string<C> p (xml::prefix (s)); - - if (e) - { - // This code is copied verbatim from xml/dom/elements.hxx. - // - - // 'xml' prefix requires special handling and Xerces folks refuse - // to handle this in DOM so I have to do it myself. - // - if (p == xml::bits::xml_prefix<C> ()) - return xml::bits::xml_namespace<C> (); - - const XMLCh* xns ( - e->lookupNamespaceURI ( - p.empty () ? 0 : xml::string (p).c_str ())); - - if (xns != 0) - return xml::transcode<C> (xns); - else if (p.empty ()) - return std::basic_string<C> (); - } - - throw no_prefix_mapping<C> (p); - } - - - // base64_binary - // - // We are not doing whitespace collapsing since the decode - // functions can handle it like this. - // - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - // This implementation is not optimal. - // - std::basic_string<C> str (trim (tree::text_content<C> (e))); - decode (xml::string (str).c_str ()); - } - - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - std::basic_string<C> str (trim (xml::transcode<C> (a.getValue ()))); - decode (xml::string (str).c_str ()); - } - - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - std::basic_string<C> str (trim (s)); - decode (xml::string (str).c_str ()); - } - - - // hex_binary - // - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - // This implementation is not optimal. - // - std::basic_string<C> str (trim (tree::text_content<C> (e))); - decode (xml::string (str).c_str ()); - } - - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - std::basic_string<C> str (trim (xml::transcode<C> (a.getValue ()))); - decode (xml::string (str).c_str ()); - } - - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - std::basic_string<C> str (trim (s)); - decode (xml::string (str).c_str ()); - } - - // entity - // - template <typename C, typename B> - entity<C, B>:: - entity (const xercesc::DOMElement& e, flags f, container* c) - : base_type (e, f, c) - { - } - - template <typename C, typename B> - entity<C, B>:: - entity (const xercesc::DOMAttr& a, flags f, container* c) - : base_type (a, f, c) - { - } - - template <typename C, typename B> - entity<C, B>:: - entity (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : base_type (s, e, f, c) - { - } - - - // entities - // - template <typename C, typename B, typename entity> - entities<C, B, entity>:: - entities (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c), base_type (e, f, this) - { - } - - template <typename C, typename B, typename entity> - entities<C, B, entity>:: - entities (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c), base_type (a, f, this) - { - } - - template <typename C, typename B, typename entity> - entities<C, B, entity>:: - entities (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c), base_type (s, e, f, this) - { - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/parsing/boolean.hxx b/libxsd/xsd/cxx/tree/parsing/boolean.hxx deleted file mode 100644 index 64cf5bf..0000000 --- a/libxsd/xsd/cxx/tree/parsing/boolean.hxx +++ /dev/null @@ -1,74 +0,0 @@ -// file : xsd/cxx/tree/parsing/boolean.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_BOOLEAN_HXX -#define XSD_CXX_TREE_PARSING_BOOLEAN_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<bool, C, schema_type::other> - { - typedef bool type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - bool traits<bool, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - bool traits<bool, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - bool traits<bool, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - return tmp == bits::true_<C> () || tmp == bits::one<C> (); - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_BOOLEAN_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/byte.hxx b/libxsd/xsd/cxx/tree/parsing/byte.hxx deleted file mode 100644 index 8fc4d8f..0000000 --- a/libxsd/xsd/cxx/tree/parsing/byte.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/byte.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_BYTE_HXX -#define XSD_CXX_TREE_PARSING_BYTE_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<signed char, C, schema_type::other> - { - typedef signed char type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - signed char traits<signed char, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - signed char traits<signed char, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - signed char traits<signed char, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - short t; - is >> t; - - return static_cast<type> (t); - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_BYTE_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/date-time.txx b/libxsd/xsd/cxx/tree/parsing/date-time.txx deleted file mode 100644 index 04f8f48..0000000 --- a/libxsd/xsd/cxx/tree/parsing/date-time.txx +++ /dev/null @@ -1,700 +0,0 @@ -// file : xsd/cxx/tree/parsing/date-time.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // time_zone - // - template <typename C> - void time_zone:: - zone_parse (const C* s, std::size_t n) - { - // time_zone := Z|(+|-)HH:MM - // - if (n == 0) - { - return; - } - else if (s[0] == C ('Z')) - { - hours_ = 0; - minutes_ = 0; - present_ = true; - } - else if (n == 6) - { - // Parse hours. - // - hours_ = 10 * (s[1] - C ('0')) + (s[2] - C ('0')); - - // Parse minutes. - // - minutes_ = 10 * (s[4] - C ('0')) + (s[5] - C ('0')); - - if (s[0] == C ('-')) - { - hours_ = -hours_; - minutes_ = -minutes_; - } - present_ = true; - } - } - - // gday - // - template <typename C, typename B> - gday<C, B>:: - gday (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - gday<C, B>:: - gday (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - gday<C, B>:: - gday (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void gday<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // gday := ---DD[Z|(+|-)HH:MM] - // - if (n >= 5) - { - day_ = 10 * (s[3] - C ('0')) + (s[4] - C ('0')); - - if (n > 5) - zone_parse (s + 5, n - 5); - } - } - - // gmonth - // - template <typename C, typename B> - gmonth<C, B>:: - gmonth (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - gmonth<C, B>:: - gmonth (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - gmonth<C, B>:: - gmonth (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void gmonth<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // gmonth := --MM[Z|(+|-)HH:MM] - // - if (n >= 4) - { - month_ = 10 * (s[2] - C ('0')) + (s[3] - C ('0')); - - if (n > 4) - zone_parse (s + 4, n - 4); - } - } - - // gyear - // - template <typename C, typename B> - gyear<C, B>:: - gyear (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - gyear<C, B>:: - gyear (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - gyear<C, B>:: - gyear (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void gyear<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // gyear := [-]CCYY[N]*[Z|(+|-)HH:MM] - // - if (n >= 4) - { - // Find the end of the year token. - // - size_type pos (4); - for (; pos < n; ++pos) - { - C c (s[pos]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> year_fragment (s, pos); - zc_istream<C> is (year_fragment); - is >> year_; - - if (pos < n) - zone_parse (s + pos, n - pos); - } - } - - // gmonth_day - // - template <typename C, typename B> - gmonth_day<C, B>:: - gmonth_day (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - gmonth_day<C, B>:: - gmonth_day (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - gmonth_day<C, B>:: - gmonth_day (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void gmonth_day<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // gmonth_day := --MM-DD[Z|(+|-)HH:MM] - // - if (n >= 7) - { - month_ = 10 * (s[2] - C ('0')) + (s[3] - C ('0')); - day_ = 10 * (s[5] - C ('0')) + (s[6] - C ('0')); - - if (n > 7) - zone_parse (s + 7, n - 7); - } - } - - // gyear_month - // - template <typename C, typename B> - gyear_month<C, B>:: - gyear_month (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - gyear_month<C, B>:: - gyear_month (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - gyear_month<C, B>:: - gyear_month (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void gyear_month<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM] - // - - if (n >= 7) - { - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), 4)); - - if (pos != ro_string<C>::npos && (n - pos - 1) >= 2) - { - ro_string<C> year_fragment (s, pos); - zc_istream<C> is (year_fragment); - is >> year_; - - month_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); - - pos += 3; - - if (pos < n) - zone_parse (s + pos, n - pos); - } - } - } - - // date - // - template <typename C, typename B> - date<C, B>:: - date (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - date<C, B>:: - date (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - date<C, B>:: - date (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void date<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM] - // - - if (n >= 10) - { - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), 4)); - - if (pos != ro_string<C>::npos && (n - pos - 1) >= 5) - { - ro_string<C> year_fragment (s, pos); - zc_istream<C> is (year_fragment); - is >> year_; - - month_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); - day_ = 10 * (s[pos + 4] - C ('0')) + (s[pos + 5] - C ('0')); - - pos += 6; - - if (pos < n) - zone_parse (s + pos, n - pos); - } - } - } - - // time - // - template <typename C, typename B> - time<C, B>:: - time (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - time<C, B>:: - time (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - time<C, B>:: - time (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void time<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // time := HH:MM:SS[.S+][Z|(+|-)HH:MM] - // - - if (n >= 8) - { - hours_ = 10 * (s[0] - '0') + (s[1] - '0'); - minutes_ = 10 * (s[3] - '0') + (s[4] - '0'); - - // Find the end of the seconds fragment. - // - size_type pos (8); - for (; pos < n; ++pos) - { - C c (s[pos]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> seconds_fragment (s + 6, pos - 6); - zc_istream<C> is (seconds_fragment); - is >> seconds_; - - if (pos < n) - zone_parse (s + pos, n - pos); - } - } - - // date_time - // - template <typename C, typename B> - date_time<C, B>:: - date_time (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - date_time<C, B>:: - date_time (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - date_time<C, B>:: - date_time (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - template <typename C, typename B> - void date_time<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM] - // - - if (n >= 19) - { - // Find the end of the year token. - // - size_type pos (tmp.find (C ('-'), 4)); - - if (pos != ro_string<C>::npos && (n - pos - 1) >= 14) - { - ro_string<C> year_fragment (s, pos); - zc_istream<C> yis (year_fragment); - yis >> year_; - - month_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); - pos += 3; - - day_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); - pos += 3; - - hours_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); - pos += 3; - - minutes_ = 10 * (s[pos + 1] - C ('0')) + (s[pos + 2] - C ('0')); - pos += 4; // Point to the first S. - - // Find the end of the seconds fragment. - // - size_type sec_end (pos + 2); - for (; sec_end < n; ++sec_end) - { - C c (s[sec_end]); - - if (c == C ('Z') || c == C ('+') || c == C ('-')) - break; - } - - ro_string<C> seconds_fragment (s + pos, sec_end - pos); - zc_istream<C> sis (seconds_fragment); - sis >> seconds_; - - if (sec_end < n) - zone_parse (s + sec_end, n - sec_end); - } - } - } - - // duration - // - template <typename C, typename B> - duration<C, B>:: - duration (const xercesc::DOMElement& e, flags f, container* c) - : B (e, f, c) - { - parse (tree::text_content<C> (e)); - } - - template <typename C, typename B> - duration<C, B>:: - duration (const xercesc::DOMAttr& a, flags f, container* c) - : B (a, f, c) - { - parse (xml::transcode<C> (a.getValue ())); - } - - template <typename C, typename B> - duration<C, B>:: - duration (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f, - container* c) - : B (s, e, f, c) - { - parse (s); - } - - namespace bits - { - template <typename C> - inline typename ro_string<C>::size_type - duration_delim (const C* s, - typename ro_string<C>::size_type pos, - typename ro_string<C>::size_type size) - { - const C* p (s + pos); - for (; p < (s + size); ++p) - { - if (*p == C ('Y') || *p == C ('D') || *p == C ('M') || - *p == C ('H') || *p == C ('M') || *p == C ('S') || - *p == C ('T')) - break; - } - - return p - s; - } - } - - template <typename C, typename B> - void duration<C, B>:: - parse (const std::basic_string<C>& str) - { - typedef typename ro_string<C>::size_type size_type; - - ro_string<C> tmp (str); - size_type n (trim (tmp)); - const C* s (tmp.data ()); - - // Set all the fields since some of them may not be specified. - // - years_ = months_ = days_ = hours_ = minutes_ = 0; - seconds_ = 0.0; - - // duration := [-]P[nY][nM][nD][TnHnMn[.n+]S] - // - if (n >= 3) - { - size_type pos (0); - - if (s[0] == C ('-')) - { - negative_ = true; - pos++; - } - else - negative_ = false; - - pos++; // Skip 'P'. - - size_type del (bits::duration_delim (s, pos, n)); - - if (del != n && s[del] == C ('Y')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> years_; - - pos = del + 1; - del = bits::duration_delim (s, pos, n); - } - - if (del != n && s[del] == C ('M')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> months_; - - pos = del + 1; - del = bits::duration_delim (s, pos, n); - } - - if (del != n && s[del] == C ('D')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> days_; - - pos = del + 1; - del = bits::duration_delim (s, pos, n); - } - - if (del != n && s[del] == C ('T')) - { - pos = del + 1; - del = bits::duration_delim (s, pos, n); - - if (del != n && s[del] == C ('H')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> hours_; - - pos = del + 1; - del = bits::duration_delim (s, pos, n); - } - - if (del != n && s[del] == C ('M')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> minutes_; - - pos = del + 1; - del = bits::duration_delim (s, pos, n); - } - - if (del != n && s[del] == C ('S')) - { - ro_string<C> fragment (s + pos, del - pos); - zc_istream<C> is (fragment); - is >> seconds_; - } - } - } - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/parsing/decimal.hxx b/libxsd/xsd/cxx/tree/parsing/decimal.hxx deleted file mode 100644 index 07128f9..0000000 --- a/libxsd/xsd/cxx/tree/parsing/decimal.hxx +++ /dev/null @@ -1,83 +0,0 @@ -// file : xsd/cxx/tree/parsing/decimal.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_DECIMAL_HXX -#define XSD_CXX_TREE_PARSING_DECIMAL_HXX - -#include <limits> -#include <locale> - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<double, C, schema_type::decimal> - { - typedef double type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - double traits<double, C, schema_type::decimal>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - double traits<double, C, schema_type::decimal>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - double traits<double, C, schema_type::decimal>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - is.imbue (std::locale::classic ()); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_DECIMAL_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/double.hxx b/libxsd/xsd/cxx/tree/parsing/double.hxx deleted file mode 100644 index 7e1a7cc..0000000 --- a/libxsd/xsd/cxx/tree/parsing/double.hxx +++ /dev/null @@ -1,92 +0,0 @@ -// file : xsd/cxx/tree/parsing/double.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_DOUBLE_HXX -#define XSD_CXX_TREE_PARSING_DOUBLE_HXX - -#include <limits> -#include <locale> - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<double, C, schema_type::double_> - { - typedef double type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - double traits<double, C, schema_type::double_>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - double traits<double, C, schema_type::double_>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - double traits<double, C, schema_type::double_>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - if (tmp == bits::positive_inf<C> ()) - return std::numeric_limits<double>::infinity (); - - if (tmp == bits::negative_inf<C> ()) - return -std::numeric_limits<double>::infinity (); - - if (tmp == bits::nan<C> ()) - return std::numeric_limits<double>::quiet_NaN (); - - zc_istream<C> is (tmp); - is.imbue (std::locale::classic ()); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_DOUBLE_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/element-map.txx b/libxsd/xsd/cxx/tree/parsing/element-map.txx deleted file mode 100644 index a6b1e31..0000000 --- a/libxsd/xsd/cxx/tree/parsing/element-map.txx +++ /dev/null @@ -1,40 +0,0 @@ -// file : xsd/cxx/tree/parsing/element-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX -#define XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX - -#include <xsd/cxx/xml/dom/elements.hxx> - -#include <xsd/cxx/tree/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C, typename T> - XSD_AUTO_PTR<element_type<C, T> > element_map<C, T>:: - parse (const xercesc::DOMElement& e, flags f) - { - const qualified_name n (xml::dom::name<C> (e)); - typename map::const_iterator i (map_->find (n)); - - if (i != map_->end () && i->second.parser_ != 0) - return (i->second.parser_) (e, f); - else - throw no_element_info<C> (n.name (), n.namespace_ ()); - } - - template<typename T, typename C, typename B> - XSD_AUTO_PTR<element_type<C, B> > - parser_impl (const xercesc::DOMElement& e, flags f) - { - return XSD_AUTO_PTR<element_type<C, B> > (new T (e, f)); - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_ELEMENT_MAP_TXX diff --git a/libxsd/xsd/cxx/tree/parsing/float.hxx b/libxsd/xsd/cxx/tree/parsing/float.hxx deleted file mode 100644 index bbeab2c..0000000 --- a/libxsd/xsd/cxx/tree/parsing/float.hxx +++ /dev/null @@ -1,92 +0,0 @@ -// file : xsd/cxx/tree/parsing/float.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_FLOAT_HXX -#define XSD_CXX_TREE_PARSING_FLOAT_HXX - -#include <limits> -#include <locale> - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<float, C, schema_type::other> - { - typedef float type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - float traits<float, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - float traits<float, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - float traits<float, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - if (tmp == bits::positive_inf<C> ()) - return std::numeric_limits<float>::infinity (); - - if (tmp == bits::negative_inf<C> ()) - return -std::numeric_limits<float>::infinity (); - - if (tmp == bits::nan<C> ()) - return std::numeric_limits<float>::quiet_NaN (); - - zc_istream<C> is (tmp); - is.imbue (std::locale::classic ()); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_FLOAT_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/int.hxx b/libxsd/xsd/cxx/tree/parsing/int.hxx deleted file mode 100644 index 566edef..0000000 --- a/libxsd/xsd/cxx/tree/parsing/int.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/int.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_INT_HXX -#define XSD_CXX_TREE_PARSING_INT_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<int, C, schema_type::other> - { - typedef int type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - int traits<int, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - int traits<int, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - int traits<int, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_INT_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/long.hxx b/libxsd/xsd/cxx/tree/parsing/long.hxx deleted file mode 100644 index 97b81d6..0000000 --- a/libxsd/xsd/cxx/tree/parsing/long.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/long.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_LONG_HXX -#define XSD_CXX_TREE_PARSING_LONG_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<long long, C, schema_type::other> - { - typedef long long type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - long long traits<long long, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - long long traits<long long, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - long long traits<long long, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_LONG_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/short.hxx b/libxsd/xsd/cxx/tree/parsing/short.hxx deleted file mode 100644 index 8b97f80..0000000 --- a/libxsd/xsd/cxx/tree/parsing/short.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/short.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_SHORT_HXX -#define XSD_CXX_TREE_PARSING_SHORT_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<short, C, schema_type::other> - { - typedef short type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - short traits<short, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - short traits<short, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - short traits<short, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_SHORT_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx b/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx deleted file mode 100644 index 6a8b606..0000000 --- a/libxsd/xsd/cxx/tree/parsing/unsigned-byte.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/unsigned-byte.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX -#define XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<unsigned char, C, schema_type::other> - { - typedef unsigned char type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - unsigned char traits<unsigned char, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - unsigned char traits<unsigned char, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - unsigned char traits<unsigned char, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - unsigned short t; - is >> t; - - return static_cast<type> (t); - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_UNSIGNED_BYTE_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx b/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx deleted file mode 100644 index c9f1f64..0000000 --- a/libxsd/xsd/cxx/tree/parsing/unsigned-int.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/unsigned-int.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX -#define XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<unsigned int, C, schema_type::other> - { - typedef unsigned int type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - unsigned int traits<unsigned int, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - unsigned int traits<unsigned int, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - unsigned int traits<unsigned int, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_UNSIGNED_INT_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx b/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx deleted file mode 100644 index 4c77484..0000000 --- a/libxsd/xsd/cxx/tree/parsing/unsigned-long.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/unsigned-long.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX -#define XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<unsigned long long, C, schema_type::other> - { - typedef unsigned long long type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - unsigned long long traits<unsigned long long, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - unsigned long long traits<unsigned long long, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - unsigned long long traits<unsigned long long, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_UNSIGNED_LONG_HXX diff --git a/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx b/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx deleted file mode 100644 index 5491bcd..0000000 --- a/libxsd/xsd/cxx/tree/parsing/unsigned-short.hxx +++ /dev/null @@ -1,78 +0,0 @@ -// file : xsd/cxx/tree/parsing/unsigned-short.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX -#define XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX - -#include <xsd/cxx/ro-string.hxx> -#include <xsd/cxx/zc-istream.hxx> - -#include <xsd/cxx/xml/string.hxx> // xml::transcode - -#include <xsd/cxx/tree/text.hxx> // text_content - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct traits<unsigned short, C, schema_type::other> - { - typedef unsigned short type; - - static type - create (const xercesc::DOMElement& e, flags f, container* c); - - static type - create (const xercesc::DOMAttr& a, flags f, container* c); - - static type - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*); - }; - - template <typename C> - unsigned short traits<unsigned short, C, schema_type::other>:: - create (const xercesc::DOMElement& e, flags f, container* c) - { - return create (tree::text_content<C> (e), 0, f, c); - } - - template <typename C> - unsigned short traits<unsigned short, C, schema_type::other>:: - create (const xercesc::DOMAttr& a, flags f, container* c) - { - return create (xml::transcode<C> (a.getValue ()), 0, f, c); - } - - template <typename C> - unsigned short traits<unsigned short, C, schema_type::other>:: - create (const std::basic_string<C>& s, - const xercesc::DOMElement*, - flags, - container*) - { - // This type cannot have whitespaces in its values. As result we - // don't need to waste time collapsing whitespaces. All we need to - // do is trim the string representation which can be done without - // copying. - // - ro_string<C> tmp (s); - trim (tmp); - - zc_istream<C> is (tmp); - - type t; - is >> t; - - return t; - } - } - } -} - -#endif // XSD_CXX_TREE_PARSING_UNSIGNED_SHORT_HXX diff --git a/libxsd/xsd/cxx/tree/serialization.hxx b/libxsd/xsd/cxx/tree/serialization.hxx deleted file mode 100644 index 3d8a193..0000000 --- a/libxsd/xsd/cxx/tree/serialization.hxx +++ /dev/null @@ -1,64 +0,0 @@ -// file : xsd/cxx/tree/serialization.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_HXX -#define XSD_CXX_TREE_SERIALIZATION_HXX - -#include <sstream> - -#include <xercesc/dom/DOMElement.hpp> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // - // - template <typename C> - class list_stream - { - public: - list_stream (std::basic_ostringstream<C>& os, - xercesc::DOMElement& parent) - : os_ (os), parent_ (parent) - { - } - - std::basic_ostringstream<C>& os_; - xercesc::DOMElement& parent_; - }; - - template <typename T> - class as_double - { - public: - as_double (const T& v) - : x (v) - { - } - - const T& x; - }; - - template <typename T> - class as_decimal - { - public: - as_decimal (const T& v, const facet* f = 0) - : x (v), facets (f) - { - } - - const T& x; - const facet* facets; - }; - } - } -} - -#include <xsd/cxx/tree/serialization.txx> -#include <xsd/cxx/tree/serialization/date-time.txx> - -#endif // XSD_CXX_TREE_SERIALIZATION_HXX diff --git a/libxsd/xsd/cxx/tree/serialization.txx b/libxsd/xsd/cxx/tree/serialization.txx deleted file mode 100644 index 07c2d4d..0000000 --- a/libxsd/xsd/cxx/tree/serialization.txx +++ /dev/null @@ -1,801 +0,0 @@ -// file : xsd/cxx/tree/serialization.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <string> -#include <sstream> - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/xml/string.hxx> // xml::{string, transcode} -#include <xsd/cxx/xml/dom/serialization-header.hxx> // dom::{prefix, clear} - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/list.hxx> - -// The only way to make the following serialization operators -// for fundamental types work is to defined them in the xercesc -// namespace so that they can be found by ADL. Placing them into -// the global namespace does not work. -// - -namespace XERCES_CPP_NAMESPACE -{ - // Serialization of std::basic_string and C string. Used in other - // serializers. Also used to serialize enumerators. - // - template <typename C> - void - operator<< (xercesc::DOMElement& e, const C* s) - { - xsd::cxx::xml::dom::clear<char> (e); - - if (*s != C (0)) - e.setTextContent (xsd::cxx::xml::string (s).c_str ()); - } - - template <typename C> - void - operator<< (xercesc::DOMAttr& a, const C* s) - { - a.setValue (xsd::cxx::xml::string (s).c_str ()); - } - - // We duplicate the code above instead of delegating in order to - // allow the xml::string type to take advantage of cached string - // sizes. - // - template <typename C> - void - operator<< (xercesc::DOMElement& e, const std::basic_string<C>& s) - { - xsd::cxx::xml::dom::clear<char> (e); - - if (!s.empty ()) - e.setTextContent (xsd::cxx::xml::string (s).c_str ()); - } - - template <typename C> - void - operator<< (xercesc::DOMAttr& a, const std::basic_string<C>& s) - { - a.setValue (xsd::cxx::xml::string (s).c_str ()); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // List serialization operators for std::basic_string and C string. - // - - template <typename C> - void - operator<< (list_stream<C>& ls, const C* s) - { - ls.os_ << s; - } - - template <typename C> - void - operator<< (list_stream<C>& ls, const std::basic_string<C>& s) - { - ls.os_ << s; - } - - // Insertion operators for type. - // - inline void - operator<< (xercesc::DOMElement& e, const type& x) - { - xml::dom::clear<char> (e); - - if (!x.null_content () && x.dom_content ().present ()) - { - // Cannot use 'using namespace' because of MSXML conflict. - // - using xercesc::DOMAttr; - using xercesc::DOMNode; - using xercesc::DOMElement; - using xercesc::DOMDocument; - using xercesc::DOMNamedNodeMap; - - // Clone the contents of the element. - // - DOMDocument& doc (*e.getOwnerDocument ()); - const DOMElement& se (x.dom_content ().get ()); - DOMNamedNodeMap& sa (*se.getAttributes ()); - - for (XMLSize_t i (0), n (sa.getLength ()); i != n; ++i) - e.setAttributeNode ( - static_cast<DOMAttr*> (doc.importNode (sa.item (i), true))); - - for (DOMNode* sn (se.getFirstChild ()); - sn != 0; - sn = sn->getNextSibling ()) - e.appendChild (doc.importNode (sn, true)); - } - } - - inline void - operator<< (xercesc::DOMAttr&, const type&) - { - } - - template <typename C> - inline void - operator<< (list_stream<C>&, const type&) - { - } - - // Insertion operators for simple_type. - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const simple_type<C, B>& x) - { - if (x.null_content ()) - xml::dom::clear<char> (e); - else - e << x.text_content (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const simple_type<C, B>& x) - { - if (!x.null_content ()) - a << x.text_content (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const simple_type<C, B>& x) - { - if (!x.null_content ()) - ls << x.text_content (); - } - - // Insertion operators for list. - // - template <typename C, typename T, schema_type::value ST, bool fund> - void - operator<< (xercesc::DOMElement& e, const list<T, C, ST, fund>& v) - { - std::basic_ostringstream<C> os; - list_stream<C> ls (os, e); - - ls << v; - - e << os.str (); - } - - template <typename C, typename T, schema_type::value ST, bool fund> - void - operator<< (xercesc::DOMAttr& a, const list<T, C, ST, fund>& v) - { - std::basic_ostringstream<C> os; - list_stream<C> ls (os, *a.getOwnerElement ()); - - ls << v; - - a << os.str (); - } - - template <typename C, typename T, schema_type::value ST, bool fund> - void - operator<< (list_stream<C>& ls, const list<T, C, ST, fund>& v) - { - for (typename list<T, C, ST, fund>::const_iterator - b (v.begin ()), e (v.end ()), i (b); i != e; ++i) - { - if (i != b) - ls.os_ << C (' '); - - ls << *i; - } - } - - // Specializations for double and decimal. - // - template <typename C, typename T, bool fund> - void - operator<< (list_stream<C>& ls, - const list<T, C, schema_type::double_, fund>& v) - { - for (typename list<T, C, schema_type::double_, fund>::const_iterator - b (v.begin ()), e (v.end ()), i (b); i != e; ++i) - { - if (i != b) - ls.os_ << C (' '); - - ls << as_double<T> (*i); - } - } - - template <typename C, typename T, bool fund> - void - operator<< (list_stream<C>& ls, - const list<T, C, schema_type::decimal, fund>& v) - { - for (typename list<T, C, schema_type::decimal, fund>::const_iterator - b (v.begin ()), e (v.end ()), i (b); i != e; ++i) - { - if (i != b) - ls.os_ << C (' '); - - ls << as_decimal<T> (*i); - } - } - - - // Insertion operators for fundamental_base. - // - template <typename T, typename C, typename B, schema_type::value ST> - void - operator<< (xercesc::DOMElement& e, - const fundamental_base<T, C, B, ST>& x) - { - const T& r (x); - e << r; - } - - template <typename T, typename C, typename B, schema_type::value ST> - void - operator<< (xercesc::DOMAttr& a, const fundamental_base<T, C, B, ST>& x) - { - const T& r (x); - a << r; - } - - template <typename T, typename C, typename B, schema_type::value ST> - void - operator<< (list_stream<C>& ls, const fundamental_base<T, C, B, ST>& x) - { - const T& r (x); - ls << r; - } - - // Specializations for double. - // - template <typename T, typename C, typename B> - void - operator<< ( - xercesc::DOMElement& e, - const fundamental_base<T, C, B, schema_type::double_>& x) - { - e << as_double<T> (x); - } - - template <typename T, typename C, typename B> - void - operator<< ( - xercesc::DOMAttr& a, - const fundamental_base<T, C, B, schema_type::double_>& x) - { - a << as_double<T> (x); - } - - template <typename T, typename C, typename B> - void - operator<< ( - list_stream<C>& ls, - const fundamental_base<T, C, B, schema_type::double_>& x) - { - ls << as_double<T> (x); - } - - // Specializations for decimal. - // - template <typename T, typename C, typename B> - void - operator<< ( - xercesc::DOMElement& e, - const fundamental_base<T, C, B, schema_type::decimal>& x) - { - e << as_decimal<T> (x, x._facet_table ()); - } - - template <typename T, typename C, typename B> - void - operator<< ( - xercesc::DOMAttr& a, - const fundamental_base<T, C, B, schema_type::decimal>& x) - { - a << as_decimal<T> (x, x._facet_table ()); - } - - template <typename T, typename C, typename B> - void - operator<< ( - list_stream<C>& ls, - const fundamental_base<T, C, B, schema_type::decimal>& x) - { - ls << as_decimal<T> (x, x._facet_table ()); - } - - // Insertion operators for built-in types. - // - - namespace bits - { - template <typename C, typename T> - void - insert (xercesc::DOMElement& e, const T& x) - { - std::basic_ostringstream<C> os; - os << x; - e << os.str (); - } - - template <typename C, typename T> - void - insert (xercesc::DOMAttr& a, const T& x) - { - std::basic_ostringstream<C> os; - os << x; - a << os.str (); - } - } - - - // string - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const string<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const string<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const string<C, B>& x) - { - ls.os_ << x; - } - - - // normalized_string - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const normalized_string<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const normalized_string<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const normalized_string<C, B>& x) - { - ls.os_ << x; - } - - - // token - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const token<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const token<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const token<C, B>& x) - { - ls.os_ << x; - } - - - // nmtoken - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const nmtoken<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const nmtoken<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const nmtoken<C, B>& x) - { - ls.os_ << x; - } - - - // nmtokens - // - template <typename C, typename B, typename nmtoken> - inline void - operator<< (xercesc::DOMElement& e, const nmtokens<C, B, nmtoken>& v) - { - const list<nmtoken, C>& r (v); - e << r; - } - - template <typename C, typename B, typename nmtoken> - inline void - operator<< (xercesc::DOMAttr& a, const nmtokens<C, B, nmtoken>& v) - { - const list<nmtoken, C>& r (v); - a << r; - } - - template <typename C, typename B, typename nmtoken> - inline void - operator<< (list_stream<C>& ls, const nmtokens<C, B, nmtoken>& v) - { - const list<nmtoken, C>& r (v); - ls << r; - } - - - // name - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const name<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const name<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const name<C, B>& x) - { - ls.os_ << x; - } - - - // ncname - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const ncname<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const ncname<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const ncname<C, B>& x) - { - ls.os_ << x; - } - - - // language - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const language<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const language<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const language<C, B>& x) - { - ls.os_ << x; - } - - - // id - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const id<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const id<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const id<C, B>& x) - { - ls.os_ << x; - } - - - // idref - // - template <typename C, typename B, typename T> - inline void - operator<< (xercesc::DOMElement& e, const idref<C, B, T>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B, typename T> - inline void - operator<< (xercesc::DOMAttr& a, const idref<C, B, T>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B, typename T> - inline void - operator<< (list_stream<C>& ls, const idref<C, B, T>& x) - { - ls.os_ << x; - } - - - // idrefs - // - template <typename C, typename B, typename idref> - inline void - operator<< (xercesc::DOMElement& e, const idrefs<C, B, idref>& v) - { - const list<idref, C>& r (v); - e << r; - } - - template <typename C, typename B, typename idref> - inline void - operator<< (xercesc::DOMAttr& a, const idrefs<C, B, idref>& v) - { - const list<idref, C>& r (v); - a << r; - } - - template <typename C, typename B, typename idref> - inline void - operator<< (list_stream<C>& ls, const idrefs<C, B, idref>& v) - { - const list<idref, C>& r (v); - ls << r; - } - - - // uri - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const uri<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const uri<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const uri<C, B>& x) - { - ls.os_ << x; - } - - - // qname - // - template <typename C, typename B, typename uri, typename ncname> - void - operator<< (xercesc::DOMElement& e, const qname<C, B, uri, ncname>& x) - { - std::basic_ostringstream<C> os; - - if (x.qualified ()) - { - // Note: prefix<C> in case uri doesn't derive from basic_string. - // - std::basic_string<C> p (xml::dom::prefix<C> (x.namespace_ (), e)); - - if (!p.empty ()) - os << p << C (':'); - } - - os << x.name (); - e << os.str (); - } - - template <typename C, typename B, typename uri, typename ncname> - void - operator<< (xercesc::DOMAttr& a, const qname<C, B, uri, ncname>& x) - { - std::basic_ostringstream<C> os; - - if (x.qualified ()) - { - // Note: prefix<C> in case uri doesn't derive from basic_string. - // - std::basic_string<C> p ( - xml::dom::prefix<C> (x.namespace_ (), *a.getOwnerElement ())); - - if (!p.empty ()) - os << p << C (':'); - } - - os << x.name (); - a << os.str (); - } - - template <typename C, typename B, typename uri, typename ncname> - void - operator<< (list_stream<C>& ls, const qname<C, B, uri, ncname>& x) - { - if (x.qualified ()) - { - // Note: prefix<C> in case uri doesn't derive from basic_string. - // - std::basic_string<C> p ( - xml::dom::prefix<C> (x.namespace_ (), ls.parent_)); - - if (!p.empty ()) - ls.os_ << p << C (':'); - } - - ls.os_ << x.name (); - } - - - // base64_binary - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const base64_binary<C, B>& x) - { - e << x.encode (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const base64_binary<C, B>& x) - { - a << x.encode (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const base64_binary<C, B>& x) - { - ls.os_ << x.encode (); - } - - - // hex_binary - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const hex_binary<C, B>& x) - { - e << x.encode (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const hex_binary<C, B>& x) - { - a << x.encode (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const hex_binary<C, B>& x) - { - ls.os_ << x.encode (); - } - - - // entity - // - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const entity<C, B>& x) - { - bits::insert<C> (e, x); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const entity<C, B>& x) - { - bits::insert<C> (a, x); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const entity<C, B>& x) - { - ls.os_ << x; - } - - - // entities - // - template <typename C, typename B, typename entity> - inline void - operator<< (xercesc::DOMElement& e, const entities<C, B, entity>& v) - { - const list<entity, C>& r (v); - e << r; - } - - template <typename C, typename B, typename entity> - inline void - operator<< (xercesc::DOMAttr& a, const entities<C, B, entity>& v) - { - const list<entity, C>& r (v); - a << r; - } - - template <typename C, typename B, typename entity> - inline void - operator<< (list_stream<C>& ls, const entities<C, B, entity>& v) - { - const list<entity, C>& r (v); - ls << r; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/serialization/boolean.hxx b/libxsd/xsd/cxx/tree/serialization/boolean.hxx deleted file mode 100644 index bd53f73..0000000 --- a/libxsd/xsd/cxx/tree/serialization/boolean.hxx +++ /dev/null @@ -1,50 +0,0 @@ -// file : xsd/cxx/tree/serialization/boolean.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX -#define XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, bool b) - { - std::basic_ostringstream<char> os; - os.setf (std::ios_base::boolalpha); - os << b; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, bool b) - { - std::basic_ostringstream<char> os; - os.setf (std::ios_base::boolalpha); - os << b; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, bool b) - { - // We don't need to restore the original bool format flag - // since items in the list are all of the same type. - // - ls.os_.setf (std::ios_base::boolalpha); - ls.os_ << b; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_BOOLEAN_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/byte.hxx b/libxsd/xsd/cxx/tree/serialization/byte.hxx deleted file mode 100644 index f0e121e..0000000 --- a/libxsd/xsd/cxx/tree/serialization/byte.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/byte.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_BYTE_HXX -#define XSD_CXX_TREE_SERIALIZATION_BYTE_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, signed char c) - { - std::basic_ostringstream<char> os; - os << static_cast<short> (c); - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, signed char c) - { - std::basic_ostringstream<char> os; - os << static_cast<short> (c); - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, signed char c) - { - ls.os_ << static_cast<short> (c); - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_BYTE_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/date-time.txx b/libxsd/xsd/cxx/tree/serialization/date-time.txx deleted file mode 100644 index fe305a4..0000000 --- a/libxsd/xsd/cxx/tree/serialization/date-time.txx +++ /dev/null @@ -1,618 +0,0 @@ -// file : xsd/cxx/tree/serialization/date-time.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <locale> -#include <string> -#include <ostream> -#include <sstream> - -#include <xsd/cxx/tree/bits/literals.hxx> // bits::{gday_prefix,gmonth_prefix} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // time_zone - // - namespace bits - { - // Assumes the fill character is set to '0'. - // - template <typename C> - void - zone_insert (std::basic_ostream<C>& os, const time_zone& z) - { - // time-zone := Z|(+|-)HH:MM - // - short h = z.zone_hours (); - short m = z.zone_minutes (); - - if (h == 0 && m == 0) - { - os << C ('Z'); - } - else - { - if (h < 0 || m < 0) - { - h = -h; - m = -m; - os << C ('-'); - } - else - os << C ('+'); - - if (h >= 0 && h <= 14 && m >= 0 && m <= 59) - { - os.width (2); - os << h << C (':'); - os.width (2); - os << m; - } - } - } - } - - // gday - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::gday<C, B>& x) - { - if (x.day () < 32) - { - // Save some time and space by not restoring the fill character - // since it is the same in case of a list. - // - os.fill (C ('0')); - os << bits::gday_prefix<C> (); - os.width (2); - os << x.day (); - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const gday<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const gday<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const gday<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // gmonth - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::gmonth<C, B>& x) - { - if (x.month () < 13) - { - os.fill (C ('0')); - os << bits::gmonth_prefix<C> (); - os.width (2); - os << x.month (); - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const gmonth<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const gmonth<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const gmonth<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // gyear - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::gyear<C, B>& x) - { - os.fill (C ('0')); - os.width (4); - os << x.year (); - - if (x.zone_present ()) - zone_insert (os, x); - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const gyear<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const gyear<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const gyear<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // gmonth_day - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::gmonth_day<C, B>& x) - { - if (x.month () < 13 && x.day () < 32) - { - os.fill (C ('0')); - os << bits::gmonth_prefix<C> (); - os.width (2); - os << x.month () << C ('-'); - os.width (2); - os << x.day (); - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const gmonth_day<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const gmonth_day<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const gmonth_day<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // gyear_month - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::gyear_month<C, B>& x) - { - if (x.month () < 13) - { - os.fill (C ('0')); - os.width (4); - os << x.year () << C ('-'); - os.width (2); - os << x.month (); - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const gyear_month<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const gyear_month<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const gyear_month<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // date - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::date<C, B>& x) - { - if (x.month () < 13 && x.day () < 32) - { - os.fill (C ('0')); - os.width (4); - os << x.year () << C ('-'); - os.width (2); - os << x.month () << C ('-'); - os.width (2); - os << x.day (); - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const date<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const date<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const date<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // time - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::time<C, B>& x) - { - if (x.hours () <= 24 && - x.minutes () <= 59 && - x.seconds () >= 0.0 && - x.seconds () < 60.0) - { - os.fill (C ('0')); - os.width (2); - os << x.hours () << C (':'); - - os.width (2); - os << x.minutes () << C (':'); - - std::basic_ostringstream<C> ostr; - ostr.imbue (std::locale::classic ()); - ostr.width (9); - ostr.fill (C ('0')); - ostr << std::fixed << x.seconds (); - - std::basic_string<C> s (ostr.str ()); - - // Remove the trailing zeros and the decimal point if necessary. - // - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (s.size ()), n (size); - - for (; n > 0 && s[n - 1] == C ('0'); --n)/*noop*/; - - if (n > 0 && s[n - 1] == C ('.')) - --n; - - if (n != size) - s.resize (n); - - os << s; - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const time<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const time<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const time<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // date_time - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::date_time<C, B>& x) - { - if (x.month () <= 12 && - x.day () <= 31 && - x.hours () <= 24 && - x.minutes () <= 59 && - x.seconds () >= 0.0 && - x.seconds () < 60.0) - { - os.fill (C ('0')); - os.width (4); - os << x.year () << C ('-'); - - os.width (2); - os << x.month () << C ('-'); - - os.width (2); - os << x.day () << C ('T'); - - os.width (2); - os << x.hours () << C (':'); - - os.width (2); - os << x.minutes () << C (':'); - - std::basic_ostringstream<C> ostr; - ostr.imbue (std::locale::classic ()); - ostr.width (9); - ostr.fill (C ('0')); - ostr << std::fixed << x.seconds (); - - std::basic_string<C> s (ostr.str ()); - - // Remove the trailing zeros and the decimal point if necessary. - // - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (s.size ()), n (size); - - for (; n > 0 && s[n - 1] == C ('0'); --n)/*noop*/; - - if (n > 0 && s[n - 1] == C ('.')) - --n; - - if (n != size) - s.resize (n); - - os << s; - - if (x.zone_present ()) - zone_insert (os, x); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const date_time<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const date_time<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const date_time<C, B>& x) - { - bits::insert (ls.os_, x); - } - - // duration - // - namespace bits - { - template <typename C, typename B> - void - insert (std::basic_ostream<C>& os, const tree::duration<C, B>& x) - { - if (x.negative ()) - os << C ('-'); - - os << C ('P'); - - // years - // - // In case it is 0-duration, use the years field to handle - // this case. - // - if (x.years () != 0 || - (x.months () == 0 && - x.days () == 0 && - x.hours () == 0 && - x.minutes () == 0 && - x.seconds () == 0.0)) - { - os << x.years () << C ('Y'); - } - - // months - // - if (x.months () != 0) - { - os << x.months () << C ('M'); - } - - // days - // - if (x.days () != 0) - { - os << x.days () << C ('D'); - } - - // Figure out if we need the 'T' delimiter. - // - if (x.hours () != 0 || - x.minutes () != 0 || - x.seconds () != 0.0) - os << C ('T'); - - // hours - // - if (x.hours () != 0) - { - os << x.hours () << C ('H'); - } - - // minutes - // - if (x.minutes () != 0) - { - os << x.minutes () << C ('M'); - } - - // seconds - // - if (x.seconds () > 0.0) - { - std::basic_ostringstream<C> ostr; - ostr.imbue (std::locale::classic ()); - ostr << std::fixed << x.seconds (); - - std::basic_string<C> s (ostr.str ()); - - // Remove the trailing zeros and the decimal point if necessary. - // - typedef typename std::basic_string<C>::size_type size_type; - - size_type size (s.size ()), n (size); - - for (; n > 0 && s[n - 1] == C ('0'); --n)/*noop*/; - - if (n > 0 && s[n - 1] == C ('.')) - --n; - - if (n != size) - s.resize (n); - - os << s << C ('S'); - } - } - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMElement& e, const duration<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - e << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (xercesc::DOMAttr& a, const duration<C, B>& x) - { - std::basic_ostringstream<C> os; - bits::insert (os, x); - a << os.str (); - } - - template <typename C, typename B> - inline void - operator<< (list_stream<C>& ls, const duration<C, B>& x) - { - bits::insert (ls.os_, x); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/serialization/decimal.hxx b/libxsd/xsd/cxx/tree/serialization/decimal.hxx deleted file mode 100644 index adfd167..0000000 --- a/libxsd/xsd/cxx/tree/serialization/decimal.hxx +++ /dev/null @@ -1,124 +0,0 @@ -// file : xsd/cxx/tree/serialization/decimal.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX -#define XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX - -#include <limits> // std::numeric_limits -#include <locale> -#include <sstream> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // The formula for the number of decimla digits required is given in: - // - // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf - // - template <typename C> - std::basic_string<C> - insert (const as_decimal<double>& d) - { - std::basic_ostringstream<C> os; - os.imbue (std::locale::classic ()); - std::streamsize prec; - - const facet* f = d.facets ? - facet::find (d.facets, facet::fraction_digits) : 0; - - if (f) - prec = static_cast<std::streamsize> (f->value); - else - { - // Precision. - // -#if defined (XSD_CXX_TREE_DECIMAL_PRECISION_MAX) - prec = 2 + std::numeric_limits<double>::digits * 301/1000; -#elif defined (XSD_CXX_TREE_DECIMAL_PRECISION) - prec = XSD_CXX_TREE_DECIMAL_PRECISION; -#else - prec = std::numeric_limits<double>::digits10; -#endif - } - - os.precision (prec); - os << std::fixed << d.x; - std::basic_string<C> r (os.str ()); - const C* cr (r.c_str ()); - - // Remove the trailing zeros and the decimal point if necessary. - // - typename std::basic_string<C>::size_type size (r.size ()), n (size); - - if (prec != 0) - { - for (; n > 0 && cr[n - 1] == '0'; --n)/*noop*/; - - if (n > 0 && cr[n - 1] == '.') - --n; - } - - // See if we have a restriction on total digits. - // - f = d.facets ? facet::find (d.facets, facet::total_digits) : 0; - - if (f && n > f->value) - { - // Point and sign do not count so figure out if we have them. - // - typename std::basic_string<C>::size_type extra ( - cr[0] == '-' ? 1 : 0); - - if (r.find ('.') < n) - extra++; - - // Unless we have a point and the size difference is one, - // remove some digits. - // - if ((n - extra) > f->value) - n -= (n - extra - f->value); - - if (n > 0 && cr[n - 1] == '.') - --n; - } - - if (n != size) - r.resize (n); - - return r; - } - } - - template <typename C> - inline void - operator<< (list_stream<C>& ls, const as_decimal<double>& d) - { - ls.os_ << bits::insert<C> (d); - } - } - } -} - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, - const xsd::cxx::tree::as_decimal<double>& d) - { - e << xsd::cxx::tree::bits::insert<char> (d); - } - - inline void - operator<< (xercesc::DOMAttr& a, - const xsd::cxx::tree::as_decimal<double>& d) - { - a << xsd::cxx::tree::bits::insert<char> (d); - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_DECIMAL_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/double.hxx b/libxsd/xsd/cxx/tree/serialization/double.hxx deleted file mode 100644 index 1375836..0000000 --- a/libxsd/xsd/cxx/tree/serialization/double.hxx +++ /dev/null @@ -1,94 +0,0 @@ -// file : xsd/cxx/tree/serialization/double.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX -#define XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX - -#include <limits> // std::numeric_limits -#include <locale> -#include <sstream> - -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // The formula for the number of decimla digits required is given in: - // - // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf - // - template <typename C> - std::basic_string<C> - insert (const as_double<double>& d) - { - std::basic_string<C> r; - - if (d.x == std::numeric_limits<double>::infinity ()) - r = bits::positive_inf<C> (); - else if (d.x == -std::numeric_limits<double>::infinity ()) - r = bits::negative_inf<C> (); - else if (!(d.x == d.x)) - r = bits::nan<C> (); - else - { - std::basic_ostringstream<C> os; - os.imbue (std::locale::classic ()); - - // Precision. - // -#if defined (XSD_CXX_TREE_DOUBLE_PRECISION_MAX) - os.precision (2 + std::numeric_limits<double>::digits * 301/1000); -#elif defined (XSD_CXX_TREE_DOUBLE_PRECISION) - os.precision (XSD_CXX_TREE_DOUBLE_PRECISION); -#else - os.precision (std::numeric_limits<double>::digits10); -#endif - // Format. - // -#if defined (XSD_CXX_TREE_DOUBLE_FIXED) - os << std::fixed << d.x; -#elif defined (XSD_CXX_TREE_DOUBLE_SCIENTIFIC) - os << std::scientific << d.x; -#else - os << d.x; -#endif - r = os.str (); - } - - return r; - } - } - - template <typename C> - inline void - operator<< (list_stream<C>& ls, const as_double<double>& d) - { - ls.os_ << bits::insert<C> (d); - } - } - } -} - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, - const xsd::cxx::tree::as_double<double>& d) - { - e << xsd::cxx::tree::bits::insert<char> (d); - } - - inline void - operator<< (xercesc::DOMAttr& a, - const xsd::cxx::tree::as_double<double>& d) - { - a << xsd::cxx::tree::bits::insert<char> (d); - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_DOUBLE_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/element-map.txx b/libxsd/xsd/cxx/tree/serialization/element-map.txx deleted file mode 100644 index a4c199e..0000000 --- a/libxsd/xsd/cxx/tree/serialization/element-map.txx +++ /dev/null @@ -1,38 +0,0 @@ -// file : xsd/cxx/tree/serialization/element-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX -#define XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX - -#include <xsd/cxx/tree/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C, typename T> - void element_map<C, T>:: - serialize (xercesc::DOMElement& e, const element_type& x) - { - const qualified_name n (x._name (), x._namespace ()); - typename map::const_iterator i (map_->find (n)); - - if (i != map_->end () && i->second.serializer_ != 0) - return (i->second.serializer_) (e, x); - else - throw no_element_info<C> (n.name (), n.namespace_ ()); - } - - template<typename T, typename C, typename B> - void - serializer_impl (xercesc::DOMElement& e, const element_type<C, B>& x) - { - e << static_cast<const T&> (x); - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_ELEMENT_MAP_TXX diff --git a/libxsd/xsd/cxx/tree/serialization/float.hxx b/libxsd/xsd/cxx/tree/serialization/float.hxx deleted file mode 100644 index ef935a3..0000000 --- a/libxsd/xsd/cxx/tree/serialization/float.hxx +++ /dev/null @@ -1,92 +0,0 @@ -// file : xsd/cxx/tree/serialization/float.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX -#define XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX - -#include <limits> // std::numeric_limits -#include <locale> -#include <sstream> - -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - namespace bits - { - // The formula for the number of decimla digits required is given in: - // - // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf - // - template <typename C> - std::basic_string<C> - insert (float f) - { - std::basic_string<C> r; - - if (f == std::numeric_limits<float>::infinity ()) - r = bits::positive_inf<C> (); - else if (f == -std::numeric_limits<float>::infinity ()) - r = bits::negative_inf<C> (); - else if (!(f == f)) - r = bits::nan<C> (); - else - { - std::basic_ostringstream<C> os; - os.imbue (std::locale::classic ()); - - // Precision. - // -#if defined (XSD_CXX_TREE_FLOAT_PRECISION_MAX) - os.precision (2 + std::numeric_limits<float>::digits * 301/1000); -#elif defined (XSD_CXX_TREE_FLOAT_PRECISION) - os.precision (XSD_CXX_TREE_FLOAT_PRECISION); -#else - os.precision (std::numeric_limits<float>::digits10); -#endif - // Format. - // -#if defined (XSD_CXX_TREE_FLOAT_FIXED) - os << std::fixed << f; -#elif defined (XSD_CXX_TREE_FLOAT_SCIENTIFIC) - os << std::scientific << f; -#else - os << f; -#endif - r = os.str (); - } - - return r; - } - } - - template <typename C> - inline void - operator<< (list_stream<C>& ls, float f) - { - ls.os_ << bits::insert<C> (f); - } - } - } -} - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, float f) - { - e << xsd::cxx::tree::bits::insert<char> (f); - } - - inline void - operator<< (xercesc::DOMAttr& a, float f) - { - a << xsd::cxx::tree::bits::insert<char> (f); - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_FLOAT_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/int.hxx b/libxsd/xsd/cxx/tree/serialization/int.hxx deleted file mode 100644 index a01c11a..0000000 --- a/libxsd/xsd/cxx/tree/serialization/int.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/int.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_INT_HXX -#define XSD_CXX_TREE_SERIALIZATION_INT_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, int i) - { - std::basic_ostringstream<char> os; - os << i; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, int i) - { - std::basic_ostringstream<char> os; - os << i; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, int i) - { - ls.os_ << i; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_INT_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/long.hxx b/libxsd/xsd/cxx/tree/serialization/long.hxx deleted file mode 100644 index 5978e55..0000000 --- a/libxsd/xsd/cxx/tree/serialization/long.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/long.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_LONG_HXX -#define XSD_CXX_TREE_SERIALIZATION_LONG_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, long long l) - { - std::basic_ostringstream<char> os; - os << l; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, long long l) - { - std::basic_ostringstream<char> os; - os << l; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, long long l) - { - ls.os_ << l; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_LONG_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/short.hxx b/libxsd/xsd/cxx/tree/serialization/short.hxx deleted file mode 100644 index d10f047..0000000 --- a/libxsd/xsd/cxx/tree/serialization/short.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/short.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_SHORT_HXX -#define XSD_CXX_TREE_SERIALIZATION_SHORT_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, short s) - { - std::basic_ostringstream<char> os; - os << s; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, short s) - { - std::basic_ostringstream<char> os; - os << s; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, short s) - { - ls.os_ << s; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_SHORT_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx b/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx deleted file mode 100644 index 889a0de..0000000 --- a/libxsd/xsd/cxx/tree/serialization/unsigned-byte.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/unsigned-byte.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX -#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, unsigned char c) - { - std::basic_ostringstream<char> os; - os << static_cast<unsigned short> (c); - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, unsigned char c) - { - std::basic_ostringstream<char> os; - os << static_cast<unsigned short> (c); - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, unsigned char c) - { - ls.os_ << static_cast<unsigned short> (c); - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_BYTE_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx b/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx deleted file mode 100644 index eb34a1d..0000000 --- a/libxsd/xsd/cxx/tree/serialization/unsigned-int.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/unsigned-int.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX -#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, unsigned int i) - { - std::basic_ostringstream<char> os; - os << i; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, unsigned int i) - { - std::basic_ostringstream<char> os; - os << i; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, unsigned int i) - { - ls.os_ << i; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_INT_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx b/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx deleted file mode 100644 index 2c857da..0000000 --- a/libxsd/xsd/cxx/tree/serialization/unsigned-long.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/unsigned-long.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX -#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, unsigned long long l) - { - std::basic_ostringstream<char> os; - os << l; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, unsigned long long l) - { - std::basic_ostringstream<char> os; - os << l; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, unsigned long long l) - { - ls.os_ << l; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_LONG_HXX diff --git a/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx b/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx deleted file mode 100644 index 15dc743..0000000 --- a/libxsd/xsd/cxx/tree/serialization/unsigned-short.hxx +++ /dev/null @@ -1,44 +0,0 @@ -// file : xsd/cxx/tree/serialization/unsigned-short.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX -#define XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX - -#include <sstream> - -namespace XERCES_CPP_NAMESPACE -{ - inline void - operator<< (xercesc::DOMElement& e, unsigned short s) - { - std::basic_ostringstream<char> os; - os << s; - e << os.str (); - } - - inline void - operator<< (xercesc::DOMAttr& a, unsigned short s) - { - std::basic_ostringstream<char> os; - os << s; - a << os.str (); - } -} - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - inline void - operator<< (list_stream<C>& ls, unsigned short s) - { - ls.os_ << s; - } - } - } -} - -#endif // XSD_CXX_TREE_SERIALIZATION_UNSIGNED_SHORT_HXX diff --git a/libxsd/xsd/cxx/tree/std-ostream-map.hxx b/libxsd/xsd/cxx/tree/std-ostream-map.hxx deleted file mode 100644 index 87d2621..0000000 --- a/libxsd/xsd/cxx/tree/std-ostream-map.hxx +++ /dev/null @@ -1,112 +0,0 @@ -// file : xsd/cxx/tree/std-ostream-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_STD_OSTREAM_MAP_HXX -#define XSD_CXX_TREE_STD_OSTREAM_MAP_HXX - -#include <map> -#include <cstddef> // std::size_t -#include <ostream> -#include <typeinfo> - -#include <xsd/cxx/tree/elements.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct std_ostream_map - { - typedef std::type_info type_id; - typedef void (*inserter) (std::basic_ostream<C>&, const type&); - - std_ostream_map (); - - void - register_type (const type_id&, inserter, bool replace = true); - - void - unregister_type (const type_id&); - - void - insert (std::basic_ostream<C>&, const type&); - - public: - inserter - find (const type_id&) const; - - private: - struct type_id_comparator - { - bool - operator() (const type_id* x, const type_id* y) const - { - // XL C++ on AIX has buggy type_info::before() in that - // it returns true for two different type_info objects - // that happened to be for the same type. - // -#if defined(__xlC__) && defined(_AIX) - return *x != *y && x->before (*y); -#else - return x->before (*y); -#endif - } - }; - - typedef - std::map<const type_id*, inserter, type_id_comparator> - type_map; - - type_map type_map_; - }; - - // - // - template<unsigned long id, typename C> - struct std_ostream_plate - { - static std_ostream_map<C>* map; - static std::size_t count; - - std_ostream_plate (); - ~std_ostream_plate (); - }; - - template<unsigned long id, typename C> - std_ostream_map<C>* std_ostream_plate<id, C>::map = 0; - - template<unsigned long id, typename C> - std::size_t std_ostream_plate<id, C>::count = 0; - - - // - // - template<unsigned long id, typename C> - inline std_ostream_map<C>& - std_ostream_map_instance () - { - return *std_ostream_plate<id, C>::map; - } - - // - // - template<typename C, typename T> - void - inserter_impl (std::basic_ostream<C>&, const type&); - - template<unsigned long id, typename C, typename T> - struct std_ostream_initializer - { - std_ostream_initializer (); - ~std_ostream_initializer (); - }; - } - } -} - -#include <xsd/cxx/tree/std-ostream-map.txx> - -#endif // XSD_CXX_TREE_STD_OSTREAM_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/std-ostream-map.txx b/libxsd/xsd/cxx/tree/std-ostream-map.txx deleted file mode 100644 index a8cfa32..0000000 --- a/libxsd/xsd/cxx/tree/std-ostream-map.txx +++ /dev/null @@ -1,291 +0,0 @@ -// file : xsd/cxx/tree/std-ostream-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/std-ostream-operators.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // std_ostream_map - // - template <typename C> - std_ostream_map<C>:: - std_ostream_map () - { - // anyType and anySimpleType. - // - register_type ( - typeid (type), - &inserter_impl<C, type>, - false); - - typedef simple_type<C, type> simple_type; - register_type ( - typeid (simple_type), - &inserter_impl<C, simple_type>, - false); - - - // Strings - // - typedef string<C, simple_type> string; - register_type ( - typeid (string), - &inserter_impl<C, string>, - false); - - typedef normalized_string<C, string> normalized_string; - register_type ( - typeid (normalized_string), - &inserter_impl<C, normalized_string>, - false); - - typedef token<C, normalized_string> token; - register_type ( - typeid (token), - &inserter_impl<C, token>, - false); - - typedef name<C, token> name; - register_type ( - typeid (name), - &inserter_impl<C, name>, - false); - - typedef nmtoken<C, token> nmtoken; - register_type ( - typeid (nmtoken), - &inserter_impl<C, nmtoken>, - false); - - typedef nmtokens<C, simple_type, nmtoken> nmtokens; - register_type ( - typeid (nmtokens), - &inserter_impl<C, nmtokens>, - false); - - typedef ncname<C, name> ncname; - register_type ( - typeid (ncname), - &inserter_impl<C, ncname>, - false); - - typedef language<C, token> language; - register_type ( - typeid (language), - &inserter_impl<C, language>, - false); - - - // ID/IDREF. - // - typedef id<C, ncname> id; - register_type ( - typeid (id), - &inserter_impl<C, id>, - false); - - typedef idref<C, ncname, type> idref; - register_type ( - typeid (idref), - &inserter_impl<C, idref>, - false); - - typedef idrefs<C, simple_type, idref> idrefs; - register_type ( - typeid (idrefs), - &inserter_impl<C, idrefs>, - false); - - - // URI. - // - typedef uri<C, simple_type> uri; - register_type ( - typeid (uri), - &inserter_impl<C, uri>, - false); - - - // Qualified name. - // - typedef qname<C, simple_type, uri, ncname> qname; - register_type ( - typeid (qname), - &inserter_impl<C, qname>, - false); - - - // Binary. - // - typedef base64_binary<C, simple_type> base64_binary; - register_type ( - typeid (base64_binary), - &inserter_impl<C, base64_binary>, - false); - - typedef hex_binary<C, simple_type> hex_binary; - register_type ( - typeid (hex_binary), - &inserter_impl<C, hex_binary>, - false); - - - // Date/time. - // - typedef gday<C, simple_type> gday; - register_type ( - typeid (gday), - &inserter_impl<C, gday>, - false); - - typedef gmonth<C, simple_type> gmonth; - register_type ( - typeid (gmonth), - &inserter_impl<C, gmonth>, - false); - - typedef gyear<C, simple_type> gyear; - register_type ( - typeid (gyear), - &inserter_impl<C, gyear>, - false); - - typedef gmonth_day<C, simple_type> gmonth_day; - register_type ( - typeid (gmonth_day), - &inserter_impl<C, gmonth_day>, - false); - - typedef gyear_month<C, simple_type> gyear_month; - register_type ( - typeid (gyear_month), - &inserter_impl<C, gyear_month>, - false); - - typedef date<C, simple_type> date; - register_type ( - typeid (date), - &inserter_impl<C, date>, - false); - - typedef time<C, simple_type> time; - register_type ( - typeid (time), - &inserter_impl<C, time>, - false); - - typedef date_time<C, simple_type> date_time; - register_type ( - typeid (date_time), - &inserter_impl<C, date_time>, - false); - - typedef duration<C, simple_type> duration; - register_type ( - typeid (duration), - &inserter_impl<C, duration>, - false); - - - // Entity. - // - typedef entity<C, ncname> entity; - register_type ( - typeid (entity), - &inserter_impl<C, entity>, - false); - - typedef entities<C, simple_type, entity> entities; - register_type ( - typeid (entities), - &inserter_impl<C, entities>, - false); - } - - template <typename C> - void std_ostream_map<C>:: - register_type (const type_id& tid, inserter i, bool replace) - { - if (replace || type_map_.find (&tid) == type_map_.end ()) - type_map_[&tid] = i; - } - - template <typename C> - void std_ostream_map<C>:: - unregister_type (const type_id& tid) - { - type_map_.erase (&tid); - } - - template <typename C> - void std_ostream_map<C>:: - insert (std::basic_ostream<C>& os, const type& x) - { - if (inserter i = find (typeid (x))) - i (os, x); - else - throw no_type_info<C> (std::basic_string<C> (), - std::basic_string<C> ()); // @@ TODO - } - - template <typename C> - typename std_ostream_map<C>::inserter std_ostream_map<C>:: - find (const type_id& tid) const - { - typename type_map::const_iterator i (type_map_.find (&tid)); - return i == type_map_.end () ? 0 : i->second; - } - - // std_ostream_plate - // - template<unsigned long id, typename C> - std_ostream_plate<id, C>:: - std_ostream_plate () - { - if (count == 0) - map = new std_ostream_map<C>; - - ++count; - } - - template<unsigned long id, typename C> - std_ostream_plate<id, C>:: - ~std_ostream_plate () - { - if (--count == 0) - delete map; - } - - // - // - template<typename C, typename T> - void - inserter_impl (std::basic_ostream<C>& os, const type& x) - { - os << static_cast<const T&> (x); - } - - // std_ostream_initializer - // - template<unsigned long id, typename C, typename T> - std_ostream_initializer<id, C, T>:: - std_ostream_initializer () - { - std_ostream_map_instance<id, C> ().register_type ( - typeid (T), &inserter_impl<C, T>); - } - - template<unsigned long id, typename C, typename T> - std_ostream_initializer<id, C, T>:: - ~std_ostream_initializer () - { - std_ostream_map_instance<id, C> ().unregister_type (typeid (T)); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/std-ostream-operators.hxx b/libxsd/xsd/cxx/tree/std-ostream-operators.hxx deleted file mode 100644 index 620f23a..0000000 --- a/libxsd/xsd/cxx/tree/std-ostream-operators.hxx +++ /dev/null @@ -1,276 +0,0 @@ -// file : xsd/cxx/tree/std-ostream-operators.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX -#define XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX - -#include <ostream> - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/containers.hxx> -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/list.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // type - // - template <typename C> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const type&) - { - // Not printing DOM content even if it's there. - return os; - } - - - // simple_type - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const simple_type<C, B>& x) - { - if (!x.null_content ()) - os << x.text_content (); - - return os; - } - - - // fundamental_base - // - template <typename T, typename C, typename B, schema_type::value ST> - inline - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, fundamental_base<T, C, B, ST> x) - { - T& r (x); - return os << r; - } - - // optional: see containers.hxx - // - - // list - // - - // This is an xsd:list-style format (space-separated). - // - template <typename C, typename T, schema_type::value ST, bool fund> - std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const list<T, C, ST, fund>& v) - { - for (typename list<T, C, ST, fund>::const_iterator - b (v.begin ()), e (v.end ()), i (b); i != e; ++i) - { - if (i != b) - os << C (' '); - - os << *i; - } - - return os; - } - - - // Operators for built-in types. - // - - - // string - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const string<C, B>& v) - { - const std::basic_string<C>& r (v); - return os << r; - } - - - // normalized_string - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const normalized_string<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // token - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const token<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // nmtoken - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const nmtoken<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // nmtokens - // - template <typename C, typename B, typename nmtoken> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const nmtokens<C, B, nmtoken>& v) - { - const list<nmtoken, C>& r (v); - return os << r; - } - - - // name - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const name<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // ncname - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const ncname<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // language - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const language<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // id - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const id<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // idref - // - template <typename C, typename B, typename T> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const idref<C, B, T>& v) - { - const B& r (v); - return os << r; - } - - - // idrefs - // - template <typename C, typename B, typename idref> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const idrefs<C, B, idref>& v) - { - const list<idref, C>& r (v); - return os << r; - } - - - // uri - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const uri<C, B>& v) - { - const std::basic_string<C>& r (v); - return os << r; - } - - - // qname - // - template <typename C, typename B, typename uri, typename ncname> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, - const qname<C, B, uri, ncname>& n) - { - if (n.qualified ()) - os << n.namespace_ () << C ('#'); - - return os << n.name (); - } - - - // base64_binary - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const base64_binary<C, B>& v) - { - return os << v.encode (); - } - - - // hex_binary - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const hex_binary<C, B>& v) - { - return os << v.encode (); - } - - - // entity - // - template <typename C, typename B> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const entity<C, B>& v) - { - const B& r (v); - return os << r; - } - - - // entities - // - template <typename C, typename B, typename entity> - inline std::basic_ostream<C>& - operator<< (std::basic_ostream<C>& os, const entities<C, B, entity>& v) - { - const list<entity, C>& r (v); - return os << r; - } - } - } -} - -#include <xsd/cxx/tree/date-time-ostream.txx> - -#endif // XSD_CXX_TREE_STD_OSTREAM_OPERATORS_HXX diff --git a/libxsd/xsd/cxx/tree/stream-extraction-map.hxx b/libxsd/xsd/cxx/tree/stream-extraction-map.hxx deleted file mode 100644 index 698f432..0000000 --- a/libxsd/xsd/cxx/tree/stream-extraction-map.hxx +++ /dev/null @@ -1,105 +0,0 @@ -// file : xsd/cxx/tree/stream-extraction-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX -#define XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX - -#include <map> -#include <memory> // std::auto_ptr/unique_ptr -#include <cstddef> // std::size_t - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/istream.hxx> -#include <xsd/cxx/xml/qualified-name.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename S, typename C> - struct stream_extraction_map - { - typedef xml::qualified_name<C> qualified_name; - typedef XSD_AUTO_PTR<type> (*extractor) ( - istream<S>&, flags, container*); - - public: - stream_extraction_map (); - - void - register_type (const qualified_name& name, - extractor, - bool replace = true); - - void - unregister_type (const qualified_name& name); - - XSD_AUTO_PTR<type> - extract (istream<S>&, flags, container*); - - public: - extractor - find (const qualified_name& name) const; - - private: - typedef std::map<qualified_name, extractor> type_map; - - type_map type_map_; - }; - - // - // - template<unsigned long id, typename S, typename C> - struct stream_extraction_plate - { - static stream_extraction_map<S, C>* map; - static std::size_t count; - - stream_extraction_plate (); - ~stream_extraction_plate (); - }; - - template<unsigned long id, typename S, typename C> - stream_extraction_map<S, C>* stream_extraction_plate<id, S, C>::map = 0; - - template<unsigned long id, typename S, typename C> - std::size_t stream_extraction_plate<id, S, C>::count = 0; - - - // - // - template<unsigned long id, typename S, typename C> - inline stream_extraction_map<S, C>& - stream_extraction_map_instance () - { - return *stream_extraction_plate<id, S, C>::map; - } - - // - // - template<typename S, typename T> - XSD_AUTO_PTR<type> - extractor_impl (istream<S>&, flags, container*); - - - template<unsigned long id, typename S, typename C, typename T> - struct stream_extraction_initializer - { - stream_extraction_initializer (const C* name, const C* ns); - ~stream_extraction_initializer (); - - private: - const C* name_; - const C* ns_; - }; - } - } -} - -#include <xsd/cxx/tree/stream-extraction-map.txx> - -#endif // XSD_CXX_TREE_STREAM_EXTRACTION_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/stream-extraction-map.txx b/libxsd/xsd/cxx/tree/stream-extraction-map.txx deleted file mode 100644 index 55950d3..0000000 --- a/libxsd/xsd/cxx/tree/stream-extraction-map.txx +++ /dev/null @@ -1,331 +0,0 @@ -// file : xsd/cxx/tree/stream-extraction-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/stream-extraction.hxx> -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // stream_extraction_map - // - template <typename S, typename C> - stream_extraction_map<S, C>:: - stream_extraction_map () - { - // Register extractors for built-in non-fundamental types. - // - std::basic_string<C> xsd (bits::xml_schema<C> ()); - - - // anyType and anySimpleType. - // - register_type ( - qualified_name (bits::any_type<C> (), xsd), - &extractor_impl<S, type>, - false); - - typedef simple_type<C, type> simple_type; - register_type ( - qualified_name (bits::any_simple_type<C> (), xsd), - &extractor_impl<S, simple_type>, - false); - - - // Strings - // - typedef string<C, simple_type> string; - register_type ( - qualified_name (bits::string<C> (), xsd), - &extractor_impl<S, string>, - false); - - typedef normalized_string<C, string> normalized_string; - register_type ( - qualified_name (bits::normalized_string<C> (), xsd), - &extractor_impl<S, normalized_string>, - false); - - typedef token<C, normalized_string> token; - register_type ( - qualified_name (bits::token<C> (), xsd), - &extractor_impl<S, token>, - false); - - typedef name<C, token> name; - register_type ( - qualified_name (bits::name<C> (), xsd), - &extractor_impl<S, name>, - false); - - typedef nmtoken<C, token> nmtoken; - register_type ( - qualified_name (bits::nmtoken<C> (), xsd), - &extractor_impl<S, nmtoken>, - false); - - typedef nmtokens<C, simple_type, nmtoken> nmtokens; - register_type ( - qualified_name (bits::nmtokens<C> (), xsd), - &extractor_impl<S, nmtokens>, - false); - - typedef ncname<C, name> ncname; - register_type ( - qualified_name (bits::ncname<C> (), xsd), - &extractor_impl<S, ncname>, - false); - - typedef language<C, token> language; - register_type ( - qualified_name (bits::language<C> (), xsd), - &extractor_impl<S, language>, - false); - - - // ID/IDREF. - // - typedef id<C, ncname> id; - register_type ( - qualified_name (bits::id<C> (), xsd), - &extractor_impl<S, id>, - false); - - typedef idref<C, ncname, type> idref; - register_type ( - qualified_name (bits::idref<C> (), xsd), - &extractor_impl<S, idref>, - false); - - typedef idrefs<C, simple_type, idref> idrefs; - register_type ( - qualified_name (bits::idrefs<C> (), xsd), - &extractor_impl<S, idrefs>, - false); - - - // URI. - // - typedef uri<C, simple_type> uri; - register_type ( - qualified_name (bits::any_uri<C> (), xsd), - &extractor_impl<S, uri>, - false); - - - // Qualified name. - // - typedef qname<C, simple_type, uri, ncname> qname; - register_type ( - qualified_name (bits::qname<C> (), xsd), - &extractor_impl<S, qname>, - false); - - - // Binary. - // - typedef base64_binary<C, simple_type> base64_binary; - register_type ( - qualified_name (bits::base64_binary<C> (), xsd), - &extractor_impl<S, base64_binary>, - false); - - typedef hex_binary<C, simple_type> hex_binary; - register_type ( - qualified_name (bits::hex_binary<C> (), xsd), - &extractor_impl<S, hex_binary>, - false); - - - // Date/time. - // - typedef gday<C, simple_type> gday; - register_type ( - qualified_name (bits::gday<C> (), xsd), - &extractor_impl<S, gday>, - false); - - typedef gmonth<C, simple_type> gmonth; - register_type ( - qualified_name (bits::gmonth<C> (), xsd), - &extractor_impl<S, gmonth>, - false); - - typedef gyear<C, simple_type> gyear; - register_type ( - qualified_name (bits::gyear<C> (), xsd), - &extractor_impl<S, gyear>, - false); - - typedef gmonth_day<C, simple_type> gmonth_day; - register_type ( - qualified_name (bits::gmonth_day<C> (), xsd), - &extractor_impl<S, gmonth_day>, - false); - - typedef gyear_month<C, simple_type> gyear_month; - register_type ( - qualified_name (bits::gyear_month<C> (), xsd), - &extractor_impl<S, gyear_month>, - false); - - typedef date<C, simple_type> date; - register_type ( - qualified_name (bits::date<C> (), xsd), - &extractor_impl<S, date>, - false); - - typedef time<C, simple_type> time; - register_type ( - qualified_name (bits::time<C> (), xsd), - &extractor_impl<S, time>, - false); - - typedef date_time<C, simple_type> date_time; - register_type ( - qualified_name (bits::date_time<C> (), xsd), - &extractor_impl<S, date_time>, - false); - - typedef duration<C, simple_type> duration; - register_type ( - qualified_name (bits::duration<C> (), xsd), - &extractor_impl<S, duration>, - false); - - - // Entity. - // - typedef entity<C, ncname> entity; - register_type ( - qualified_name (bits::entity<C> (), xsd), - &extractor_impl<S, entity>, - false); - - typedef entities<C, simple_type, entity> entities; - register_type ( - qualified_name (bits::entities<C> (), xsd), - &extractor_impl<S, entities>, - false); - } - - template <typename S, typename C> - void stream_extraction_map<S, C>:: - register_type (const qualified_name& name, - extractor e, - bool replace) - { - if (replace || type_map_.find (name) == type_map_.end ()) - type_map_[name] = e; - } - - template <typename S, typename C> - void stream_extraction_map<S, C>:: - unregister_type (const qualified_name& name) - { - type_map_.erase (name); - } - - template <typename S, typename C> - XSD_AUTO_PTR<type> stream_extraction_map<S, C>:: - extract (istream<S>& s, flags f, container* c) - { - std::basic_string<C> ns, name; - - // The namespace and name strings are pooled. - // - std::size_t id; - istream_common::as_size<std::size_t> as_size (id); - s >> as_size; - - if (id != 0) - s.pool_string (id, ns); - else - { - s >> ns; - s.pool_add (ns); - } - - s >> as_size; - - if (id != 0) - s.pool_string (id, name); - else - { - s >> name; - s.pool_add (name); - } - - if (extractor e = find (qualified_name (name, ns))) - { - return e (s, f, c); - } - else - throw no_type_info<C> (name, ns); - } - - template <typename S, typename C> - typename stream_extraction_map<S, C>::extractor - stream_extraction_map<S, C>:: - find (const qualified_name& name) const - { - typename type_map::const_iterator i (type_map_.find (name)); - return i == type_map_.end () ? 0 : i->second; - } - - - // stream_extraction_plate - // - template<unsigned long id, typename S, typename C> - stream_extraction_plate<id, S, C>:: - stream_extraction_plate () - { - if (count == 0) - map = new stream_extraction_map<S, C>; - - ++count; - } - - template<unsigned long id, typename S, typename C> - stream_extraction_plate<id, S, C>:: - ~stream_extraction_plate () - { - if (--count == 0) - delete map; - } - - // - // - template<typename S, typename T> - XSD_AUTO_PTR<type> - extractor_impl (istream<S>& s, flags f, container* c) - { - return XSD_AUTO_PTR<type> (new T (s, f, c)); - } - - - // stream_extraction_initializer - // - template<unsigned long id, typename S, typename C, typename T> - stream_extraction_initializer<id, S, C, T>:: - stream_extraction_initializer (const C* name, const C* ns) - : name_ (name), ns_ (ns) - { - stream_extraction_map_instance<id, S, C> ().register_type ( - xml::qualified_name<C> (name, ns), &extractor_impl<S, T>); - } - - template<unsigned long id, typename S, typename C, typename T> - stream_extraction_initializer<id, S, C, T>:: - ~stream_extraction_initializer () - { - stream_extraction_map_instance<id, S, C> ().unregister_type ( - xml::qualified_name<C> (name_, ns_)); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/stream-extraction.hxx b/libxsd/xsd/cxx/tree/stream-extraction.hxx deleted file mode 100644 index ff909d8..0000000 --- a/libxsd/xsd/cxx/tree/stream-extraction.hxx +++ /dev/null @@ -1,304 +0,0 @@ -// file : xsd/cxx/tree/stream-extraction.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_STREAM_EXTRACTION_HXX -#define XSD_CXX_TREE_STREAM_EXTRACTION_HXX - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/list.hxx> - -#include <xsd/cxx/tree/istream.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // type - // - template <typename S> - inline _type:: - _type (istream<S>&, flags, container* c) - : container_ (c) - { - } - - // simple_type - // - template <typename C, typename B> - template <typename S> - inline simple_type<C, B>:: - simple_type (istream<S>& s, flags f, container* c) - : type (s, f & ~flags::extract_content, c) - { - if (f & flags::extract_content) - { - std::basic_string<C> t; - s >> t; - this->content_.reset (new text_content_type (t)); - } - } - - // fundamental_base - // - template <typename T, typename C, typename B, schema_type::value ST> - template <typename S> - inline fundamental_base<T, C, B, ST>:: - fundamental_base (istream<S>& s, flags f, container* c) - : B (s, f, c), facet_table_ (0) - { - T& r (*this); - s >> r; - } - - // list - // - template <typename T, typename C, schema_type::value ST> - template <typename S> - list<T, C, ST, false>:: - list (istream<S>& s, flags f, container* c) - : sequence<T> (c) - { - std::size_t size; - istream_common::as_size<std::size_t> as_size (size); - s >> as_size; - - if (size > 0) - { - this->reserve (size); - - while (size--) - this->push_back (traits<T, C, ST>::create (s, f, c)); - } - } - - template <typename T, typename C, schema_type::value ST> - template <typename S> - list<T, C, ST, true>:: - list (istream<S>& s, flags, container* c) - : sequence<T> (c) - { - std::size_t size; - istream_common::as_size<std::size_t> as_size (size); - s >> as_size; - - if (size > 0) - { - this->reserve (size); - - while (size--) - { - T x; - s >> x; - this->push_back (x); - } - } - } - - // Extraction operators for built-in types. - // - - - // string - // - template <typename C, typename B> - template <typename S> - inline string<C, B>:: - string (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - std::basic_string<C>& r (*this); - s >> r; - } - - - // normalized_string - // - template <typename C, typename B> - template <typename S> - inline normalized_string<C, B>:: - normalized_string (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // token - // - template <typename C, typename B> - template <typename S> - inline token<C, B>:: - token (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // nmtoken - // - template <typename C, typename B> - template <typename S> - inline nmtoken<C, B>:: - nmtoken (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // nmtokens - // - template <typename C, typename B, typename nmtoken> - template <typename S> - inline nmtokens<C, B, nmtoken>:: - nmtokens (istream<S>& s, flags f, container* c) - : B (s, f, c), base_type (s, f, this) - { - } - - - // name - // - template <typename C, typename B> - template <typename S> - inline name<C, B>:: - name (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // ncname - // - template <typename C, typename B> - template <typename S> - inline ncname<C, B>:: - ncname (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // language - // - template <typename C, typename B> - template <typename S> - inline language<C, B>:: - language (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // id - // - template <typename C, typename B> - template <typename S> - inline id<C, B>:: - id (istream<S>& s, flags f, container* c) - : B (s, f, c), identity_ (*this) - { - register_id (); - } - - - // idref - // - template <typename C, typename B, typename T> - template <typename S> - inline idref<C, B, T>:: - idref (istream<S>& s, flags f, container* c) - : B (s, f, c), identity_ (*this) - { - } - - - // idrefs - // - template <typename C, typename B, typename idref> - template <typename S> - inline idrefs<C, B, idref>:: - idrefs (istream<S>& s, flags f, container* c) - : B (s, f, c), base_type (s, f, this) - { - } - - - // uri - // - template <typename C, typename B> - template <typename S> - inline uri<C, B>:: - uri (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - std::basic_string<C>& r (*this); - s >> r; - } - - - // qname - // - template <typename C, typename B, typename uri, typename ncname> - template <typename S> - inline qname<C, B, uri, ncname>:: - qname (istream<S>& s, flags f, container* c) - : B (s, f, c), ns_ (s), name_ (s) - { - } - - - // base64_binary - // - template <typename C, typename B> - template <typename S> - inline base64_binary<C, B>:: - base64_binary (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - buffer<C>& r (*this); - s >> r; - } - - - // hex_binary - // - template <typename C, typename B> - template <typename S> - inline hex_binary<C, B>:: - hex_binary (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - buffer<C>& r (*this); - s >> r; - } - - - // entity - // - template <typename C, typename B> - template <typename S> - inline entity<C, B>:: - entity (istream<S>& s, flags f, container* c) - : B (s, f, c) - { - } - - - // entities - // - template <typename C, typename B, typename entity> - template <typename S> - inline entities<C, B, entity>:: - entities (istream<S>& s, flags f, container* c) - : B (s, f, c), base_type (s, f, this) - { - } - } - } -} - -#include <xsd/cxx/tree/date-time-extraction.txx> - -#endif // XSD_CXX_TREE_STREAM_EXTRACTION_HXX diff --git a/libxsd/xsd/cxx/tree/stream-insertion-map.hxx b/libxsd/xsd/cxx/tree/stream-insertion-map.hxx deleted file mode 100644 index 86c02f3..0000000 --- a/libxsd/xsd/cxx/tree/stream-insertion-map.hxx +++ /dev/null @@ -1,152 +0,0 @@ -// file : xsd/cxx/tree/stream-insertion-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX -#define XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX - -#include <map> -#include <string> -#include <cstddef> // std::size_t -#include <typeinfo> - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/ostream.hxx> -#include <xsd/cxx/xml/qualified-name.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename S, typename C> - struct stream_insertion_map - { - typedef std::type_info type_id; - typedef xml::qualified_name<C> qualified_name; - typedef void (*inserter) (ostream<S>&, const type&); - - stream_insertion_map (); - - void - register_type (const type_id&, - const qualified_name& name, - inserter, - bool replace = true); - - void - unregister_type (const type_id&); - - void - insert (ostream<S>&, const type&); - - public: - struct type_info - { - type_info (const qualified_name& name, - typename stream_insertion_map::inserter inserter) - : name_ (name), inserter_ (inserter) - { - } - - const qualified_name& - name () const - { - return name_; - } - - typename stream_insertion_map::inserter - inserter () const - { - return inserter_; - } - - // For std::map. - // - type_info () - : name_ (std::basic_string<C> (), std::basic_string<C> ()), - inserter_ (0) - { - } - - private: - qualified_name name_; - typename stream_insertion_map::inserter inserter_; - }; - - public: - const type_info* - find (const type_id&) const; - - private: - struct type_id_comparator - { - bool - operator() (const type_id* x, const type_id* y) const - { - // XL C++ on AIX has buggy type_info::before() in that - // it returns true for two different type_info objects - // that happened to be for the same type. - // -#if defined(__xlC__) && defined(_AIX) - return *x != *y && x->before (*y); -#else - return x->before (*y); -#endif - } - }; - - typedef - std::map<const type_id*, type_info, type_id_comparator> - type_map; - - type_map type_map_; - }; - - // - // - template<unsigned long id, typename S, typename C> - struct stream_insertion_plate - { - static stream_insertion_map<S, C>* map; - static std::size_t count; - - stream_insertion_plate (); - ~stream_insertion_plate (); - }; - - template<unsigned long id, typename S, typename C> - stream_insertion_map<S, C>* stream_insertion_plate<id, S, C>::map = 0; - - template<unsigned long id, typename S, typename C> - std::size_t stream_insertion_plate<id, S, C>::count = 0; - - - // - // - template<unsigned long id, typename S, typename C> - inline stream_insertion_map<S, C>& - stream_insertion_map_instance () - { - return *stream_insertion_plate<id, S, C>::map; - } - - // - // - template<typename S, typename T> - void - inserter_impl (ostream<S>&, const type&); - - template<unsigned long id, typename S, typename C, typename T> - struct stream_insertion_initializer - { - stream_insertion_initializer (const C* name, const C* ns); - ~stream_insertion_initializer (); - }; - } - } -} - -#include <xsd/cxx/tree/stream-insertion-map.txx> - -#endif // XSD_CXX_TREE_STREAM_INSERTION_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/stream-insertion-map.txx b/libxsd/xsd/cxx/tree/stream-insertion-map.txx deleted file mode 100644 index 3fb4b6a..0000000 --- a/libxsd/xsd/cxx/tree/stream-insertion-map.txx +++ /dev/null @@ -1,355 +0,0 @@ -// file : xsd/cxx/tree/stream-insertion-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/stream-insertion.hxx> -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // stream_insertion_map - // - template <typename S, typename C> - stream_insertion_map<S, C>:: - stream_insertion_map () - { - // Register inserters for built-in non-fundamental types. - // - std::basic_string<C> xsd (bits::xml_schema<C> ()); - - - // anyType and anySimpleType. - // - register_type ( - typeid (type), - qualified_name (bits::any_type<C> (), xsd), - &inserter_impl<S, type>, - false); - - typedef simple_type<C, type> simple_type; - register_type ( - typeid (simple_type), - qualified_name (bits::any_simple_type<C> (), xsd), - &inserter_impl<S, simple_type>, - false); - - - // Strings - // - typedef string<C, simple_type> string; - register_type ( - typeid (string), - qualified_name (bits::string<C> (), xsd), - &inserter_impl<S, string>, - false); - - typedef normalized_string<C, string> normalized_string; - register_type ( - typeid (normalized_string), - qualified_name (bits::normalized_string<C> (), xsd), - &inserter_impl<S, normalized_string>, - false); - - typedef token<C, normalized_string> token; - register_type ( - typeid (token), - qualified_name (bits::token<C> (), xsd), - &inserter_impl<S, token>, - false); - - typedef name<C, token> name; - register_type ( - typeid (name), - qualified_name (bits::name<C> (), xsd), - &inserter_impl<S, name>, - false); - - typedef nmtoken<C, token> nmtoken; - register_type ( - typeid (nmtoken), - qualified_name (bits::nmtoken<C> (), xsd), - &inserter_impl<S, nmtoken>, - false); - - typedef nmtokens<C, simple_type, nmtoken> nmtokens; - register_type ( - typeid (nmtokens), - qualified_name (bits::nmtokens<C> (), xsd), - &inserter_impl<S, nmtokens>, - false); - - typedef ncname<C, name> ncname; - register_type ( - typeid (ncname), - qualified_name (bits::ncname<C> (), xsd), - &inserter_impl<S, ncname>, - false); - - typedef language<C, token> language; - register_type ( - typeid (language), - qualified_name (bits::language<C> (), xsd), - &inserter_impl<S, language>, - false); - - - // ID/IDREF. - // - typedef id<C, ncname> id; - register_type ( - typeid (id), - qualified_name (bits::id<C> (), xsd), - &inserter_impl<S, id>, - false); - - typedef idref<C, ncname, type> idref; - register_type ( - typeid (idref), - qualified_name (bits::idref<C> (), xsd), - &inserter_impl<S, idref>, - false); - - typedef idrefs<C, simple_type, idref> idrefs; - register_type ( - typeid (idrefs), - qualified_name (bits::idrefs<C> (), xsd), - &inserter_impl<S, idrefs>, - false); - - - // URI. - // - typedef uri<C, simple_type> uri; - register_type ( - typeid (uri), - qualified_name (bits::any_uri<C> (), xsd), - &inserter_impl<S, uri>, - false); - - - // Qualified name. - // - typedef qname<C, simple_type, uri, ncname> qname; - register_type ( - typeid (qname), - qualified_name (bits::qname<C> (), xsd), - &inserter_impl<S, qname>, - false); - - - // Binary. - // - typedef base64_binary<C, simple_type> base64_binary; - register_type ( - typeid (base64_binary), - qualified_name (bits::base64_binary<C> (), xsd), - &inserter_impl<S, base64_binary>, - false); - - typedef hex_binary<C, simple_type> hex_binary; - register_type ( - typeid (hex_binary), - qualified_name (bits::hex_binary<C> (), xsd), - &inserter_impl<S, hex_binary>, - false); - - - // Date/time. - // - typedef gday<C, simple_type> gday; - register_type ( - typeid (gday), - qualified_name (bits::gday<C> (), xsd), - &inserter_impl<S, gday>, - false); - - typedef gmonth<C, simple_type> gmonth; - register_type ( - typeid (gmonth), - qualified_name (bits::gmonth<C> (), xsd), - &inserter_impl<S, gmonth>, - false); - - typedef gyear<C, simple_type> gyear; - register_type ( - typeid (gyear), - qualified_name (bits::gyear<C> (), xsd), - &inserter_impl<S, gyear>, - false); - - typedef gmonth_day<C, simple_type> gmonth_day; - register_type ( - typeid (gmonth_day), - qualified_name (bits::gmonth_day<C> (), xsd), - &inserter_impl<S, gmonth_day>, - false); - - typedef gyear_month<C, simple_type> gyear_month; - register_type ( - typeid (gyear_month), - qualified_name (bits::gyear_month<C> (), xsd), - &inserter_impl<S, gyear_month>, - false); - - typedef date<C, simple_type> date; - register_type ( - typeid (date), - qualified_name (bits::date<C> (), xsd), - &inserter_impl<S, date>, - false); - - typedef time<C, simple_type> time; - register_type ( - typeid (time), - qualified_name (bits::time<C> (), xsd), - &inserter_impl<S, time>, - false); - - typedef date_time<C, simple_type> date_time; - register_type ( - typeid (date_time), - qualified_name (bits::date_time<C> (), xsd), - &inserter_impl<S, date_time>, - false); - - typedef duration<C, simple_type> duration; - register_type ( - typeid (duration), - qualified_name (bits::duration<C> (), xsd), - &inserter_impl<S, duration>, - false); - - - // Entity. - // - typedef entity<C, ncname> entity; - register_type ( - typeid (entity), - qualified_name (bits::entity<C> (), xsd), - &inserter_impl<S, entity>, - false); - - typedef entities<C, simple_type, entity> entities; - register_type ( - typeid (entities), - qualified_name (bits::entities<C> (), xsd), - &inserter_impl<S, entities>, - false); - } - - template <typename S, typename C> - void stream_insertion_map<S, C>:: - register_type (const type_id& tid, - const qualified_name& name, - inserter i, - bool replace) - { - if (replace || type_map_.find (&tid) == type_map_.end ()) - type_map_[&tid] = type_info (name, i); - } - - template <typename S, typename C> - void stream_insertion_map<S, C>:: - unregister_type (const type_id& tid) - { - type_map_.erase (&tid); - } - - template <typename S, typename C> - void stream_insertion_map<S, C>:: - insert (ostream<S>& s, const type& x) - { - if (const type_info* ti = find (typeid (x))) - { - const qualified_name& qn (ti->name ()); - - // Pool the namespace and name strings. - // - const std::basic_string<C>& ns (qn.namespace_ ()); - const std::basic_string<C>& n (qn.name ()); - - std::size_t ns_id (s.pool_string (ns)); - std::size_t n_id (s.pool_string (n)); - - s << ostream_common::as_size<std::size_t> (ns_id); - - if (ns_id == 0) - s << ns; - - s << ostream_common::as_size<std::size_t> (n_id); - - if (n_id == 0) - s << n; - - ti->inserter () (s, x); - } - else - throw no_type_info<C> (std::basic_string<C> (), - std::basic_string<C> ()); // @@ TODO - } - - template <typename S, typename C> - const typename stream_insertion_map<S, C>::type_info* - stream_insertion_map<S, C>:: - find (const type_id& tid) const - { - typename type_map::const_iterator i (type_map_.find (&tid)); - return i == type_map_.end () ? 0 : &i->second; - } - - - // stream_insertion_plate - // - template<unsigned long id, typename S, typename C> - stream_insertion_plate<id, S, C>:: - stream_insertion_plate () - { - if (count == 0) - map = new stream_insertion_map<S, C>; - - ++count; - } - - template<unsigned long id, typename S, typename C> - stream_insertion_plate<id, S, C>:: - ~stream_insertion_plate () - { - if (--count == 0) - delete map; - } - - // - // - template<typename S, typename T> - void - inserter_impl (ostream<S>& s, const type& x) - { - s << static_cast<const T&> (x); - } - - // stream_insertion_initializer - // - template<unsigned long id, typename S, typename C, typename T> - stream_insertion_initializer<id, S, C, T>:: - stream_insertion_initializer (const C* name, const C* ns) - { - stream_insertion_map_instance<id, S, C> ().register_type ( - typeid (T), - xml::qualified_name<C> (name, ns), - &inserter_impl<S, T>); - } - - template<unsigned long id, typename S, typename C, typename T> - stream_insertion_initializer<id, S, C, T>:: - ~stream_insertion_initializer () - { - stream_insertion_map_instance<id, S, C> ().unregister_type ( - typeid (T)); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/stream-insertion.hxx b/libxsd/xsd/cxx/tree/stream-insertion.hxx deleted file mode 100644 index a199f4f..0000000 --- a/libxsd/xsd/cxx/tree/stream-insertion.hxx +++ /dev/null @@ -1,275 +0,0 @@ -// file : xsd/cxx/tree/stream-insertion.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_STREAM_INSERTION_HXX -#define XSD_CXX_TREE_STREAM_INSERTION_HXX - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/list.hxx> - -#include <xsd/cxx/tree/ostream.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // type - // - template <typename S> - inline ostream<S>& - operator<< (ostream<S>& s, const type&) - { - // Not saving DOM content even if it's there. - return s; - } - - // simple_type - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const simple_type<C, B>& x) - { - if (!x.null_content ()) - s << x.text_content (); - - return s; - } - - // fundamental_base - // - template <typename S, - typename T, - typename C, - typename B, - schema_type::value ST> - inline ostream<S>& - operator<< (ostream<S>& s, const fundamental_base<T, C, B, ST>& x) - { - const T& r (x); - return s << r; - } - - // list - // - template <typename S, - typename T, - typename C, - schema_type::value ST, - bool fund> - ostream<S>& - operator<< (ostream<S>& s, const list<T, C, ST, fund>& x) - { - s << ostream_common::as_size<std::size_t> (x.size ()); - - for (typename list<T, C, ST, fund>::const_iterator - i (x.begin ()), e (x.end ()); i != e; ++i) - { - s << *i; - } - - return s; - } - - - // Insertion operators for built-in types. - // - - - // string - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const string<C, B>& x) - { - const std::basic_string<C>& r (x); - return s << r; - } - - - // normalized_string - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const normalized_string<C, B>& x) - { - const B& r (x); - return s << r; - } - - - // token - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const token<C, B>& x) - { - const B& r (x); - return s << r; - } - - - // nmtoken - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const nmtoken<C, B>& x) - { - const B& r (x); - return s << r; - } - - - // nmtokens - // - template <typename S, typename C, typename B, typename nmtoken> - inline ostream<S>& - operator<< (ostream<S>& s, const nmtokens<C, B, nmtoken>& x) - { - const list<nmtoken, C>& r (x); - return s << r; - } - - - // name - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const name<C, B>& x) - { - const B& r (x); - return s << r; - } - - - // ncname - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const ncname<C, B>& x) - { - const B& r (x); - return s << r; - } - - - // language - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const language<C, B>& x) - { - const std::basic_string<C>& r (x); - return s << r; - } - - - // id - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const id<C, B>& x) - { - const std::basic_string<C>& r (x); - return s << r; - } - - - // idref - // - template <typename S, typename C, typename B, typename T> - inline ostream<S>& - operator<< (ostream<S>& s, const idref<C, B, T>& x) - { - const B& r (x); - return s << r; - } - - - // idrefs - // - template <typename S, typename C, typename B, typename idref> - inline ostream<S>& - operator<< (ostream<S>& s, const idrefs<C, B, idref>& x) - { - const list<idref, C>& r (x); - return s << r; - } - - - // uri - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const uri<C, B>& x) - { - const std::basic_string<C>& r (x); - return s << r; - } - - - // qname - // - template <typename S, - typename C, - typename B, - typename uri, - typename ncname> - inline ostream<S>& - operator<< (ostream<S>& s, const qname<C, B, uri, ncname>& x) - { - return s << x.namespace_ () << x.name (); - } - - - // base64_binary - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const base64_binary<C, B>& x) - { - const buffer<C>& r (x); - return s << r; - } - - - // hex_binary - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const hex_binary<C, B>& x) - { - const buffer<C>& r (x); - return s << r; - } - - - // entity - // - template <typename S, typename C, typename B> - inline ostream<S>& - operator<< (ostream<S>& s, const entity<C, B>& x) - { - const B& r (x); - return s << r; - } - - - // entities - // - template <typename S, typename C, typename B, typename entity> - inline ostream<S>& - operator<< (ostream<S>& s, const entities<C, B, entity>& x) - { - const list<entity, C>& r (x); - return s << r; - } - } - } -} - -#include <xsd/cxx/tree/date-time-insertion.txx> - -#endif // XSD_CXX_TREE_STREAM_INSERTION_HXX diff --git a/libxsd/xsd/cxx/tree/text.hxx b/libxsd/xsd/cxx/tree/text.hxx deleted file mode 100644 index 7a37332..0000000 --- a/libxsd/xsd/cxx/tree/text.hxx +++ /dev/null @@ -1,28 +0,0 @@ -// file : xsd/cxx/tree/text.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_TEXT_HXX -#define XSD_CXX_TREE_TEXT_HXX - -#include <string> - -#include <xercesc/dom/DOMElement.hpp> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Throws expected_text_content. - // - template <typename C> - std::basic_string<C> - text_content (const xercesc::DOMElement&); - } - } -} - -#include <xsd/cxx/tree/text.txx> - -#endif // XSD_CXX_TREE_TEXT_HXX diff --git a/libxsd/xsd/cxx/tree/text.txx b/libxsd/xsd/cxx/tree/text.txx deleted file mode 100644 index 89b783a..0000000 --- a/libxsd/xsd/cxx/tree/text.txx +++ /dev/null @@ -1,61 +0,0 @@ -// file : xsd/cxx/tree/text.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/dom/DOMText.hpp> - -#include <xsd/cxx/xml/string.hxx> - -#include <xsd/cxx/tree/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - std::basic_string<C> - text_content (const xercesc::DOMElement& e) - { - using xercesc::DOMNode; - using xercesc::DOMText; - - DOMNode* n (e.getFirstChild ()); - - // Fast path. - // - if (n != 0 && - n->getNodeType () == DOMNode::TEXT_NODE && - n->getNextSibling () == 0) - { - DOMText* t (static_cast<DOMText*> (n)); - return xml::transcode<C> (t->getData (), t->getLength ()); - } - - std::basic_string<C> r; - - for (; n != 0; n = n->getNextSibling ()) - { - switch (n->getNodeType ()) - { - case DOMNode::TEXT_NODE: - case DOMNode::CDATA_SECTION_NODE: - { - DOMText* t (static_cast<DOMText*> (n)); - r += xml::transcode<C> (t->getData (), t->getLength ()); - break; - } - case DOMNode::ELEMENT_NODE: - { - throw expected_text_content<C> (); - } - default: - break; // ignore - } - } - - return r; - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/type-factory-map.hxx b/libxsd/xsd/cxx/tree/type-factory-map.hxx deleted file mode 100644 index e20acfe..0000000 --- a/libxsd/xsd/cxx/tree/type-factory-map.hxx +++ /dev/null @@ -1,173 +0,0 @@ -// file : xsd/cxx/tree/type-factory-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX -#define XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX - -#include <map> -#include <string> -#include <memory> // std::auto_ptr/unique_ptr -#include <cstddef> // std::size_t - -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/xml/qualified-name.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct type_factory_map - { - typedef xml::qualified_name<C> qualified_name; - typedef XSD_AUTO_PTR<type> (*factory) (const xercesc::DOMElement&, - flags, - container*); - public: - type_factory_map (); - - void - register_type (const qualified_name& name, - factory, - bool replace = true); - - void - unregister_type (const qualified_name& name); - - void - register_element (const qualified_name& root, - const qualified_name& subst, - factory); - - void - unregister_element (const qualified_name& root, - const qualified_name& subst); - - XSD_AUTO_PTR<type> - create (const C* name, // element name - const C* ns, // element namespace - factory static_type, - bool global, - bool qualified, - const xercesc::DOMElement&, - const qualified_name&, - flags, - container*) const; - - public: - factory - find (const qualified_name& name) const; - - private: - template <typename T> - static XSD_AUTO_PTR<type> - traits_adapter (const xercesc::DOMElement&, flags, container*); - - private: - typedef - std::map<qualified_name, factory> - type_map; - - // Map of (root-element to map of (subst-element to factory)). - // - typedef - std::map<qualified_name, factory> - subst_map; - - typedef - std::map<qualified_name, subst_map> - element_map; - - type_map type_map_; - element_map element_map_; - - private: - factory - find_substitution (const subst_map& start, - const qualified_name& name) const; - - // The name argument is as specified in xsi:type. - // - factory - find_type (const std::basic_string<C>& name, - const xercesc::DOMElement&) const; - }; - - - // - // - template<unsigned long id, typename C> - struct type_factory_plate - { - static type_factory_map<C>* map; - static std::size_t count; - - type_factory_plate (); - ~type_factory_plate (); - }; - - template<unsigned long id, typename C> - type_factory_map<C>* type_factory_plate<id, C>::map = 0; - - template<unsigned long id, typename C> - std::size_t type_factory_plate<id, C>::count = 0; - - - // - // - template<unsigned long id, typename C> - inline type_factory_map<C>& - type_factory_map_instance () - { - return *type_factory_plate<id, C>::map; - } - - - // - // - template<typename T> - XSD_AUTO_PTR<type> - factory_impl (const xercesc::DOMElement&, flags, container*); - - // - // - template<unsigned long id, typename C, typename T> - struct type_factory_initializer - { - type_factory_initializer (const C* name, const C* ns); - ~type_factory_initializer (); - - private: - const C* name_; - const C* ns_; - }; - - // - // - template<unsigned long id, typename C, typename T> - struct element_factory_initializer - { - element_factory_initializer (const C* root_name, const C* root_ns, - const C* subst_name, const C* subst_ns); - - ~element_factory_initializer (); - - private: - const C* root_name_; - const C* root_ns_; - const C* subst_name_; - const C* subst_ns_; - }; - } - } -} - -#include <xsd/cxx/tree/type-factory-map.txx> - -#endif // XSD_CXX_TREE_TYPE_FACTORY_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/type-factory-map.txx b/libxsd/xsd/cxx/tree/type-factory-map.txx deleted file mode 100644 index 1eddb25..0000000 --- a/libxsd/xsd/cxx/tree/type-factory-map.txx +++ /dev/null @@ -1,481 +0,0 @@ -// file : xsd/cxx/tree/type-factory-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/validators/schema/SchemaSymbols.hpp> - -#include <xsd/cxx/xml/string.hxx> // xml::{string, transcode} -#include <xsd/cxx/xml/elements.hxx> // xml::{prefix, uq_name} -#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xml_namespace, etc} - -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // type_factory_map - // - template <typename C> - type_factory_map<C>:: - type_factory_map () - { - // Register factories for default instantiations of built-in, - // non-fundamental types. - // - - std::basic_string<C> xsd (bits::xml_schema<C> ()); - - - // anyType and anySimpleType. - // - register_type ( - qualified_name (bits::any_type<C> (), xsd), - &factory_impl<type>, - false); - - typedef simple_type<C, type> simple_type; - register_type ( - qualified_name (bits::any_simple_type<C> (), xsd), - &factory_impl<simple_type>, - false); - - - // Strings - // - typedef string<C, simple_type> string; - register_type ( - qualified_name (bits::string<C> (), xsd), - &factory_impl<string>, - false); - - typedef normalized_string<C, string> normalized_string; - register_type ( - qualified_name (bits::normalized_string<C> (), xsd), - &factory_impl<normalized_string>, - false); - - typedef token<C, normalized_string> token; - register_type ( - qualified_name (bits::token<C> (), xsd), - &factory_impl<token>, - false); - - typedef name<C, token> name; - register_type ( - qualified_name (bits::name<C> (), xsd), - &factory_impl<name>, - false); - - typedef nmtoken<C, token> nmtoken; - register_type ( - qualified_name (bits::nmtoken<C> (), xsd), - &factory_impl<nmtoken>, - false); - - typedef nmtokens<C, simple_type, nmtoken> nmtokens; - register_type ( - qualified_name (bits::nmtokens<C> (), xsd), - &factory_impl<nmtokens>, - false); - - typedef ncname<C, name> ncname; - register_type ( - qualified_name (bits::ncname<C> (), xsd), - &factory_impl<ncname>, - false); - - typedef language<C, token> language; - register_type ( - qualified_name (bits::language<C> (), xsd), - &factory_impl<language>, - false); - - - // ID/IDREF. - // - typedef id<C, ncname> id; - register_type ( - qualified_name (bits::id<C> (), xsd), - &factory_impl<id>, - false); - - typedef idref<C, ncname, type> idref; - register_type ( - qualified_name (bits::idref<C> (), xsd), - &factory_impl<idref>, - false); - - typedef idrefs<C, simple_type, idref> idrefs; - register_type ( - qualified_name (bits::idrefs<C> (), xsd), - &factory_impl<idrefs>, - false); - - - // URI. - // - typedef uri<C, simple_type> uri; - register_type ( - qualified_name (bits::any_uri<C> (), xsd), - &factory_impl<uri>, - false); - - - // Qualified name. - // - typedef qname<C, simple_type, uri, ncname> qname; - register_type ( - qualified_name (bits::qname<C> (), xsd), - &factory_impl<qname>, - false); - - - // Binary. - // - typedef base64_binary<C, simple_type> base64_binary; - register_type ( - qualified_name (bits::base64_binary<C> (), xsd), - &factory_impl<base64_binary>, - false); - - typedef hex_binary<C, simple_type> hex_binary; - register_type ( - qualified_name (bits::hex_binary<C> (), xsd), - &factory_impl<hex_binary>, - false); - - - // Date/time. - // - typedef gday<C, simple_type> gday; - register_type ( - qualified_name (bits::gday<C> (), xsd), - &factory_impl<gday>, - false); - - typedef gmonth<C, simple_type> gmonth; - register_type ( - qualified_name (bits::gmonth<C> (), xsd), - &factory_impl<gmonth>, - false); - - typedef gyear<C, simple_type> gyear; - register_type ( - qualified_name (bits::gyear<C> (), xsd), - &factory_impl<gyear>, - false); - - typedef gmonth_day<C, simple_type> gmonth_day; - register_type ( - qualified_name (bits::gmonth_day<C> (), xsd), - &factory_impl<gmonth_day>, - false); - - typedef gyear_month<C, simple_type> gyear_month; - register_type ( - qualified_name (bits::gyear_month<C> (), xsd), - &factory_impl<gyear_month>, - false); - - typedef date<C, simple_type> date; - register_type ( - qualified_name (bits::date<C> (), xsd), - &factory_impl<date>, - false); - - typedef time<C, simple_type> time; - register_type ( - qualified_name (bits::time<C> (), xsd), - &factory_impl<time>, - false); - - typedef date_time<C, simple_type> date_time; - register_type ( - qualified_name (bits::date_time<C> (), xsd), - &factory_impl<date_time>, - false); - - typedef duration<C, simple_type> duration; - register_type ( - qualified_name (bits::duration<C> (), xsd), - &factory_impl<duration>, - false); - - - // Entity. - // - typedef entity<C, ncname> entity; - register_type ( - qualified_name (bits::entity<C> (), xsd), - &factory_impl<entity>, - false); - - typedef entities<C, simple_type, entity> entities; - register_type ( - qualified_name (bits::entities<C> (), xsd), - &factory_impl<entities>, - false); - } - - template <typename C> - void type_factory_map<C>:: - register_type (const qualified_name& name, - factory f, - bool replace) - { - if (replace || type_map_.find (name) == type_map_.end ()) - type_map_[name] = f; - } - - template <typename C> - void type_factory_map<C>:: - unregister_type (const qualified_name& name) - { - type_map_.erase (name); - } - - template <typename C> - void type_factory_map<C>:: - register_element (const qualified_name& root, - const qualified_name& subst, - factory f) - { - element_map_[root][subst] = f; - } - - template <typename C> - void type_factory_map<C>:: - unregister_element (const qualified_name& root, - const qualified_name& subst) - { - typename element_map::iterator i (element_map_.find (root)); - - if (i != element_map_.end ()) - { - i->second.erase (subst); - - if (i->second.empty ()) - element_map_.erase (i); - } - } - - template <typename C> - typename type_factory_map<C>::factory type_factory_map<C>:: - find (const qualified_name& name) const - { - typename type_map::const_iterator i (type_map_.find (name)); - return i == type_map_.end () ? 0 : i->second; - } - - template <typename C> - XSD_AUTO_PTR<type> type_factory_map<C>:: - create (const C* name, - const C* ns, - factory static_type, - bool global, - bool qualified, - const xercesc::DOMElement& e, - const qualified_name& qn, - tree::flags flags, - container* c) const - { - factory f = 0; - - // See if we've got a straight match. - // - if (qn.name () == name && - (qualified ? qn.namespace_ () == ns : ns[0] == C ('\0'))) - { - f = static_type; // NULL for abstract types. - } - else - { - // See if we have a substitution. - // - if (global) - { - typename element_map::const_iterator i ( - element_map_.find (qualified_name (name, ns))); - - if (i != element_map_.end ()) - { - f = find_substitution (i->second, qn); - } - } - - if (f == 0) - return XSD_AUTO_PTR<type> (); // No match. - } - - // Check for xsi:type - // - { - const XMLCh* v ( - e.getAttributeNS ( - xercesc::SchemaSymbols::fgURI_XSI, - xercesc::SchemaSymbols::fgXSI_TYPE)); - - if (v != 0 && v[0] != XMLCh (0)) - f = find_type (xml::transcode<C> (v), e); - } - - return f (e, flags, c); - } - - template <typename C> - template <typename T> - XSD_AUTO_PTR<type> type_factory_map<C>:: - traits_adapter (const xercesc::DOMElement& e, flags f, container* c) - { - return XSD_AUTO_PTR<type> (traits<T, C>::create (e, f, c)); - } - - template <typename C> - typename type_factory_map<C>::factory type_factory_map<C>:: - find_substitution (const subst_map& start, - const qualified_name& name) const - { - typename subst_map::const_iterator i (start.find (name)); - - if (i != start.end ()) - return i->second; - else - { - for (i = start.begin (); i != start.end (); ++i) - { - typename element_map::const_iterator j ( - element_map_.find (i->first)); - - if (j != element_map_.end ()) - { - if (factory f = find_substitution (j->second, name)) - return f; - } - } - } - - return 0; - } - - template <typename C> - typename type_factory_map<C>::factory type_factory_map<C>:: - find_type (const std::basic_string<C>& name, - const xercesc::DOMElement& e) const - { - using std::basic_string; - - basic_string<C> ns_name, uq_name (xml::uq_name (name)); - - // Copied with modifications from xml/dom/elements.hxx. - // - std::basic_string<C> p (xml::prefix (name)); - - // 'xml' prefix requires special handling and Xerces folks refuse - // to handle this in DOM so I have to do it myself. - // - if (p == xml::bits::xml_prefix<C> ()) - ns_name = xml::bits::xml_namespace<C> (); - else - { - const XMLCh* xns ( - e.lookupNamespaceURI ( - p.empty () ? 0 : xml::string (p).c_str ())); - - if (xns != 0) - ns_name = xml::transcode<C> (xns); - else - { - // See if we've got any no-namespace types. - // - if (!p.empty ()) - throw no_prefix_mapping<C> (p); - } - } - - factory f (find (qualified_name (uq_name, ns_name))); - - if (f == 0) - throw no_type_info<C> (uq_name, ns_name); - - return f; - } - - - // type_factory_plate - // - template<unsigned long id, typename C> - type_factory_plate<id, C>:: - type_factory_plate () - { - if (count == 0) - map = new type_factory_map<C>; - - ++count; - } - - template<unsigned long id, typename C> - type_factory_plate<id, C>:: - ~type_factory_plate () - { - if (--count == 0) - delete map; - } - - - // - // - template<typename T> - XSD_AUTO_PTR<type> - factory_impl (const xercesc::DOMElement& e, flags f, container* c) - { - return XSD_AUTO_PTR<type> (new T (e, f, c)); - } - - // - // - template<unsigned long id, typename C, typename T> - type_factory_initializer<id, C, T>:: - type_factory_initializer (const C* name, const C* ns) - : name_ (name), ns_ (ns) - { - type_factory_map_instance<id, C> ().register_type ( - xml::qualified_name<C> (name, ns), &factory_impl<T>); - } - - template<unsigned long id, typename C, typename T> - type_factory_initializer<id, C, T>:: - ~type_factory_initializer () - { - type_factory_map_instance<id, C> ().unregister_type ( - xml::qualified_name<C> (name_, ns_)); - } - - // - // - template<unsigned long id, typename C, typename T> - element_factory_initializer<id, C, T>:: - element_factory_initializer (const C* root_name, const C* root_ns, - const C* subst_name, const C* subst_ns) - : root_name_ (root_name), root_ns_ (root_ns), - subst_name_ (subst_name), subst_ns_ (subst_ns) - { - type_factory_map_instance<id, C> ().register_element ( - xml::qualified_name<C> (root_name, root_ns), - xml::qualified_name<C> (subst_name, subst_ns), - &factory_impl<T>); - } - - template<unsigned long id, typename C, typename T> - element_factory_initializer<id, C, T>:: - ~element_factory_initializer () - { - type_factory_map_instance<id, C> ().unregister_element ( - xml::qualified_name<C> (root_name_, root_ns_), - xml::qualified_name<C> (subst_name_, subst_ns_)); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/type-serializer-map.hxx b/libxsd/xsd/cxx/tree/type-serializer-map.hxx deleted file mode 100644 index 38b2fb9..0000000 --- a/libxsd/xsd/cxx/tree/type-serializer-map.hxx +++ /dev/null @@ -1,234 +0,0 @@ -// file : xsd/cxx/tree/type-serializer-map.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX -#define XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX - -#include <map> -#include <string> -#include <cstddef> // std::size_t -#include <typeinfo> - -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/tree/elements.hxx> - -#include <xsd/cxx/xml/qualified-name.hxx> -#include <xsd/cxx/xml/dom/auto-ptr.hxx> -#include <xsd/cxx/xml/dom/serialization-header.hxx> // namespace_infomap - -namespace xsd -{ - namespace cxx - { - namespace tree - { - template <typename C> - struct type_serializer_map - { - typedef std::type_info type_id; - typedef xml::qualified_name<C> qualified_name; - typedef void (*serializer) (xercesc::DOMElement&, const type&); - - void - register_type (const type_id&, - const qualified_name& name, - serializer, - bool replace = true); - - void - unregister_type (const type_id&); - - void - register_element (const qualified_name& root, - const qualified_name& subst, - const type_id&, - serializer); - - void - unregister_element (const qualified_name& root, const type_id&); - - public: - void - serialize (const C* name, // element name - const C* ns, // element namespace - bool global, - bool qualified, - xercesc::DOMElement& parent, - const type&) const; - - // Serialize into existing element. - // - void - serialize (const C* static_name, - const C* static_ns, - xercesc::DOMElement&, - const qualified_name&, - const type&) const; - - // Create DOMDocument with root element suitable for serializing - // x into it. - // - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> - serialize (const C* name, // element name - const C* ns, // element namespace - const xml::dom::namespace_infomap<C>&, - const type& x, - unsigned long flags) const; - - public: - type_serializer_map (); - - public: - struct type_info - { - type_info (const qualified_name& name, - typename type_serializer_map::serializer serializer) - : name_ (name), serializer_ (serializer) - { - } - - const qualified_name& - name () const - { - return name_; - } - - typename type_serializer_map::serializer - serializer () const - { - return serializer_; - } - - // For std::map. - // - type_info () - : name_ (std::basic_string<C> (), std::basic_string<C> ()), - serializer_ (0) - { - } - - private: - qualified_name name_; - typename type_serializer_map::serializer serializer_; - }; - - public: - const type_info* - find (const type_id&) const; - - private: - struct type_id_comparator - { - bool - operator() (const type_id* x, const type_id* y) const - { - // XL C++ on AIX has buggy type_info::before() in that - // it returns true for two different type_info objects - // that happened to be for the same type. - // -#if defined(__xlC__) && defined(_AIX) - return *x != *y && x->before (*y); -#else - return x->before (*y); -#endif - } - }; - - typedef - std::map<const type_id*, type_info, type_id_comparator> - type_map; - - // Map of (root-element to map of (type_id to type_info)). - // Note that here type_info::name is element name. - // - typedef - std::map<const type_id*, type_info, type_id_comparator> - subst_map; - - typedef - std::map<qualified_name, subst_map> - element_map; - - type_map type_map_; - element_map element_map_; - - private: - const type_info* - find_substitution (const subst_map& start, const type_id&) const; - - // Sets an xsi:type attribute corresponding to the type_info. - // - void - set_xsi_type (xercesc::DOMElement& parent, - xercesc::DOMElement&, - const type_info&) const; - }; - - - // - // - template<unsigned long id, typename C> - struct type_serializer_plate - { - static type_serializer_map<C>* map; - static std::size_t count; - - type_serializer_plate (); - ~type_serializer_plate (); - }; - - template<unsigned long id, typename C> - type_serializer_map<C>* type_serializer_plate<id, C>::map = 0; - - template<unsigned long id, typename C> - std::size_t type_serializer_plate<id, C>::count = 0; - - - // - // - template<unsigned long id, typename C> - inline type_serializer_map<C>& - type_serializer_map_instance () - { - return *type_serializer_plate<id, C>::map; - } - - // - // - template<typename T> - void - serializer_impl (xercesc::DOMElement&, const type&); - - - // - // - template<unsigned long id, typename C, typename T> - struct type_serializer_initializer - { - type_serializer_initializer (const C* name, const C* ns); - ~type_serializer_initializer (); - }; - - - // - // - template<unsigned long id, typename C, typename T> - struct element_serializer_initializer - { - element_serializer_initializer (const C* root_name, const C* root_ns, - const C* subst_name, const C* subst_ns); - - ~element_serializer_initializer (); - - private: - const C* root_name_; - const C* root_ns_; - }; - } - } -} - -#include <xsd/cxx/tree/type-serializer-map.txx> - -#endif // XSD_CXX_TREE_TYPE_SERIALIZER_MAP_HXX diff --git a/libxsd/xsd/cxx/tree/type-serializer-map.txx b/libxsd/xsd/cxx/tree/type-serializer-map.txx deleted file mode 100644 index 1acdad2..0000000 --- a/libxsd/xsd/cxx/tree/type-serializer-map.txx +++ /dev/null @@ -1,572 +0,0 @@ -// file : xsd/cxx/tree/type-serializer-map.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/util/XMLUni.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> - -#include <xsd/cxx/xml/bits/literals.hxx> // xml::bits::{xsi_namespace, type} -#include <xsd/cxx/xml/dom/serialization-source.hxx> // dom::{create_*, prefix} - -#include <xsd/cxx/tree/types.hxx> -#include <xsd/cxx/tree/bits/literals.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // type_serializer_map - // - template <typename C> - type_serializer_map<C>:: - type_serializer_map () - { - // Register serializers for built-in non-fundamental types. - // - std::basic_string<C> xsd (bits::xml_schema<C> ()); - - - // anyType and anySimpleType. - // - register_type ( - typeid (type), - qualified_name (bits::any_type<C> (), xsd), - &serializer_impl<type>, - false); - - typedef simple_type<C, type> simple_type; - register_type ( - typeid (simple_type), - qualified_name (bits::any_simple_type<C> (), xsd), - &serializer_impl<simple_type>, - false); - - - // Strings - // - typedef string<C, simple_type> string; - register_type ( - typeid (string), - qualified_name (bits::string<C> (), xsd), - &serializer_impl<string>, - false); - - typedef normalized_string<C, string> normalized_string; - register_type ( - typeid (normalized_string), - qualified_name (bits::normalized_string<C> (), xsd), - &serializer_impl<normalized_string>, - false); - - typedef token<C, normalized_string> token; - register_type ( - typeid (token), - qualified_name (bits::token<C> (), xsd), - &serializer_impl<token>, - false); - - typedef name<C, token> name; - register_type ( - typeid (name), - qualified_name (bits::name<C> (), xsd), - &serializer_impl<name>, - false); - - typedef nmtoken<C, token> nmtoken; - register_type ( - typeid (nmtoken), - qualified_name (bits::nmtoken<C> (), xsd), - &serializer_impl<nmtoken>, - false); - - typedef nmtokens<C, simple_type, nmtoken> nmtokens; - register_type ( - typeid (nmtokens), - qualified_name (bits::nmtokens<C> (), xsd), - &serializer_impl<nmtokens>, - false); - - typedef ncname<C, name> ncname; - register_type ( - typeid (ncname), - qualified_name (bits::ncname<C> (), xsd), - &serializer_impl<ncname>, - false); - - typedef language<C, token> language; - register_type ( - typeid (language), - qualified_name (bits::language<C> (), xsd), - &serializer_impl<language>, - false); - - - // ID/IDREF. - // - typedef id<C, ncname> id; - register_type ( - typeid (id), - qualified_name (bits::id<C> (), xsd), - &serializer_impl<id>, - false); - - typedef idref<C, ncname, type> idref; - register_type ( - typeid (idref), - qualified_name (bits::idref<C> (), xsd), - &serializer_impl<idref>, - false); - - typedef idrefs<C, simple_type, idref> idrefs; - register_type ( - typeid (idrefs), - qualified_name (bits::idrefs<C> (), xsd), - &serializer_impl<idrefs>, - false); - - - // URI. - // - typedef uri<C, simple_type> uri; - register_type ( - typeid (uri), - qualified_name (bits::any_uri<C> (), xsd), - &serializer_impl<uri>, - false); - - - // Qualified name. - // - typedef qname<C, simple_type, uri, ncname> qname; - register_type ( - typeid (qname), - qualified_name (bits::qname<C> (), xsd), - &serializer_impl<qname>, - false); - - - // Binary. - // - typedef base64_binary<C, simple_type> base64_binary; - register_type ( - typeid (base64_binary), - qualified_name (bits::base64_binary<C> (), xsd), - &serializer_impl<base64_binary>, - false); - - typedef hex_binary<C, simple_type> hex_binary; - register_type ( - typeid (hex_binary), - qualified_name (bits::hex_binary<C> (), xsd), - &serializer_impl<hex_binary>, - false); - - - // Date/time. - // - typedef gday<C, simple_type> gday; - register_type ( - typeid (gday), - qualified_name (bits::gday<C> (), xsd), - &serializer_impl<gday>, - false); - - typedef gmonth<C, simple_type> gmonth; - register_type ( - typeid (gmonth), - qualified_name (bits::gmonth<C> (), xsd), - &serializer_impl<gmonth>, - false); - - typedef gyear<C, simple_type> gyear; - register_type ( - typeid (gyear), - qualified_name (bits::gyear<C> (), xsd), - &serializer_impl<gyear>, - false); - - typedef gmonth_day<C, simple_type> gmonth_day; - register_type ( - typeid (gmonth_day), - qualified_name (bits::gmonth_day<C> (), xsd), - &serializer_impl<gmonth_day>, - false); - - typedef gyear_month<C, simple_type> gyear_month; - register_type ( - typeid (gyear_month), - qualified_name (bits::gyear_month<C> (), xsd), - &serializer_impl<gyear_month>, - false); - - typedef date<C, simple_type> date; - register_type ( - typeid (date), - qualified_name (bits::date<C> (), xsd), - &serializer_impl<date>, - false); - - typedef time<C, simple_type> time; - register_type ( - typeid (time), - qualified_name (bits::time<C> (), xsd), - &serializer_impl<time>, - false); - - typedef date_time<C, simple_type> date_time; - register_type ( - typeid (date_time), - qualified_name (bits::date_time<C> (), xsd), - &serializer_impl<date_time>, - false); - - typedef duration<C, simple_type> duration; - register_type ( - typeid (duration), - qualified_name (bits::duration<C> (), xsd), - &serializer_impl<duration>, - false); - - - // Entity. - // - typedef entity<C, ncname> entity; - register_type ( - typeid (entity), - qualified_name (bits::entity<C> (), xsd), - &serializer_impl<entity>, - false); - - typedef entities<C, simple_type, entity> entities; - register_type ( - typeid (entities), - qualified_name (bits::entities<C> (), xsd), - &serializer_impl<entities>, - false); - } - - template <typename C> - void type_serializer_map<C>:: - register_type (const type_id& tid, - const qualified_name& name, - serializer s, - bool replace) - { - if (replace || type_map_.find (&tid) == type_map_.end ()) - type_map_[&tid] = type_info (name, s); - } - - template <typename C> - void type_serializer_map<C>:: - unregister_type (const type_id& tid) - { - type_map_.erase (&tid); - } - - template <typename C> - void type_serializer_map<C>:: - register_element (const qualified_name& root, - const qualified_name& subst, - const type_id& tid, - serializer s) - { - element_map_[root][&tid] = type_info (subst, s); - } - - template <typename C> - void type_serializer_map<C>:: - unregister_element (const qualified_name& root, const type_id& tid) - { - typename element_map::iterator i (element_map_.find (root)); - - if (i != element_map_.end ()) - { - i->second.erase (&tid); - - if (i->second.empty ()) - element_map_.erase (root); - } - } - - template <typename C> - void type_serializer_map<C>:: - serialize (const C* name, // element name - const C* ns, // element namespace - bool global, - bool qualified, - xercesc::DOMElement& parent, - const type& x) const - { - const type_id& tid (typeid (x)); - - // First see if we can find a substitution. - // - if (global) - { - typename element_map::const_iterator i ( - element_map_.find (qualified_name (name, ns))); - - if (i != element_map_.end ()) - { - if (const type_info* ti = find_substitution (i->second, tid)) - { - xercesc::DOMElement& e ( - xml::dom::create_element ( - ti->name ().name ().c_str (), - ti->name ().namespace_ ().c_str (), - parent)); - - ti->serializer () (e, x); - return; - } - } - } - - // The last resort is xsi:type. - // - if (const type_info* ti = find (tid)) - { - xercesc::DOMElement& e ( - qualified - ? xml::dom::create_element (name, ns, parent) - : xml::dom::create_element (name, parent)); - - ti->serializer () (e, x); - set_xsi_type (parent, e, *ti); - return; - } - - throw no_type_info<C> (std::basic_string<C> (), - std::basic_string<C> ()); //@@ TODO - } - - template <typename C> - void type_serializer_map<C>:: - serialize (const C* static_name, - const C* static_ns, - xercesc::DOMElement& e, - const qualified_name& qn, - const type& x) const - { - const type_id& tid (typeid (x)); - - // First see if this is a substitution. - // - if (qn.name () != static_name || qn.namespace_ () != static_ns) - { - typename element_map::const_iterator i ( - element_map_.find (qualified_name (static_name, static_ns))); - - if (i != element_map_.end ()) - { - if (const type_info* ti = find_substitution (i->second, tid)) - { - if (ti->name ().name () != qn.name () || - ti->name ().namespace_ () != qn.namespace_ ()) - { - throw unexpected_element<C> ( - qn.name (), qn.namespace_ (), - ti->name ().name (), ti->name ().namespace_ ()); - } - - ti->serializer () (e, x); - return; - } - } - - // This is not a valid substitution. - // - throw unexpected_element<C> (qn.name (), qn.namespace_ (), - static_name, static_ns); - } - - // The last resort is xsi:type. - // - if (const type_info* ti = find (tid)) - { - ti->serializer () (e, x); - set_xsi_type (e, e, *ti); - return; - } - - throw no_type_info<C> (std::basic_string<C> (), - std::basic_string<C> ()); //@@ TODO - } - - template <typename C> - XSD_DOM_AUTO_PTR<xercesc::DOMDocument> type_serializer_map<C>:: - serialize (const C* name, - const C* ns, - const xml::dom::namespace_infomap<C>& m, - const type& x, - unsigned long flags) const - { - const type_id& tid (typeid (x)); - - // See if we can find a substitution. - // - { - typename element_map::const_iterator i ( - element_map_.find (qualified_name (name, ns))); - - if (i != element_map_.end ()) - { - if (const type_info* ti = find_substitution (i->second, tid)) - { - return xml::dom::serialize<C> ( - ti->name ().name (), ti->name ().namespace_ (), m, flags); - } - } - } - - // If there is no substitution then serialize() will have to - // find suitable xsi:type. - // - return xml::dom::serialize<C> (name, ns, m, flags); - } - - template <typename C> - const typename type_serializer_map<C>::type_info* - type_serializer_map<C>:: - find (const type_id& tid) const - { - typename type_map::const_iterator i (type_map_.find (&tid)); - return i == type_map_.end () ? 0 : &i->second; - } - - template <typename C> - const typename type_serializer_map<C>::type_info* - type_serializer_map<C>:: - find_substitution (const subst_map& start, const type_id& tid) const - { - typename subst_map::const_iterator i (start.find (&tid)); - - if (i != start.end ()) - return &i->second; - else - { - for (i = start.begin (); i != start.end (); ++i) - { - typename element_map::const_iterator j ( - element_map_.find (i->second.name ())); - - if (j != element_map_.end ()) - { - if (const type_info* ti = find_substitution (j->second, tid)) - return ti; - } - } - } - - return 0; - } - - template <typename C> - void type_serializer_map<C>:: - set_xsi_type (xercesc::DOMElement& parent, - xercesc::DOMElement& e, - const type_info& ti) const - { - std::basic_string<C> id; - const std::basic_string<C>& ns (ti.name ().namespace_ ()); - - if (!ns.empty ()) - { - id = xml::dom::prefix (ns, e); - - if (!id.empty ()) - id += C (':'); - } - - id += ti.name ().name (); - - std::basic_string<C> name = xml::dom::prefix ( - xml::bits::xsi_namespace<C> (), parent, xml::bits::xsi_prefix<C> ()); - - if (!name.empty ()) - name += C (':'); - - name += xml::bits::type<C> (); - - e.setAttributeNS ( - xercesc::SchemaSymbols::fgURI_XSI, - xml::string (name).c_str (), - xml::string (id).c_str ()); - } - - - // type_serializer_plate - // - template<unsigned long id, typename C> - type_serializer_plate<id, C>:: - type_serializer_plate () - { - if (count == 0) - map = new type_serializer_map<C>; - - ++count; - } - - template<unsigned long id, typename C> - type_serializer_plate<id, C>:: - ~type_serializer_plate () - { - if (--count == 0) - delete map; - } - - - // - // - template<typename T> - void - serializer_impl (xercesc::DOMElement& e, const type& x) - { - e << static_cast<const T&> (x); - } - - // type_serializer_initializer - // - template<unsigned long id, typename C, typename T> - type_serializer_initializer<id, C, T>:: - type_serializer_initializer (const C* name, const C* ns) - { - type_serializer_map_instance<id, C> ().register_type ( - typeid (T), - xml::qualified_name<C> (name, ns), - &serializer_impl<T>); - } - - template<unsigned long id, typename C, typename T> - type_serializer_initializer<id, C, T>:: - ~type_serializer_initializer () - { - type_serializer_map_instance<id, C> ().unregister_type (typeid (T)); - } - - // element_serializer_initializer - // - template<unsigned long id, typename C, typename T> - element_serializer_initializer<id, C, T>:: - element_serializer_initializer (const C* root_name, const C* root_ns, - const C* subst_name, const C* subst_ns) - : root_name_ (root_name), root_ns_ (root_ns) - { - type_serializer_map_instance<id, C> ().register_element ( - xml::qualified_name<C> (root_name, root_ns), - xml::qualified_name<C> (subst_name, subst_ns), - typeid (T), - &serializer_impl<T>); - } - - template<unsigned long id, typename C, typename T> - element_serializer_initializer<id, C, T>:: - ~element_serializer_initializer () - { - type_serializer_map_instance<id, C> ().unregister_element ( - xml::qualified_name<C> (root_name_, root_ns_), typeid (T)); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/types.hxx b/libxsd/xsd/cxx/tree/types.hxx deleted file mode 100644 index 3355eb0..0000000 --- a/libxsd/xsd/cxx/tree/types.hxx +++ /dev/null @@ -1,3942 +0,0 @@ -// file : xsd/cxx/tree/types.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -/** - * @file - * - * @brief Contains C++ class definitions for XML Schema built-in types. - * - * This is an internal header and is included by the generated code. You - * normally should not include it directly. - * - */ - -#ifndef XSD_CXX_TREE_TYPES_HXX -#define XSD_CXX_TREE_TYPES_HXX - -#include <string> -#include <cstddef> // std::size_t - -#include <xercesc/dom/DOMAttr.hpp> -#include <xercesc/dom/DOMElement.hpp> - -#include <xsd/cxx/tree/elements.hxx> -#include <xsd/cxx/tree/list.hxx> -#include <xsd/cxx/tree/buffer.hxx> -#include <xsd/cxx/tree/istream-fwd.hxx> - -#include <xsd/cxx/tree/date-time.hxx> - -namespace xsd -{ - namespace cxx - { - /** - * @brief C++/Tree mapping runtime namespace. - * - * This is an internal namespace and normally should not be referenced - * directly. Instead you should use the aliases for types in this - * namespaces that are created in the generated code. - * - */ - namespace tree - { - /** - * @brief Class corresponding to the XML Schema %string built-in - * type. - * - * The %string class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class string: public B, public std::basic_string<C> - { - typedef std::basic_string<C> base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor creates an empty %string. - */ - string () - { - } - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - string (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - string (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - string (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - string (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - string (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - string (const string& x, flags f = 0, container* c = 0) - : B (x, f, c), base_type (x) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual string* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - string (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - string (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - string (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - string (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %string has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - string& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %string contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - string& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %string contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - string& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - string& - operator= (const string& x) - { - base () = x; - return *this; - } - }; - - /** - * @brief %string comparison operator. - * - * @return True if the strings are equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator== (const string<C, B>& a, const string<C, B>& b) - { - return static_cast<const std::basic_string<C>&> (a) == b; - } - - /** - * @brief %string comparison operator. - * - * @return True if the strings are not equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator!= (const string<C, B>& a, const string<C, B>& b) - { - return !(a == b); - } - - /** - * @brief Class corresponding to the XML Schema normalizedString - * built-in type. - * - * The %normalized_string class publicly inherits from and has - * the same set of constructors as @c std::basic_string. It - * therefore can be used as @c std::string (or @c std::wstring - * if you are using @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class normalized_string: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor creates an empty %normalized_string. - */ - normalized_string () - { - } - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - normalized_string (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - normalized_string (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - normalized_string (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - normalized_string (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - normalized_string (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - normalized_string (const normalized_string& x, - flags f = 0, - container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual normalized_string* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - normalized_string (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - normalized_string (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - normalized_string (const xercesc::DOMAttr& a, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - normalized_string (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %normalized_string has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - normalized_string& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %normalized_string contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - normalized_string& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %normalized_string contains a copy of the standard - * %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - normalized_string& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - normalized_string& - operator= (const normalized_string& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - void - normalize (); - - //@endcond - }; - - - /** - * @brief Class corresponding to the XML Schema %token built-in - * type. - * - * The %token class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class token: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor creates an empty %token. - */ - token () - { - } - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - token (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - token (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - token (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - token (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - token (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - token (const token& x, flags f = 0, container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual token* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - token (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - token (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - token (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - token (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %token has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - token& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %token contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - token& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %token contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - token& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - token& - operator= (const token& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - void - collapse (); - - //@endcond - }; - - - /** - * @brief Class corresponding to the XML Schema NMTOKEN built-in - * type. - * - * The %nmtoken class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class nmtoken: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - nmtoken (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - nmtoken (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - nmtoken (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - nmtoken (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - nmtoken (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - nmtoken (const nmtoken& x, flags f = 0, container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual nmtoken* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - nmtoken (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - nmtoken (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - nmtoken (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - nmtoken (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %nmtoken has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - nmtoken& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %nmtoken contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - nmtoken& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %nmtoken contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - nmtoken& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - nmtoken& - operator= (const nmtoken& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - nmtoken () - : base_type () - { - } - - //@endcond - }; - - - /** - * @brief Class corresponding to the XML Schema NMTOKENS built-in - * type. - * - * The %nmtokens class is a vector (or %list in XML Schema terminology) - * of nmtoken elements. It is implemented in terms of the list class - * template. - * - * @nosubgrouping - */ - template <typename C, typename B, typename nmtoken> - class nmtokens: public B, public list<nmtoken, C> - { - typedef list<nmtoken, C> base_type; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor creates no elements. - */ - nmtokens () - : base_type (this) - { - } - - /** - * @brief Initialize the instance with copies of an exemplar elements. - * - * @param n A number of elements to copy. - * @param x An exemplar element to copy. - */ - nmtokens (typename base_type::size_type n, const nmtoken& x) - : base_type (n, x, this) - { - } - - /** - * @brief Initialize the instance with copies of elements from an - * iterator range. - * - * @param begin An iterator pointing to the first element. - * @param end An iterator pointing to the one past the last element. - */ - template <typename I> - nmtokens (const I& begin, const I& end) - : base_type (begin, end, this) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - nmtokens (const nmtokens& x, flags f, container* c = 0) - : B (x, f, c), base_type (x, f, this) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual nmtokens* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - nmtokens (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - nmtokens (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - nmtokens (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - nmtokens (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - }; - - /** - * @brief %nmtokens comparison operator. - * - * @return True if the lists of nmtokens are equal, false otherwise. - */ - template <typename C, typename B, typename nmtoken> - inline bool - operator== (const nmtokens<C, B, nmtoken>& a, - const nmtokens<C, B, nmtoken>& b) - { - return static_cast<const list<nmtoken, C>&> (a) == b; - } - - /** - * @brief %nmtokens comparison operator. - * - * @return True if the lists of nmtokens are not equal, false otherwise. - */ - template <typename C, typename B, typename nmtoken> - inline bool - operator!= (const nmtokens<C, B, nmtoken>& a, - const nmtokens<C, B, nmtoken>& b) - { - return !(a == b); - } - - /** - * @brief Class corresponding to the XML Schema Name built-in - * type. - * - * The %name class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class name: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - name (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - name (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - name (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - name (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - name (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - name (const name& x, flags f = 0, container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual name* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - name (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - name (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - name (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - name (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %name has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - name& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %name contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - name& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %name contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - name& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - name& - operator= (const name& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - name () - : base_type () - { - } - - //@endcond - }; - - - // Forward declaration for Sun CC. - // - template <typename C, typename B, typename uri, typename ncname> - class qname; - - - /** - * @brief Class corresponding to the XML Schema NCame built-in - * type. - * - * The %ncname class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class ncname: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - ncname (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - ncname (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - ncname (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - ncname (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - ncname (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - ncname (const ncname& x, flags f = 0, container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual ncname* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - ncname (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - ncname (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - ncname (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - ncname (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %ncname has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - ncname& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %ncname contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - ncname& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %ncname contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - ncname& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - ncname& - operator= (const ncname& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - ncname () - : base_type () - { - } - - //@endcond - - template <typename, typename, typename, typename> - friend class qname; - }; - - - /** - * @brief Class corresponding to the XML Schema %language built-in - * type. - * - * The %language class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class language: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - language (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - language (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - language (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - language (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - language (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - language (const language& x, flags f = 0, container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual language* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - language (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - language (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - language (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - language (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %language has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - language& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %language contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - language& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %language contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - language& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - language& - operator= (const language& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - language () - : base_type () - { - } - - //@endcond - }; - - - //@cond - - template <typename C, typename ncname> - struct identity_impl: identity - { - identity_impl (const ncname& id) - : id_ (id) - { - } - - virtual bool - before (const identity& y) const; - - virtual void - throw_duplicate_id () const; - - private: - const ncname& id_; - }; - - //@endcond - - - /** - * @brief Class corresponding to the XML Schema ID built-in - * type. - * - * The %id class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class id: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - ~id() - { - unregister_id (); - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - id (const C* s) - : base_type (s), identity_ (*this) - { - register_id (); - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - id (const C* s, std::size_t n) - : base_type (s, n), identity_ (*this) - { - register_id (); - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - id (std::size_t n, C c) - : base_type (n, c), identity_ (*this) - { - register_id (); - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - id (const std::basic_string<C>& s) - : base_type (s), identity_ (*this) - { - register_id (); - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - id (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n), identity_ (*this) - { - register_id (); - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - id (const id& x, flags f = 0, container* c = 0) - : base_type (x, f, c), identity_ (*this) - { - register_id (); - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual id* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - id (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - id (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - id (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - id (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %id has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - id& - operator= (C c); - - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %id contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - id& - operator= (const C* s); - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %id contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - id& - operator= (const std::basic_string<C>& s); - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - id& - operator= (const id& x); - - public: - //@cond - - virtual void - _container (container*); - - using B::_container; - - //@endcond - - protected: - //@cond - - id () - : base_type (), identity_ (*this) - { - register_id (); - } - - //@endcond - - private: - void - register_id (); - - void - unregister_id (); - - private: - identity_impl<C, B> identity_; - }; - - - /** - * @brief Class corresponding to the XML Schema IDREF built-in - * type. - * - * The %idref class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * The %idref class also provides an autopointer-like interface - * for resolving referenced objects. By default the object is - * returned as type (mapping for anyType) but statically-typed - * %idref can be created using the XML Schema extension. See the - * C++/Tree Mapping User Manual for more information. - * - * @nosubgrouping - */ - template <typename C, typename B, typename T> - class idref: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @brief Referenced type. - */ - typedef T ref_type; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - idref (const C* s) - : base_type (s), identity_ (*this) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - idref (const C* s, std::size_t n) - : base_type (s, n), identity_ (*this) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - idref (std::size_t n, C c) - : base_type (n, c), identity_ (*this) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - idref (const std::basic_string<C>& s) - : base_type (s), identity_ (*this) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - idref (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n), identity_ (*this) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - idref (const idref& x, flags f = 0, container* c = 0) - : base_type (x, f, c), identity_ (*this) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual idref* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - idref (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - idref (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - idref (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - idref (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %idref has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - idref& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %idref contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - idref& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %idref contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - idref& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - idref& - operator= (const idref& x) - { - base () = x; - return *this; - } - - public: - /** - * @brief Call referenced object. - * - * @return A constant pointer to the referenced object. - */ - const ref_type* - operator-> () const - { - return get (); - } - - /** - * @brief Call referenced object. - * - * @return A pointer to the referenced object. - */ - ref_type* - operator-> () - { - return get (); - } - - /** - * @brief Dereference referenced object. - * - * @return A constant C++ reference to the referenced object. - */ - const ref_type& - operator* () const - { - return *(get ()); - } - - /** - * @brief Dereference referenced object. - * - * @return A C++ reference to the referenced object. - */ - ref_type& - operator* () - { - return *(get ()); - } - - /** - * @brief Get a constant pointer to the referenced object. - * - * @return A constant pointer to the referenced object or 0 if - * the object of this type is not found. - */ - const ref_type* - get () const - { - return dynamic_cast<const ref_type*> (get_ ()); - } - - /** - * @brief Get a pointer to the referenced object. - * - * @return A pointer to the referenced object or 0 if the object - * of this type is not found. - */ - ref_type* - get () - { - return dynamic_cast<ref_type*> (get_ ()); - } - - /** - * @brief Opaque type that can be evaluated as true or false. - */ - typedef void (idref::*bool_convertible)(); - - /** - * @brief Implicit conversion to boolean type. - * - * @return True if the referenced object is found, false otherwise. - */ - operator bool_convertible () const - { - return get_ () ? &idref::true_ : 0; - } - - protected: - //@cond - - idref () - : base_type (), identity_ (*this) - { - } - - //@endcond - - private: - const _type* - get_ () const; - - _type* - get_ (); - - void - true_ (); - - private: - identity_impl<C, B> identity_; - }; - - - /** - * @brief Class corresponding to the XML Schema IDREFS built-in - * type. - * - * The %idrefs class is a vector (or %list in XML Schema terminology) - * of idref elements. It is implemented in terms of the list class - * template. - * - * @nosubgrouping - */ - template <typename C, typename B, typename idref> - class idrefs: public B, public list<idref, C> - { - typedef list<idref, C> base_type; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor creates no elements. - */ - idrefs () - : base_type (this) - { - } - - /** - * @brief Initialize the instance with copies of an exemplar elements. - * - * @param n A number of elements to copy. - * @param x An exemplar element to copy. - */ - idrefs (typename base_type::size_type n, const idref& x) - : base_type (n, x, this) - { - } - - /** - * @brief Initialize the instance with copies of elements from an - * iterator range. - * - * @param begin An iterator pointing to the first element. - * @param end An iterator pointing to the one past the last element. - */ - template <typename I> - idrefs (const I& begin, const I& end) - : base_type (begin, end, this) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - idrefs (const idrefs& x, flags f = 0, container* c = 0) - : B (x, f, c), base_type (x, f, this) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual idrefs* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - idrefs (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - idrefs (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - idrefs (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - idrefs (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - }; - - /** - * @brief %idrefs comparison operator. - * - * @return True if the lists of idrefs are equal, false otherwise. - */ - template <typename C, typename B, typename idref> - inline bool - operator== (const idrefs<C, B, idref>& a, const idrefs<C, B, idref>& b) - { - return static_cast<const list<idref, C>&> (a) == b; - } - - /** - * @brief %idrefs comparison operator. - * - * @return True if the lists of idrefs are not equal, false otherwise. - */ - template <typename C, typename B, typename idref> - inline bool - operator!= (const idrefs<C, B, idref>& a, const idrefs<C, B, idref>& b) - { - return !(a == b); - } - - /** - * @brief Class corresponding to the XML Schema anyURI built-in - * type. - * - * The %uri class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class uri: public B, public std::basic_string<C> - { - typedef std::basic_string<C> base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - uri (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - uri (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - uri (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - uri (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - uri (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - uri (const uri& x, flags f = 0, container* c = 0) - : B (x, f, c), base_type (x) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual uri* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - uri (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - uri (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - uri (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - uri (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %uri has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - uri& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %uri contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - uri& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %uri contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - uri& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - uri& - operator= (const uri& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - uri () - : base_type () - { - } - - //@endcond - - template <typename, typename, typename, typename> - friend class qname; - }; - - /** - * @brief %uri comparison operator. - * - * @return True if the uris are equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator== (const uri<C, B>& a, const uri<C, B>& b) - { - return static_cast<const std::basic_string<C>&> (a) == b; - } - - /** - * @brief %uri comparison operator. - * - * @return True if the uris are not equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator!= (const uri<C, B>& a, const uri<C, B>& b) - { - return !(a == b); - } - - /** - * @brief Class corresponding to the XML Schema QName built-in - * type. - * - * The %qname class represents a potentially namespace-qualified - * XML %name. - * - * @nosubgrouping - */ - template <typename C, typename B, typename uri, typename ncname> - class qname: public B - { - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a %name only. - * - * The resulting %qname is unqualified. - * - * @param n An XML %name (ncname). - */ - qname (const ncname& n) - : ns_ (), name_ (n) - { - } - - /** - * @brief Initialize an instance with a %name and a namespace. - * - * The resulting %qname is qualified. - * - * @param ns An XML namespace (uri). - * @param n An XML %name (ncname). - */ - qname (const uri& ns, const ncname& n) - : ns_ (ns), name_ (n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - qname (const qname& x, flags f = 0, container* c = 0) - : B (x, f, c), - ns_ (x.ns_), - name_ (x.name_) - { - // Note that ns_ and name_ have no DOM association. - // - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual qname* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - qname (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - qname (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - qname (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - qname (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Determine if the %name is qualified. - * - * @return True if the %name is qualified, false otherwise. - */ - bool - qualified () const - { - return !ns_.empty (); - } - - /** - * @brief Get XML namespace. - * - * @return A constant reference to qualifying XML namespace. - */ - const uri& - namespace_ () const - { - return ns_; - } - - /** - * @brief Get XML %name. - * - * @return A constant reference to unqualified XML %name. - */ - const ncname& - name () const - { - return name_; - } - - protected: - //@cond - - qname () - : ns_ (), name_ () - { - } - - //@endcond - - private: - static uri - resolve (const std::basic_string<C>&, const xercesc::DOMElement*); - - private: - uri ns_; - ncname name_; - }; - - /** - * @brief %qname comparison operator. - * - * @return True if the names are equal, false otherwise. - */ - template <typename C, typename B, typename uri, typename ncname> - inline bool - operator== (const qname<C, B, uri, ncname>& a, - const qname<C, B, uri, ncname>& b) - { - return a.name () == b.name () && a.namespace_ () == b.namespace_ (); - } - - /** - * @brief %qname comparison operator. - * - * @return True if the names are not equal, false otherwise. - */ - template <typename C, typename B, typename uri, typename ncname> - inline bool - operator!= (const qname<C, B, uri, ncname>& a, - const qname<C, B, uri, ncname>& b) - { - return !(a == b); - } - - - /** - * @brief Class corresponding to the XML Schema base64Binary - * built-in type. - * - * The %base64_binary class is a binary %buffer abstraction with - * base64-encoded representation in XML. It publicly inherits from - * the buffer class which provides the %buffer functionality. - * - * @nosubgrouping - */ - template <typename C, typename B> - class base64_binary: public B, public buffer<C> - { - public: - typedef typename buffer<C>::size_t size_t; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Allocate a %buffer of the specified size. - * - * The resulting %buffer has the same size and capacity. - * - * @param size A %buffer size in bytes. - */ - explicit - base64_binary (size_t size = 0); - - /** - * @brief Allocate a %buffer of the specified size and capacity. - * - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @throw bounds If @a size exceeds @a capacity - */ - base64_binary (size_t size, size_t capacity); - - /** - * @brief Allocate a %buffer of the specified size and copy - * the data. - * - * The resulting %buffer has the same size and capacity with - * @a size bytes copied from @a data. - * - * @param data A %buffer to copy the data from. - * @param size A %buffer size in bytes. - */ - base64_binary (const void* data, size_t size); - - /** - * @brief Allocate a %buffer of the specified size and capacity - * and copy the data. - * - * @a size bytes are copied from @a data to the resulting - * %buffer. - * - * @param data A %buffer to copy the data from. - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @throw bounds If @a size exceeds @a capacity - */ - base64_binary (const void* data, size_t size, size_t capacity); - - /** - * @brief Reuse an existing %buffer. - * - * If the @a assume_ownership argument is true, the %buffer will - * assume ownership of @a data and will release the memory - * by calling @c operator @c delete(). - * - * @param data A %buffer to reuse. - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @param assume_ownership A boolean value indication whether to - * assume ownership. - * @throw bounds If @a size exceeds @a capacity - */ - base64_binary (void* data, - size_t size, - size_t capacity, - bool assume_ownership); - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - base64_binary (const base64_binary& x, - flags f = 0, - container* c = 0) - : B (x, f, c), buffer<C> (x) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual base64_binary* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - base64_binary (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - base64_binary (const xercesc::DOMElement& e, - flags f = 0, - container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - base64_binary (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - base64_binary (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - base64_binary& - operator= (const base64_binary& x) - { - buffer<C>& b (*this); - b = x; - return *this; - } - - public: - /** - * @brief Encode the %buffer in base64 encoding. - * - * @return A %string with base64-encoded data. - */ - std::basic_string<C> - encode () const; - - private: - void - decode (const XMLCh*); - }; - - /** - * @brief %base64_binary comparison operator. - * - * @return True if the binaries are equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator== (const base64_binary<C, B>& a, const base64_binary<C, B>& b) - { - return static_cast<const buffer<C>&> (a) == b; - } - - /** - * @brief %base64_binary comparison operator. - * - * @return True if the binaries are not equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator!= (const base64_binary<C, B>& a, const base64_binary<C, B>& b) - { - return !(a == b); - } - - /** - * @brief Class corresponding to the XML Schema hexBinary - * built-in type. - * - * The %hex_binary class is a binary %buffer abstraction with - * hex-encoded representation in XML. It publicly inherits from - * the buffer class which provides the %buffer functionality. - * - * @nosubgrouping - */ - template <typename C, typename B> - class hex_binary: public B, public buffer<C> - { - public: - typedef typename buffer<C>::size_t size_t; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Allocate a %buffer of the specified size. - * - * The resulting %buffer has the same size and capacity. - * - * @param size A %buffer size in bytes. - */ - explicit - hex_binary (size_t size = 0); - - /** - * @brief Allocate a %buffer of the specified size and capacity. - * - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @throw bounds If @a size exceeds @a capacity - */ - hex_binary (size_t size, size_t capacity); - - /** - * @brief Allocate a %buffer of the specified size and copy - * the data. - * - * The resulting %buffer has the same size and capacity with - * @a size bytes copied from @a data. - * - * @param data A %buffer to copy the data from. - * @param size A %buffer size in bytes. - */ - hex_binary (const void* data, size_t size); - - /** - * @brief Allocate a %buffer of the specified size and capacity - * and copy the data. - * - * @a size bytes are copied from @a data to the resulting - * %buffer. - * - * @param data A %buffer to copy the data from. - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @throw bounds If @a size exceeds @a capacity - */ - hex_binary (const void* data, size_t size, size_t capacity); - - /** - * @brief Reuse an existing %buffer.. - * - * If the @a assume_ownership argument is true, the %buffer will - * assume ownership of @a data and will release the memory - * by calling @c operator @c delete(). - * - * @param data A %buffer to reuse. - * @param size A %buffer size in bytes. - * @param capacity A %buffer capacity in bytes. - * @param assume_ownership A boolean value indication whether to - * assume ownership. - * @throw bounds If @a size exceeds @a capacity - */ - hex_binary (void* data, - size_t size, - size_t capacity, - bool assume_ownership); - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - hex_binary (const hex_binary& x, flags f = 0, container* c = 0) - : B (x, f, c), buffer<C> (x) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual hex_binary* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - hex_binary (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - hex_binary (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - hex_binary (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - hex_binary (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - hex_binary& - operator= (const hex_binary& x) - { - buffer<C>& b (*this); - b = x; - return *this; - } - - public: - /** - * @brief Encode the %buffer in hex encoding. - * - * @return A %string with hex-encoded data. - */ - std::basic_string<C> - encode () const; - - private: - void - decode (const XMLCh*); - }; - - /** - * @brief %hex_binary comparison operator. - * - * @return True if the binaries are equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator== (const hex_binary<C, B>& a, const hex_binary<C, B>& b) - { - return static_cast<const buffer<C>&> (a) == b; - } - - /** - * @brief %hex_binary comparison operator. - * - * @return True if the binaries are not equal, false otherwise. - */ - template <typename C, typename B> - inline bool - operator!= (const hex_binary<C, B>& a, const hex_binary<C, B>& b) - { - return !(a == b); - } - - /** - * @brief Class corresponding to the XML Schema ENTITY built-in - * type. - * - * The %entity class publicly inherits from and has the same set - * of constructors as @c std::basic_string. It therefore can be - * used as @c std::string (or @c std::wstring if you are using - * @c wchar_t as the character type). - * - * @nosubgrouping - */ - template <typename C, typename B> - class entity: public B - { - typedef B base_type; - - base_type& - base () - { - return *this; - } - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Initialize an instance with a copy of a C %string. - * - * @param s A C %string to copy. - */ - entity (const C* s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a character array. - * - * @param s A character array to copy. - * @param n A number of character to copy. - */ - entity (const C* s, std::size_t n) - : base_type (s, n) - { - } - - /** - * @brief Initialize an instance with multiple copies of the same - * character. - * - * @param n A number of copies to create. - * @param c A character to copy. - */ - entity (std::size_t n, C c) - : base_type (n, c) - { - } - - /** - * @brief Initialize an instance with a copy of a standard %string. - * - * @param s A standard %string to copy. - */ - entity (const std::basic_string<C>& s) - : base_type (s) - { - } - - /** - * @brief Initialize an instance with a copy of a substring. - * - * @param s A standard %string to copy the substring from. - * @param pos An index of the first character to copy from. - * @param n A number of characters to copy. - */ - entity (const std::basic_string<C>& s, - std::size_t pos, - std::size_t n = std::basic_string<C>::npos) - : base_type (s, pos, n) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - entity (const entity& x, flags f = 0, container* c = 0) - : base_type (x, f, c) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual entity* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - entity (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - entity (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - entity (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - entity (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - - public: - /** - * @brief Assign a character to the instance. - * - * The resulting %entity has only one character. - * - * @param c A character to assign. - * @return A reference to the instance. - */ - entity& - operator= (C c) - { - base () = c; - return *this; - } - - /** - * @brief Assign a C %string to the instance. - * - * The resulting %entity contains a copy of the C %string. - * - * @param s A C %string to assign. - * @return A reference to the instance. - */ - entity& - operator= (const C* s) - { - base () = s; - return *this; - } - - /** - * @brief Assign a standard %string to the instance. - * - * The resulting %entity contains a copy of the standard %string. - * - * @param s A standard %string to assign. - * @return A reference to the instance. - */ - entity& - operator= (const std::basic_string<C>& s) - { - base () = s; - return *this; - } - - /** - * @brief Copy assignment operator. - * - * @param x An instance to assign. - * @return A reference to the instance. - */ - entity& - operator= (const entity& x) - { - base () = x; - return *this; - } - - protected: - //@cond - - entity () - : base_type () - { - } - - //@endcond - }; - - - /** - * @brief Class corresponding to the XML Schema ENTITIES built-in - * type. - * - * The %entities class is a vector (or %list in XML Schema terminology) - * of entity elements. It is implemented in terms of the list class - * template. - * - * @nosubgrouping - */ - template <typename C, typename B, typename entity> - class entities: public B, public list<entity, C> - { - typedef list<entity, C> base_type; - - public: - /** - * @name Constructors - */ - //@{ - - /** - * @brief Default constructor creates no elements. - */ - entities () - : base_type (this) - { - } - - /** - * @brief Initialize the instance with copies of an exemplar elements. - * - * @param n A number of elements to copy. - * @param x An exemplar element to copy. - */ - entities (typename base_type::size_type n, const entity& x) - : base_type (n, x, this) - { - } - - /** - * @brief Initialize the instance with copies of elements from an - * iterator range. - * - * @param begin An iterator pointing to the first element. - * @param end An iterator pointing to the one past the last element. - */ - template <typename I> - entities (const I& begin, const I& end) - : base_type (begin, end, this) - { - } - - public: - /** - * @brief Copy constructor. - * - * @param x An instance to make a copy of. - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * - * For polymorphic object models use the @c _clone function instead. - */ - entities (const entities& x, flags f = 0, container* c = 0) - : B (x, f, c), base_type (x, f, this) - { - } - - /** - * @brief Copy the instance polymorphically. - * - * @param f Flags to create the copy with. - * @param c A pointer to the object that will contain the copy. - * @return A pointer to the dynamically allocated copy. - * - * This function ensures that the dynamic type of the instance - * is used for copying and should be used for polymorphic object - * models instead of the copy constructor. - */ - virtual entities* - _clone (flags f = 0, container* c = 0) const; - - public: - /** - * @brief Create an instance from a data representation - * stream. - * - * @param s A stream to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - template <typename S> - entities (istream<S>& s, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM element. - * - * @param e A DOM element to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - entities (const xercesc::DOMElement& e, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a DOM Attribute. - * - * @param a A DOM attribute to extract the data from. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - entities (const xercesc::DOMAttr& a, flags f = 0, container* c = 0); - - /** - * @brief Create an instance from a %string fragment. - * - * @param s A %string fragment to extract the data from. - * @param e A pointer to DOM element containing the %string fragment. - * @param f Flags to create the new instance with. - * @param c A pointer to the object that will contain the new - * instance. - */ - entities (const std::basic_string<C>& s, - const xercesc::DOMElement* e, - flags f = 0, - container* c = 0); - //@} - }; - - /** - * @brief %entities comparison operator. - * - * @return True if the lists of entities are equal, false otherwise. - */ - template <typename C, typename B, typename entity> - inline bool - operator== (const entities<C, B, entity>& a, - const entities<C, B, entity>& b) - { - return static_cast<const list<entity, C>&> (a) == b; - } - - /** - * @brief %entities comparison operator. - * - * @return True if the lists of entities are not equal, false otherwise. - */ - template <typename C, typename B, typename entity> - inline bool - operator!= (const entities<C, B, entity>& a, - const entities<C, B, entity>& b) - { - return !(a == b); - } - } - } -} - -#include <xsd/cxx/tree/types.txx> - -#endif // XSD_CXX_TREE_TYPES_HXX diff --git a/libxsd/xsd/cxx/tree/types.txx b/libxsd/xsd/cxx/tree/types.txx deleted file mode 100644 index c2a461c..0000000 --- a/libxsd/xsd/cxx/tree/types.txx +++ /dev/null @@ -1,528 +0,0 @@ -// file : xsd/cxx/tree/types.txx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#include <xercesc/util/Base64.hpp> -#include <xercesc/util/XMLString.hpp> - -#include <xsd/cxx/config.hxx> // XSD_CXX11 - -#ifdef XSD_CXX11 -# include <memory> // std::unique_ptr -#else -# include <xsd/cxx/auto-array.hxx> -#endif - -#include <xsd/cxx/xml/std-memory-manager.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - - // string - // - template <typename C, typename B> - string<C, B>* string<C, B>:: - _clone (flags f, container* c) const - { - return new string (*this, f, c); - } - - - // normalized_string - // - template <typename C, typename B> - normalized_string<C, B>* normalized_string<C, B>:: - _clone (flags f, container* c) const - { - return new normalized_string (*this, f, c); - } - - - // token - // - template <typename C, typename B> - token<C, B>* token<C, B>:: - _clone (flags f, container* c) const - { - return new token (*this, f, c); - } - - - // nmtoken - // - template <typename C, typename B> - nmtoken<C, B>* nmtoken<C, B>:: - _clone (flags f, container* c) const - { - return new nmtoken (*this, f, c); - } - - - // nmtokens - // - template <typename C, typename B, typename nmtoken> - nmtokens<C, B, nmtoken>* nmtokens<C, B, nmtoken>:: - _clone (flags f, container* c) const - { - return new nmtokens (*this, f, c); - } - - - // name - // - template <typename C, typename B> - name<C, B>* name<C, B>:: - _clone (flags f, container* c) const - { - return new name (*this, f, c); - } - - - // ncname - // - template <typename C, typename B> - ncname<C, B>* ncname<C, B>:: - _clone (flags f, container* c) const - { - return new ncname (*this, f, c); - } - - - // language - // - template <typename C, typename B> - language<C, B>* language<C, B>:: - _clone (flags f, container* c) const - { - return new language (*this, f, c); - } - - - // identity_impl - // - template <typename C, typename ncname> - bool identity_impl<C, ncname>:: - before (const identity& y) const - { - return id_ < static_cast<const identity_impl&> (y).id_; - } - - template <typename C, typename ncname> - void identity_impl<C, ncname>:: - throw_duplicate_id () const - { - throw duplicate_id<C> (id_); - } - - - // id - // - template <typename C, typename B> - id<C, B>* id<C, B>:: - _clone (flags f, container* c) const - { - return new id (*this, f, c); - } - - template <typename C, typename B> - id<C, B>& id<C, B>:: - operator= (C c) - { - unregister_id (); - base () = c; - register_id (); - - return *this; - } - - template <typename C, typename B> - id<C, B>& id<C, B>:: - operator= (const C* s) - { - unregister_id (); - base () = s; - register_id (); - - return *this; - } - - template <typename C, typename B> - id<C, B>& id<C, B>:: - operator= (const std::basic_string<C>& s) - { - unregister_id (); - base () = s; - register_id (); - - return *this; - } - - template <typename C, typename B> - id<C, B>& id<C, B>:: - operator= (const id& x) - { - unregister_id (); - base () = x; - register_id (); - - return *this; - } - - template <typename C, typename B> - void id<C, B>:: - _container (container* c) - { - B::_container (c); - register_id (); - } - - template <typename C, typename B> - void id<C, B>:: - register_id () - { - container* r (this->_root ()); - - if (r != 0 && !this->empty ()) - r->_register_id (identity_, this->_container ()); - } - - template <typename C, typename B> - void id<C, B>:: - unregister_id () - { - container* r (this->_root ()); - - if (r != 0 && !this->empty ()) - r->_unregister_id (identity_); - } - - - // idref - // - template <typename C, typename B, typename T> - idref<C, B, T>* idref<C, B, T>:: - _clone (flags f, container* c) const - { - return new idref (*this, f, c); - } - - template <typename C, typename B, typename T> - const _type* idref<C, B, T>:: - get_ () const - { - if (!this->empty () && this->_container () != 0) - { - return this->_root ()->_lookup_id (identity_); - } - else - return 0; - } - - template <typename C, typename B, typename T> - _type* idref<C, B, T>:: - get_ () - { - if (!this->empty () && this->_container () != 0) - { - return this->_root ()->_lookup_id (identity_); - } - else - return 0; - } - - template <typename C, typename B, typename T> - void idref<C, B, T>:: - true_ () - { - } - - - // idrefs - // - template <typename C, typename B, typename idref> - idrefs<C, B, idref>* idrefs<C, B, idref>:: - _clone (flags f, container* c) const - { - return new idrefs (*this, f, c); - } - - - // uri - // - template <typename C, typename B> - uri<C, B>* uri<C, B>:: - _clone (flags f, container* c) const - { - return new uri (*this, f, c); - } - - - // qname - // - template <typename C, typename B, typename uri, typename ncname> - qname<C, B, uri, ncname>* qname<C, B, uri, ncname>:: - _clone (flags f, container* c) const - { - return new qname (*this, f, c); - } - - - // base64_binary - // - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (size_t size) - : buffer<C> (size) - { - } - - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (size_t size, size_t capacity) - : buffer<C> (size, capacity) - { - } - - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (const void* data, size_t size) - : buffer<C> (data, size) - { - } - - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (const void* data, size_t size, size_t capacity) - : buffer<C> (data, size, capacity) - { - } - - template <typename C, typename B> - base64_binary<C, B>:: - base64_binary (void* data, size_t size, size_t capacity, bool own) - : buffer<C> (data, size, capacity, own) - { - } - - template <typename C, typename B> - base64_binary<C, B>* base64_binary<C, B>:: - _clone (flags f, container* c) const - { - return new base64_binary (*this, f, c); - } - - template <typename C, typename B> - std::basic_string<C> base64_binary<C, B>:: - encode () const - { - // Cannot use 'using namespace' because of MSXML conflict. - // - using xercesc::Base64; - - std::basic_string<C> str; - - XMLSize_t n; - xml::std_memory_manager mm; - -#ifdef XSD_CXX11 - std::unique_ptr<XMLByte[], xml::std_memory_manager&> r ( -#else - auto_array<XMLByte, xml::std_memory_manager> r ( -#endif - Base64::encode ( - reinterpret_cast<const XMLByte*> (this->data ()), - static_cast<XMLSize_t> (this->size ()), - &n, - &mm), - mm); - - if (r) - { - str.reserve (n + 1); - str.resize (n); - - for (XMLSize_t i (0); i < n; ++i) - str[i] = C (r[i]); - } - else - { - //@@ throw - } - - return str; - } - - template <typename C, typename B> - void base64_binary<C, B>:: - decode (const XMLCh* src) - { - // Cannot use 'using namespace' because of MSXML conflict. - // - using xercesc::Base64; - - xml::std_memory_manager mm; - XMLSize_t size; - -#ifdef XSD_CXX11 - std::unique_ptr<XMLByte[], xml::std_memory_manager&> data ( -#else - auto_array<XMLByte, xml::std_memory_manager> data ( -#endif - Base64::decodeToXMLByte (src, &size, &mm, Base64::Conf_RFC2045), - mm); - - if (data) - { - buffer<C> tmp (data.get (), size, size, true); - data.release (); - this->swap (tmp); // g++ 4.1 likes it qualified, not sure why. - } - else - { - //@@ throw - } - } - - - // hex_binary - // - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (size_t size) - : buffer<C> (size) - { - } - - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (size_t size, size_t capacity) - : buffer<C> (size, capacity) - { - } - - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (const void* data, size_t size) - : buffer<C> (data, size) - { - } - - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (const void* data, size_t size, size_t capacity) - : buffer<C> (data, size, capacity) - { - } - - template <typename C, typename B> - hex_binary<C, B>:: - hex_binary (void* data, size_t size, size_t capacity, bool own) - : buffer<C> (data, size, capacity, own) - { - } - - template <typename C, typename B> - hex_binary<C, B>* hex_binary<C, B>:: - _clone (flags f, container* c) const - { - return new hex_binary (*this, f, c); - } - - template <typename C, typename B> - std::basic_string<C> hex_binary<C, B>:: - encode () const - { - std::basic_string<C> str; - - const char tab[] = "0123456789ABCDEF"; - - if (size_t n = this->size ()) - { - str.reserve (2 * n + 1); - str.resize (2 * n); - - for (size_t i (0); i < n; ++i) - { - unsigned char byte ( - static_cast<unsigned char> (*(this->data () + i))); - unsigned char h (byte >> 4); - unsigned char l (byte & 0x0F); - - str[2 * i] = C (tab[h]); - str[2 * i + 1] = C (tab[l]); - } - } - - return str; - } - - namespace bits - { - inline unsigned char - hex_decode (XMLCh c) - { - unsigned char r (0xFF); - - if (c >= '0' && c <= '9') - r = static_cast<unsigned char> (c - '0'); - else if (c >= 'A' && c <= 'F') - r = static_cast<unsigned char> (10 + (c - 'A')); - else if (c >= 'a' && c <= 'f') - r = static_cast<unsigned char> (10 + (c - 'a')); - - return r; - } - } - - template <typename C, typename B> - void hex_binary<C, B>:: - decode (const XMLCh* src) - { - size_t src_n (xercesc::XMLString::stringLen (src)); - - if (src_n % 2 != 0) - return; // @@ throw - - size_t n (src_n / 2); - - buffer<C> tmp (n); - - for (size_t i (0); i < n; ++i) - { - unsigned char h (bits::hex_decode (src[2 * i])); - unsigned char l (bits::hex_decode (src[2 * i + 1])); - - if (h == 0xFF || l == 0xFF) - return; //@@ throw - - tmp.data()[i] = (h << 4) | l; - } - - this->swap (tmp); // g++ 4.1 likes it qualified, not sure why. - } - - - // entity - // - template <typename C, typename B> - entity<C, B>* entity<C, B>:: - _clone (flags f, container* c) const - { - return new entity (*this, f, c); - } - - - // entities - // - template <typename C, typename B, typename entity> - entities<C, B, entity>* entities<C, B, entity>:: - _clone (flags f, container* c) const - { - return new entities (*this, f, c); - } - } - } -} diff --git a/libxsd/xsd/cxx/tree/xdr-stream-common.hxx b/libxsd/xsd/cxx/tree/xdr-stream-common.hxx deleted file mode 100644 index 7db4223..0000000 --- a/libxsd/xsd/cxx/tree/xdr-stream-common.hxx +++ /dev/null @@ -1,24 +0,0 @@ -// file : xsd/cxx/tree/xdr-stream-common.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_XDR_STREAM_COMMON_HXX -#define XSD_CXX_TREE_XDR_STREAM_COMMON_HXX - -#include <xsd/cxx/exceptions.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - // Base exception for XDR insertion/extraction exceptions. - // - struct xdr_stream_operation: xsd::cxx::exception - { - }; - } - } -} - -#endif // XSD_CXX_TREE_XDR_STREAM_COMMON_HXX diff --git a/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx b/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx deleted file mode 100644 index 044e93a..0000000 --- a/libxsd/xsd/cxx/tree/xdr-stream-extraction.hxx +++ /dev/null @@ -1,306 +0,0 @@ -// file : xsd/cxx/tree/xdr-stream-extraction.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX -#define XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX - -#include <rpc/types.h> -#include <rpc/xdr.h> - -// Of course BSD has to be different and name its functions u_intXX -// instead of uintXX. Plus it does not have XX == 8. -// -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) -# if !defined(XSD_CXX_TREE_ASSUME_SUN_XDR) && !defined(xdr_int8_t) -# define xdr_int8_t(x, y) xdr_char(x, reinterpret_cast<char*> (y)) -# define xdr_uint8_t(x, y) xdr_u_char(x, reinterpret_cast<unsigned char*> (y)) -# define xdr_uint16_t xdr_u_int16_t -# define xdr_uint32_t xdr_u_int32_t -# define xdr_uint64_t xdr_u_int64_t -# endif -#endif - -#include <string> - -#include <xsd/cxx/tree/buffer.hxx> -#include <xsd/cxx/tree/istream.hxx> -#include <xsd/cxx/tree/xdr-stream-common.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - struct xdr_stream_extraction: xdr_stream_operation - { - virtual const char* - what () const throw () - { - return "XDR stream extraction operation failed"; - } - }; - - - // as_size - // -#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_size<T>& x) - { - uint64_t v; - - if (!xdr_uint64_t (&s.impl (), &v) || v > ~(T (0))) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } -#else - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_size<T>& x) - { - uint32_t v; - - if (!xdr_uint32_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } -#endif - - - // 8-bit - // - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_int8<T>& x) - { - int8_t v; - - if (!xdr_int8_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_uint8<T>& x) - { - uint8_t v; - - if (!xdr_uint8_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - - // 16-bit - // - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_int16<T>& x) - { - int16_t v; - - if (!xdr_int16_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_uint16<T>& x) - { - uint16_t v; - - if (!xdr_uint16_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - - // 32-bit - // - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_int32<T>& x) - { - int32_t v; - - if (!xdr_int32_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_uint32<T>& x) - { - uint32_t v; - - if (!xdr_uint32_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - - // 64-bit - // - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_int64<T>& x) - { - int64_t v; - - if (!xdr_int64_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_uint64<T>& x) - { - uint64_t v; - - if (!xdr_uint64_t (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - - // Boolean - // - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_bool<T>& x) - { - bool_t v; - - if (!xdr_bool (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - - // Floating-point - // - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_float32<T>& x) - { - float v; - - if (!xdr_float (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - template <typename T> - inline istream<XDR>& - operator>> (istream<XDR>& s, istream<XDR>::as_float64<T>& x) - { - double v; - - if (!xdr_double (&s.impl (), &v)) - throw xdr_stream_extraction (); - - x.x_ = static_cast<T> (v); - - return s; - } - - // Extraction of std::basic_string. - // - - inline istream<XDR>& - operator>> (istream<XDR>& s, std::basic_string<char>& x) - { - unsigned int n; - - if (!xdr_u_int (&s.impl (), &n)) - throw xdr_stream_extraction (); - - // Dangerous but fast. - // - x.clear (); - - if (n != 0) - { - x.resize (n); - char* p (const_cast<char*> (x.c_str ())); - - if (!xdr_opaque (&s.impl (), p, n)) - throw xdr_stream_extraction (); - } - - return s; - } - - // Wide strings are not supported by XDR. - // - // inline istream<XDR>& - // operator>> (istream<XDR>& s, std::basic_string<wchar_t>& x) - // { - // } - - - // Extraction of a binary buffer. - // - template <typename C> - istream<XDR>& - operator>> (istream<XDR>& s, buffer<C>& x) - { - unsigned int n; - - if (!xdr_u_int (&s.impl (), &n)) - throw xdr_stream_extraction (); - - x.size (n); - - if (!xdr_opaque (&s.impl (), x.data (), n)) - throw xdr_stream_extraction (); - - return s; - } - } - } -} - -#endif // XSD_CXX_TREE_XDR_STREAM_EXTRACTION_HXX diff --git a/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx b/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx deleted file mode 100644 index b834f8e..0000000 --- a/libxsd/xsd/cxx/tree/xdr-stream-insertion.hxx +++ /dev/null @@ -1,270 +0,0 @@ -// file : xsd/cxx/tree/xdr-stream-insertion.hxx -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX -#define XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX - -#include <rpc/types.h> -#include <rpc/xdr.h> - -// Of course BSD has to be different and name its functions u_intXX -// instead of uintXX. Plus it does not have XX == 8. -// -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) -# if !defined(XSD_CXX_TREE_ASSUME_SUN_XDR) && !defined(xdr_int8_t) -# define xdr_int8_t(x, y) xdr_char(x, reinterpret_cast<char*> (y)) -# define xdr_uint8_t(x, y) xdr_u_char(x, reinterpret_cast<unsigned char*> (y)) -# define xdr_uint16_t xdr_u_int16_t -# define xdr_uint32_t xdr_u_int32_t -# define xdr_uint64_t xdr_u_int64_t -# endif -#endif - -#include <string> - -#include <xsd/cxx/tree/buffer.hxx> -#include <xsd/cxx/tree/ostream.hxx> -#include <xsd/cxx/tree/xdr-stream-common.hxx> - -namespace xsd -{ - namespace cxx - { - namespace tree - { - struct xdr_stream_insertion: xdr_stream_operation - { - virtual const char* - what () const throw () - { - return "XDR stream insertion operation failed"; - } - }; - - // as_size - // -#ifdef XSD_CXX_TREE_USE_64_BIT_SIZE - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_size<T> x) - { - uint64_t v (static_cast<uint64_t> (x.x_)); - - if (!xdr_uint64_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } -#else - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_size<T> x) - { - uint32_t v (static_cast<uint32_t> (x.x_)); - - if (x.x_ > ~(uint32_t (0)) || !xdr_uint32_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } -#endif - - - // 8-bit - // - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_int8<T> x) - { - int8_t v (static_cast<int8_t> (x.x_)); - - if (!xdr_int8_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_uint8<T> x) - { - uint8_t v (static_cast<uint8_t> (x.x_)); - - if (!xdr_uint8_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - - // 16-bit - // - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_int16<T> x) - { - int16_t v (static_cast<int16_t> (x.x_)); - - if (!xdr_int16_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_uint16<T> x) - { - uint16_t v (static_cast<uint16_t> (x.x_)); - - if (!xdr_uint16_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - - // 32-bit - // - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_int32<T> x) - { - int32_t v (static_cast<int32_t> (x.x_)); - - if (!xdr_int32_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_uint32<T> x) - { - uint32_t v (static_cast<uint32_t> (x.x_)); - - if (!xdr_uint32_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - - // 64-bit - // - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_int64<T> x) - { - int64_t v (static_cast<int64_t> (x.x_)); - - if (!xdr_int64_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_uint64<T> x) - { - uint64_t v (static_cast<uint64_t> (x.x_)); - - if (!xdr_uint64_t (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - - // Boolean - // - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_bool<T> x) - { - bool_t v (static_cast<bool_t> (x.x_)); - - if (!xdr_bool (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - - // Floating-point - // - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_float32<T> x) - { - float v (static_cast<float> (x.x_)); - - if (!xdr_float (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - template <typename T> - inline ostream<XDR>& - operator<< (ostream<XDR>& s, ostream<XDR>::as_float64<T> x) - { - double v (static_cast<double> (x.x_)); - - if (!xdr_double (&s.impl (), &v)) - throw xdr_stream_insertion (); - - return s; - } - - // Insertion of std::basic_string. - // - - inline ostream<XDR>& - operator<< (ostream<XDR>& s, const std::basic_string<char>& x) - { - // XDR strings are hard-wired with a 32 bit (unsigned int) length. - // - char* p (const_cast<char*> (x.c_str ())); - unsigned int n (static_cast<unsigned int> (x.length ())); - - if (x.length () > ~((unsigned int) 0) || - !xdr_u_int (&s.impl (), &n) || - !xdr_opaque (&s.impl (), p, n)) - throw xdr_stream_insertion (); - - return s; - } - - // Wide strings are not supported by XDR. - // - // inline ostream<XDR>& - // operator<< (ostream<XDR>& s, const std::basic_string<wchar_t>& x) - // { - // } - - - // Insertion of a binary buffer. - // - template <typename C> - ostream<XDR>& - operator<< (ostream<XDR>& s, const buffer<C>& x) - { - // It is not possible to write an array with a 64-bit size. - // - unsigned int n (static_cast<unsigned int> (x.size ())); - - if (x.size () > ~((unsigned int) 0) || - !xdr_u_int (&s.impl (), &n) || - !xdr_opaque (&s.impl (), const_cast<char*> (x.data ()), n)) - throw xdr_stream_insertion (); - - return s; - } - } - } -} - -#endif // XSD_CXX_TREE_XDR_STREAM_INSERTION_HXX |