// file : xsd/cxx/tree/element-map.hxx // copyright : Copyright (c) 2005-2014 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_ELEMENT_MAP_HXX #define XSD_CXX_TREE_ELEMENT_MAP_HXX #include #include // std::auto_ptr/unique_ptr #include // std::size_t #include #include // XSD_AUTO_PTR #include #include namespace xsd { namespace cxx { namespace tree { /** * @brief Root element map. * * This class allows uniform parsing/serialization of multiple * root elements via the element_type base class. * * @nosubgrouping */ template class element_map { public: /** * @brief Common base class for all element types. */ typedef tree::element_type element_type; /** * @brief Parse a DOM element. * * @param e A DOM element to parse. * @param f Flags to create the new element object with. * @return An automatic pointer to the new element object. */ static XSD_AUTO_PTR parse (const xercesc::DOMElement& e, flags f = 0); /** * @brief Serialize an element object to a DOM element. * * @param e A DOM element to serialize to. * @param x An element object to serialize. */ static void serialize (xercesc::DOMElement& e, const element_type& x); public: //@cond typedef xml::qualified_name qualified_name; typedef XSD_AUTO_PTR (*parser) (const xercesc::DOMElement&, flags f); typedef void (*serializer) (xercesc::DOMElement&, const element_type&); static void register_parser (const qualified_name&, parser); static void register_serializer (const qualified_name&, serializer); public: struct map_entry { map_entry () : parser_ (0), serializer_ (0) {} parser parser_; serializer serializer_; }; typedef std::map map; static map* map_; static std::size_t count_; private: element_map (); //@endcond }; //@cond template typename element_map::map* element_map::map_ = 0; template std::size_t element_map::count_ = 0; template struct element_map_init { element_map_init (); ~element_map_init (); }; // // template XSD_AUTO_PTR > parser_impl (const xercesc::DOMElement&, flags); template struct parser_init { parser_init (const std::basic_string& name, const std::basic_string& ns); }; // // template void serializer_impl (xercesc::DOMElement&, const element_type&); template struct serializer_init { serializer_init (const std::basic_string& name, const std::basic_string& ns); }; //@endcond } } } #include #endif // XSD_CXX_TREE_ELEMENT_MAP_HXX