// file : xsd/cxx/parser/validating/inheritance-map.txx // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file namespace xsd { namespace cxx { namespace parser { namespace validating { template bool inheritance_map:: check (const C* derived, const ro_string& base) const { if (base == derived) return true; typename map::const_iterator i (map_.find (derived)); if (i != map_.end ()) { if (base == i->second) return true; else return check (i->second, base); } return false; } // inheritance_map_init // template inheritance_map_init:: inheritance_map_init () { if (count == 0) map = new inheritance_map; ++count; } template inheritance_map_init:: ~inheritance_map_init () { if (--count == 0) delete map; } // inheritance_map_entry // 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_); } } } } }