diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2021-12-10 11:53:35 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2021-12-10 11:53:35 +0200 |
commit | 87140ae9f841798752ae4e5422698a4090f16329 (patch) | |
tree | fa55c77eadbed14a160d34b7a03870cd3db3fc14 /libxsd | |
parent | 2a700917616a2cc0e751adb76d8f71348a80b0d8 (diff) |
Omit instantiating serializers for abstract elements, similar to parsing
Diffstat (limited to 'libxsd')
-rw-r--r-- | libxsd/xsd/cxx/tree/type-serializer-map.hxx | 5 | ||||
-rw-r--r-- | libxsd/xsd/cxx/tree/type-serializer-map.txx | 11 |
2 files changed, 13 insertions, 3 deletions
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> |