1 // file : xsd/cxx/tree/element-map.txx 2 // copyright : Copyright (c) 2005-2017 Code Synthesis Tools CC 3 // license : GNU GPL v2 + exceptions; see accompanying LICENSE file 4 5 namespace xsd 6 { 7 namespace cxx 8 { 9 namespace tree 10 { 11 // element_map 12 // 13 template <typename C, typename T> 14 void element_map<C, T>:: register_parser(const qualified_name & n,parser p)15 register_parser (const qualified_name& n, parser p) 16 { 17 (*map_)[n].parser_ = p; 18 } 19 20 template <typename C, typename T> 21 void element_map<C, T>:: register_serializer(const qualified_name & n,serializer s)22 register_serializer (const qualified_name& n, serializer s) 23 { 24 (*map_)[n].serializer_ = s; 25 } 26 27 // element_map_init 28 // 29 template <typename C, typename T> 30 element_map_init<C, T>:: element_map_init()31 element_map_init () 32 { 33 if (element_map<C, T>::count_ == 0) 34 element_map<C, T>::map_ = new typename element_map<C, T>::map; 35 36 ++element_map<C, T>::count_; 37 } 38 39 template <typename C, typename T> 40 element_map_init<C, T>:: ~element_map_init()41 ~element_map_init () 42 { 43 if (--element_map<C, T>::count_ == 0) 44 delete element_map<C, T>::map_; 45 } 46 47 // parser_init 48 // 49 template<typename T, typename C, typename B> 50 parser_init<T, C, B>:: parser_init(const std::basic_string<C> & name,const std::basic_string<C> & ns)51 parser_init (const std::basic_string<C>& name, 52 const std::basic_string<C>& ns) 53 { 54 element_map<C, B>::register_parser ( 55 xml::qualified_name<C> (name, ns), &parser_impl<T, C, B>); 56 } 57 58 // serializer_init 59 // 60 template<typename T, typename C, typename B> 61 serializer_init<T, C, B>:: serializer_init(const std::basic_string<C> & name,const std::basic_string<C> & ns)62 serializer_init (const std::basic_string<C>& name, 63 const std::basic_string<C>& ns) 64 { 65 element_map<C, B>::register_serializer ( 66 xml::qualified_name<C> (name, ns), &serializer_impl<T, C, B>); 67 } 68 } 69 } 70 } 71