From f0510d2f90467de8e8f260b47d79a9baaf9bef17 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 17 Sep 2009 07:15:29 +0200 Subject: Start tracking XSD with git --- libxsd/xsd/cxx/tree/element-map.txx | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 libxsd/xsd/cxx/tree/element-map.txx (limited to 'libxsd/xsd/cxx/tree/element-map.txx') diff --git a/libxsd/xsd/cxx/tree/element-map.txx b/libxsd/xsd/cxx/tree/element-map.txx new file mode 100644 index 0000000..2e40b81 --- /dev/null +++ b/libxsd/xsd/cxx/tree/element-map.txx @@ -0,0 +1,71 @@ +// file : xsd/cxx/tree/element-map.txx +// author : Boris Kolpackov +// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace tree + { + // element_map + // + template + void element_map:: + register_parser (const qualified_name& n, parser p) + { + (*map_)[n].parser_ = p; + } + + template + void element_map:: + register_serializer (const qualified_name& n, serializer s) + { + (*map_)[n].serializer_ = s; + } + + // element_map_init + // + template + element_map_init:: + element_map_init () + { + if (element_map::count_ == 0) + element_map::map_ = new typename element_map::map; + + ++element_map::count_; + } + + template + element_map_init:: + ~element_map_init () + { + if (--element_map::count_ == 0) + delete element_map::map_; + } + + // parser_init + // + template + parser_init:: + parser_init (const std::basic_string& name, + const std::basic_string& ns) + { + element_map::register_parser ( + xml::qualified_name (name, ns), &parser_impl); + } + + // serializer_init + // + template + serializer_init:: + serializer_init (const std::basic_string& name, + const std::basic_string& ns) + { + element_map::register_serializer ( + xml::qualified_name (name, ns), &serializer_impl); + } + } + } +} -- cgit v1.1