diff options
Diffstat (limited to 'libxsd/xsd/cxx/tree')
-rw-r--r-- | libxsd/xsd/cxx/tree/type-factory-map.hxx | 7 | ||||
-rw-r--r-- | libxsd/xsd/cxx/tree/type-factory-map.txx | 16 |
2 files changed, 15 insertions, 8 deletions
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 ( |