From ee4eb695119bce96515b330f9fc83ddd67da5c62 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 2 Dec 2009 12:26:05 +0200 Subject: Implement de-registering polymorphic type information This is required for DLL/shared library unloading. --- libxsd/xsd/cxx/parser/validating/inheritance-map.hxx | 11 ++++++++++- libxsd/xsd/cxx/parser/validating/inheritance-map.txx | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'libxsd/xsd/cxx/parser/validating') diff --git a/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx b/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx index ebd1d03..b3fc35a 100644 --- a/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx +++ b/libxsd/xsd/cxx/parser/validating/inheritance-map.hxx @@ -39,6 +39,12 @@ namespace xsd map_[derived] = base; } + void + erase (const C* derived) + { + map_.erase (derived); + } + bool check (const C* derived, const ro_string& base) const; @@ -80,6 +86,10 @@ namespace xsd struct inheritance_map_entry { inheritance_map_entry (const C* derived, const C* base); + ~inheritance_map_entry (); + + private: + const C* derived_; }; } } @@ -89,4 +99,3 @@ namespace xsd #include #endif // XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX - diff --git a/libxsd/xsd/cxx/parser/validating/inheritance-map.txx b/libxsd/xsd/cxx/parser/validating/inheritance-map.txx index 5e70409..7982011 100644 --- a/libxsd/xsd/cxx/parser/validating/inheritance-map.txx +++ b/libxsd/xsd/cxx/parser/validating/inheritance-map.txx @@ -56,9 +56,17 @@ namespace xsd template inheritance_map_entry:: inheritance_map_entry (const C* derived, const C* base) + : derived_ (derived) { inheritance_map_instance ().insert (derived, base); } + + template + inheritance_map_entry:: + ~inheritance_map_entry () + { + inheritance_map_instance ().erase (derived_); + } } } } -- cgit v1.1