diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2020-12-18 18:48:46 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2021-01-13 22:32:43 +0300 |
commit | 2615896faa646e5830abf2c269150e1165c66515 (patch) | |
tree | 7d95978ec0a83094c9462ed4e1f59d42f4ff8ddb /libxsd/libxsd/cxx/tree/element-map.txx | |
parent | 7420f85ea19b0562ffdd8123442f32bc8bac1267 (diff) |
Switch to build2
Diffstat (limited to 'libxsd/libxsd/cxx/tree/element-map.txx')
-rw-r--r-- | libxsd/libxsd/cxx/tree/element-map.txx | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/libxsd/libxsd/cxx/tree/element-map.txx b/libxsd/libxsd/cxx/tree/element-map.txx new file mode 100644 index 0000000..fba9206 --- /dev/null +++ b/libxsd/libxsd/cxx/tree/element-map.txx @@ -0,0 +1,69 @@ +// file : libxsd/cxx/tree/element-map.txx +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // element_map + // + template <typename C, typename T> + void element_map<C, T>:: + register_parser (const qualified_name& n, parser p) + { + (*map_)[n].parser_ = p; + } + + template <typename C, typename T> + void element_map<C, T>:: + register_serializer (const qualified_name& n, serializer s) + { + (*map_)[n].serializer_ = s; + } + + // element_map_init + // + template <typename C, typename T> + element_map_init<C, T>:: + element_map_init () + { + if (element_map<C, T>::count_ == 0) + element_map<C, T>::map_ = new typename element_map<C, T>::map; + + ++element_map<C, T>::count_; + } + + template <typename C, typename T> + element_map_init<C, T>:: + ~element_map_init () + { + if (--element_map<C, T>::count_ == 0) + delete element_map<C, T>::map_; + } + + // parser_init + // + template<typename T, typename C, typename B> + parser_init<T, C, B>:: + parser_init (const std::basic_string<C>& name, + const std::basic_string<C>& ns) + { + element_map<C, B>::register_parser ( + xml::qualified_name<C> (name, ns), &parser_impl<T, C, B>); + } + + // serializer_init + // + template<typename T, typename C, typename B> + serializer_init<T, C, B>:: + serializer_init (const std::basic_string<C>& name, + const std::basic_string<C>& ns) + { + element_map<C, B>::register_serializer ( + xml::qualified_name<C> (name, ns), &serializer_impl<T, C, B>); + } + } + } +} |