diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-10-18 15:47:30 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-10-18 15:47:30 +0200 |
commit | 4f35cf6d0dcadae10e504fbc200b5c3856efa4eb (patch) | |
tree | 8ac8e43c5ccac7108c931f791ef0811b75212b78 /xsde/cxx | |
parent | 61f3b4cb0041f36cd2d9f167a9553f4ef2722819 (diff) |
Use a set to calculate the enumerator count
Diffstat (limited to 'xsde/cxx')
-rw-r--r-- | xsde/cxx/parser/parser-header.cxx | 16 | ||||
-rw-r--r-- | xsde/cxx/serializer/serializer-header.cxx | 16 |
2 files changed, 22 insertions, 10 deletions
diff --git a/xsde/cxx/parser/parser-header.cxx b/xsde/cxx/parser/parser-header.cxx index bf9e31e..6e7dfe2 100644 --- a/xsde/cxx/parser/parser-header.cxx +++ b/xsde/cxx/parser/parser-header.cxx @@ -5,6 +5,8 @@ #include <cxx/parser/parser-header.hxx> +#include <cult/containers/set.hxx> + #include <xsd-frontend/semantic-graph.hxx> #include <xsd-frontend/traversal.hxx> @@ -105,16 +107,20 @@ namespace CXX if (enum_facets) { - UnsignedLong enum_count (0); + // Some schemas have duplicate enumerators so we have to create + // a set out of them in order get the accurate count. + // + typedef Cult::Containers::Set<String> Enums; + Enums enums; - for (Type::NamesIterator i (e.names_begin ()), end (e.names_end ()); - i != end; ++i) - ++enum_count; + for (Type::NamesIterator i (e.names_begin ()), + end (e.names_end ()); i != end; ++i) + enums.insert (i->name ()); os << endl << "protected:" << endl << "static const char* const _xsde_" << name << "_enums_[" << - enum_count << "UL];"; + enums.size () << "UL];"; } os << "};"; diff --git a/xsde/cxx/serializer/serializer-header.cxx b/xsde/cxx/serializer/serializer-header.cxx index 2d65cf2..a849946 100644 --- a/xsde/cxx/serializer/serializer-header.cxx +++ b/xsde/cxx/serializer/serializer-header.cxx @@ -5,6 +5,8 @@ #include <cxx/serializer/serializer-header.hxx> +#include <cult/containers/set.hxx> + #include <xsd-frontend/semantic-graph.hxx> #include <xsd-frontend/traversal.hxx> @@ -366,16 +368,20 @@ namespace CXX if (enum_facets) { - UnsignedLong enum_count (0); + // Some schemas have duplicate enumerators so we have to create + // a set out of them in order get the accurate count. + // + typedef Cult::Containers::Set<String> Enums; + Enums enums; - for (Type::NamesIterator i (e.names_begin ()), end (e.names_end ()); - i != end; ++i) - ++enum_count; + for (Type::NamesIterator i (e.names_begin ()), + end (e.names_end ()); i != end; ++i) + enums.insert (i->name ()); os << endl << "protected:" << endl << "static const char* const _xsde_" << name << "_enums_[" << - enum_count << "UL];"; + enums.size () << "UL];"; } os << "};"; |