diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2009-09-17 07:15:29 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2009-09-17 07:15:29 +0200 |
commit | f0510d2f90467de8e8f260b47d79a9baaf9bef17 (patch) | |
tree | 0b9929946f06a9cbe9b9e8f2a7600dae4e048f79 /libxsd/xsd/cxx/parser/substitution-map.txx |
Start tracking XSD with git
Diffstat (limited to 'libxsd/xsd/cxx/parser/substitution-map.txx')
-rw-r--r-- | libxsd/xsd/cxx/parser/substitution-map.txx | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/libxsd/xsd/cxx/parser/substitution-map.txx b/libxsd/xsd/cxx/parser/substitution-map.txx new file mode 100644 index 0000000..c9d4cb1 --- /dev/null +++ b/libxsd/xsd/cxx/parser/substitution-map.txx @@ -0,0 +1,76 @@ +// file : xsd/cxx/parser/substitution-map.txx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsd +{ + namespace cxx + { + namespace parser + { + template <typename C> + bool substitution_map<C>:: + check_ (const ro_string<C>& ns, + const ro_string<C>& name, + const C* root_ns, + const C* root_name, + const ro_string<C>** type) const + { + key k (ns, name); + typename map::const_iterator i (map_.find (k)); + + if (i == map_.end ()) + return false; + + const value& v (i->second); + + bool r (false); + + if (v.name () == root_name && v.ns () == root_ns) + r = true; + else + r = check_ (v.ns (), v.name (), root_ns, root_name, 0); + + if (r && type != 0 && *type == 0) + *type = &v.type (); + + return r; + } + + // substitution_map_init + // + template<typename C> + substitution_map_init<C>:: + substitution_map_init () + { + if (count == 0) + map = new substitution_map<C>; + + ++count; + } + + template<typename C> + substitution_map_init<C>:: + ~substitution_map_init () + { + if (--count == 0) + delete map; + } + + // substitution_map_entry + // + template<typename C> + substitution_map_entry<C>:: + substitution_map_entry (const C* member_ns, + const C* member_name, + const C* root_ns, + const C* root_name, + const C* member_type) + { + substitution_map_instance<C> ().insert ( + member_ns, member_name, root_ns, root_name, member_type); + } + } + } +} |