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