C++/Tree Mapping Runtime Library
element-map.hxx
1// file : xsd/cxx/tree/element-map.hxx
2// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
3
4#ifndef XSD_CXX_TREE_ELEMENT_MAP_HXX
5#define XSD_CXX_TREE_ELEMENT_MAP_HXX
6
7#include <map>
8#include <memory> // std::auto_ptr/unique_ptr
9#include <cstddef> // std::size_t
10#include <string>
11
12#include <xsd/cxx/config.hxx> // XSD_AUTO_PTR
13
14#include <xsd/cxx/xml/qualified-name.hxx>
16
17namespace xsd
18{
19 namespace cxx
20 {
21 namespace tree
22 {
31 template <typename C, typename T>
33 {
34 public:
39
47 static XSD_AUTO_PTR<element_type>
48 parse (const xercesc::DOMElement& e, flags f = 0);
49
56 static void
57 serialize (xercesc::DOMElement& e, const element_type& x);
58
59 public:
60 //@cond
61
62 typedef xml::qualified_name<C> qualified_name;
63
64 typedef XSD_AUTO_PTR<element_type>
65 (*parser) (const xercesc::DOMElement&, flags f);
66
67 typedef void
68 (*serializer) (xercesc::DOMElement&, const element_type&);
69
70 static void
71 register_parser (const qualified_name&, parser);
72
73 static void
74 register_serializer (const qualified_name&, serializer);
75
76 public:
77 struct map_entry
78 {
79 map_entry () : parser_ (0), serializer_ (0) {}
80
81 parser parser_;
82 serializer serializer_;
83 };
84
85 typedef
86 std::map<qualified_name, map_entry>
87 map;
88
89 static map* map_;
90 static std::size_t count_;
91
92 private:
93 element_map ();
94
95 //@endcond
96 };
97
98 //@cond
99
100 template <typename C, typename T>
101 typename element_map<C, T>::map* element_map<C, T>::map_ = 0;
102
103 template <typename C, typename T>
104 std::size_t element_map<C, T>::count_ = 0;
105
106 template <typename C, typename T>
107 struct element_map_init
108 {
109 element_map_init ();
110 ~element_map_init ();
111 };
112
113 //
114 //
115 template<typename T, typename C, typename B>
116 XSD_AUTO_PTR<element_type<C, B> >
117 parser_impl (const xercesc::DOMElement&, flags);
118
119 template<typename T, typename C, typename B>
120 struct parser_init
121 {
122 parser_init (const std::basic_string<C>& name,
123 const std::basic_string<C>& ns);
124 };
125
126 //
127 //
128 template<typename T, typename C, typename B>
129 void
130 serializer_impl (xercesc::DOMElement&, const element_type<C, B>&);
131
132 template<typename T, typename C, typename B>
133 struct serializer_init
134 {
135 serializer_init (const std::basic_string<C>& name,
136 const std::basic_string<C>& ns);
137 };
138
139 //@endcond
140 }
141 }
142}
143
144#include <xsd/cxx/tree/element-map.txx>
145
146#endif // XSD_CXX_TREE_ELEMENT_MAP_HXX
Root element map.
Definition element-map.hxx:33
static std::auto_ptr< element_type > parse(const xercesc::DOMElement &e, flags f=0)
Parse a DOM element.
static void serialize(xercesc::DOMElement &e, const element_type &x)
Serialize an element object to a DOM element.
tree::element_type< C, T > element_type
Common base class for all element types.
Definition element-map.hxx:38
Base class for element types.
Definition elements.hxx:1412
Parsing and serialization flags.
Definition elements.hxx:76
Contains C++ class definitions for XML Schema anyType and anySimpleType types as well as supporting c...

Copyright © 2005-2023 Code Synthesis.