// file : xsd/cxx/parser/map.hxx // copyright : Copyright (c) 2005-2017 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_PARSER_MAP_HXX #define XSD_CXX_PARSER_MAP_HXX #include #include #include #include namespace xsd { namespace cxx { namespace parser { // Parser map. Used in the polymorphic document parsing. // template struct parser_map { virtual ~parser_map (); // The type argument is the type name and namespace from the // xsi:type attribute or substitution group map in the form // " " with the space and namespace part // absent if the type does not have a namespace. // virtual parser_base* find (const ro_string& type) const = 0; }; // Parser map implementation. // template struct parser_map_impl: parser_map { parser_map_impl (); void insert (parser_base&); virtual parser_base* find (const ro_string& type) const; private: parser_map_impl (const parser_map_impl&); parser_map_impl& operator= (const parser_map_impl&); private: struct string_comparison { bool operator() (const C* x, const C* y) const { ro_string s (x); return s.compare (y) < 0; } }; typedef std::map*, string_comparison> map; map map_; }; } } } #include #include #endif // XSD_CXX_PARSER_MAP_HXX