// file : xsd/cxx/parser/validating/inheritance-map.hxx // author : Boris Kolpackov // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX #define XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX #include #include // std::size_t #include namespace xsd { namespace cxx { namespace parser { namespace validating { template struct string_comparison { bool operator() (const C* x, const C* y) const { ro_string s (x); return s.compare (y) < 0; } }; template struct inheritance_map { void insert (const C* derived, const C* base) { map_[derived] = base; } void erase (const C* derived) { map_.erase (derived); } bool check (const C* derived, const ro_string& base) const; private: typedef std::map > map; map map_; }; // Translation unit initializer. // template struct inheritance_map_init { static inheritance_map* map; static std::size_t count; inheritance_map_init (); ~inheritance_map_init (); }; template inheritance_map* inheritance_map_init::map = 0; template std::size_t inheritance_map_init::count = 0; template inline inheritance_map& inheritance_map_instance () { return *inheritance_map_init::map; } // Map entry initializer. // template struct inheritance_map_entry { inheritance_map_entry (const C* derived, const C* base); ~inheritance_map_entry (); private: const C* derived_; }; } } } } #include #endif // XSD_CXX_PARSER_VALIDATING_INHERITANCE_MAP_HXX