summaryrefslogtreecommitdiff
path: root/libxsd/xsd/cxx/tree
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd/xsd/cxx/tree')
-rw-r--r--libxsd/xsd/cxx/tree/containers.hxx10
-rw-r--r--libxsd/xsd/cxx/tree/date-time.hxx45
-rw-r--r--libxsd/xsd/cxx/tree/elements.hxx10
-rw-r--r--libxsd/xsd/cxx/tree/list.hxx10
-rw-r--r--libxsd/xsd/cxx/tree/type-factory-map.hxx7
-rw-r--r--libxsd/xsd/cxx/tree/type-factory-map.txx16
-rw-r--r--libxsd/xsd/cxx/tree/type-serializer-map.hxx5
-rw-r--r--libxsd/xsd/cxx/tree/type-serializer-map.txx11
-rw-r--r--libxsd/xsd/cxx/tree/types.hxx44
9 files changed, 147 insertions, 11 deletions
diff --git a/libxsd/xsd/cxx/tree/containers.hxx b/libxsd/xsd/cxx/tree/containers.hxx
index a7a4d10..3e26ca3 100644
--- a/libxsd/xsd/cxx/tree/containers.hxx
+++ b/libxsd/xsd/cxx/tree/containers.hxx
@@ -858,6 +858,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ sequence&
+ operator= (const sequence&) = default;
+#endif
+
public:
void
assign (size_type n, const T& x)
@@ -1132,6 +1137,11 @@ namespace xsd
: base_sequence (s)
{
}
+
+#ifdef XSD_CXX11
+ sequence&
+ operator= (const sequence&) = default;
+#endif
};
diff --git a/libxsd/xsd/cxx/tree/date-time.hxx b/libxsd/xsd/cxx/tree/date-time.hxx
index eb9efce..d5d06ec 100644
--- a/libxsd/xsd/cxx/tree/date-time.hxx
+++ b/libxsd/xsd/cxx/tree/date-time.hxx
@@ -210,6 +210,11 @@ namespace xsd
*/
gday (const gday& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ gday&
+ operator= (const gday&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -371,6 +376,11 @@ namespace xsd
*/
gmonth (const gmonth& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ gmonth&
+ operator= (const gmonth&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -532,6 +542,11 @@ namespace xsd
*/
gyear (const gyear& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ gyear&
+ operator= (const gyear&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -696,6 +711,11 @@ namespace xsd
*/
gmonth_day (const gmonth_day& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ gmonth_day&
+ operator= (const gmonth_day&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -880,6 +900,11 @@ namespace xsd
*/
gyear_month (const gyear_month& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ gyear_month&
+ operator= (const gyear_month&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -1068,6 +1093,11 @@ namespace xsd
*/
date (const date& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ date&
+ operator= (const date&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -1269,6 +1299,11 @@ namespace xsd
*/
time (const time& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ time&
+ operator= (const time&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -1493,6 +1528,11 @@ namespace xsd
virtual date_time*
_clone (flags f = 0, container* c = 0) const;
+#ifdef XSD_CXX11
+ date_time&
+ operator= (const date_time&) = default;
+#endif
+
/**
* @brief Create an instance from a data representation
* stream.
@@ -1723,6 +1763,11 @@ namespace xsd
*/
duration (const duration& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ duration&
+ operator= (const duration&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
diff --git a/libxsd/xsd/cxx/tree/elements.hxx b/libxsd/xsd/cxx/tree/elements.hxx
index be8fbeb..cff1ada 100644
--- a/libxsd/xsd/cxx/tree/elements.hxx
+++ b/libxsd/xsd/cxx/tree/elements.hxx
@@ -1254,6 +1254,11 @@ namespace xsd
*/
simple_type (const simple_type& x, flags f = 0, container* c = 0);
+#ifdef XSD_CXX11
+ simple_type&
+ operator= (const simple_type&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -1617,6 +1622,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ fundamental_base&
+ operator= (const fundamental_base&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
diff --git a/libxsd/xsd/cxx/tree/list.hxx b/libxsd/xsd/cxx/tree/list.hxx
index f83297a..c44c882 100644
--- a/libxsd/xsd/cxx/tree/list.hxx
+++ b/libxsd/xsd/cxx/tree/list.hxx
@@ -62,6 +62,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ list&
+ operator= (const list&) = default;
+#endif
+
public:
list (const xercesc::DOMElement&, flags = 0, container* c = 0);
@@ -112,6 +117,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ list&
+ operator= (const list&) = default;
+#endif
+
public:
list (const xercesc::DOMElement&, flags = 0, container* c = 0);
diff --git a/libxsd/xsd/cxx/tree/type-factory-map.hxx b/libxsd/xsd/cxx/tree/type-factory-map.hxx
index e20acfe..d52982f 100644
--- a/libxsd/xsd/cxx/tree/type-factory-map.hxx
+++ b/libxsd/xsd/cxx/tree/type-factory-map.hxx
@@ -150,11 +150,14 @@ namespace xsd
//
//
- template<unsigned long id, typename C, typename T>
+ template<unsigned long id, typename C>
struct element_factory_initializer
{
+ typedef typename type_factory_map<C>::factory factory;
+
element_factory_initializer (const C* root_name, const C* root_ns,
- const C* subst_name, const C* subst_ns);
+ const C* subst_name, const C* subst_ns,
+ factory);
~element_factory_initializer ();
diff --git a/libxsd/xsd/cxx/tree/type-factory-map.txx b/libxsd/xsd/cxx/tree/type-factory-map.txx
index 1eddb25..5a9dc38 100644
--- a/libxsd/xsd/cxx/tree/type-factory-map.txx
+++ b/libxsd/xsd/cxx/tree/type-factory-map.txx
@@ -302,6 +302,9 @@ namespace xsd
if (i != element_map_.end ())
{
+ // Note that we may find an abstract element in which case the
+ // returned factory will be NULL.
+ //
f = find_substitution (i->second, qn);
}
}
@@ -455,21 +458,22 @@ namespace xsd
//
//
- template<unsigned long id, typename C, typename T>
- element_factory_initializer<id, C, T>::
+ template<unsigned long id, typename C>
+ element_factory_initializer<id, C>::
element_factory_initializer (const C* root_name, const C* root_ns,
- const C* subst_name, const C* subst_ns)
+ const C* subst_name, const C* subst_ns,
+ factory f)
: 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>);
+ f);
}
- template<unsigned long id, typename C, typename T>
- element_factory_initializer<id, C, T>::
+ template<unsigned long id, typename C>
+ element_factory_initializer<id, C>::
~element_factory_initializer ()
{
type_factory_map_instance<id, C> ().unregister_element (
diff --git a/libxsd/xsd/cxx/tree/type-serializer-map.hxx b/libxsd/xsd/cxx/tree/type-serializer-map.hxx
index 38b2fb9..50869b5 100644
--- a/libxsd/xsd/cxx/tree/type-serializer-map.hxx
+++ b/libxsd/xsd/cxx/tree/type-serializer-map.hxx
@@ -216,8 +216,11 @@ namespace xsd
template<unsigned long id, typename C, typename T>
struct element_serializer_initializer
{
+ typedef typename type_serializer_map<C>::serializer serializer;
+
element_serializer_initializer (const C* root_name, const C* root_ns,
- const C* subst_name, const C* subst_ns);
+ const C* subst_name, const C* subst_ns,
+ serializer);
~element_serializer_initializer ();
diff --git a/libxsd/xsd/cxx/tree/type-serializer-map.txx b/libxsd/xsd/cxx/tree/type-serializer-map.txx
index 1acdad2..a6c690a 100644
--- a/libxsd/xsd/cxx/tree/type-serializer-map.txx
+++ b/libxsd/xsd/cxx/tree/type-serializer-map.txx
@@ -550,14 +550,21 @@ namespace xsd
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)
+ const C* subst_name, const C* subst_ns,
+ serializer s)
: root_name_ (root_name), root_ns_ (root_ns)
{
+ // Note that we still have to use real typeid (instead of, say, NULL)
+ // for abstract elements to make sure we have separate entries for
+ // each of them. We can assume that such a typeid can never be looked
+ // up (since it's impossible to instantiate the corresponding abstract
+ // type).
+ //
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>);
+ s);
}
template<unsigned long id, typename C, typename T>
diff --git a/libxsd/xsd/cxx/tree/types.hxx b/libxsd/xsd/cxx/tree/types.hxx
index 34eabd9..0790997 100644
--- a/libxsd/xsd/cxx/tree/types.hxx
+++ b/libxsd/xsd/cxx/tree/types.hxx
@@ -268,6 +268,18 @@ namespace xsd
base () = x;
return *this;
}
+
+ public:
+ /**
+ * @brief Explicitly "cast" to the base string type.
+ *
+ * @return A const reference to the instance as the base string type.
+ */
+ const std::basic_string<C>&
+ base_string () const
+ {
+ return *this;
+ }
};
/**
@@ -1078,6 +1090,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ nmtokens&
+ operator= (const nmtokens&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -2559,6 +2576,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ idrefs&
+ operator= (const idrefs&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -2867,6 +2889,18 @@ namespace xsd
return *this;
}
+ public:
+ /**
+ * @brief Explicitly "cast" to the base string type.
+ *
+ * @return A const reference to the instance as the base string type.
+ */
+ const std::basic_string<C>&
+ base_string () const
+ {
+ return *this;
+ }
+
protected:
//@cond
@@ -2967,6 +3001,11 @@ namespace xsd
//
}
+#ifdef XSD_CXX11
+ qname&
+ operator= (const qname&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*
@@ -3849,6 +3888,11 @@ namespace xsd
{
}
+#ifdef XSD_CXX11
+ entities&
+ operator= (const entities&) = default;
+#endif
+
/**
* @brief Copy the instance polymorphically.
*