diff options
Diffstat (limited to 'xsde/cxx/parser/parser-header.cxx')
-rw-r--r-- | xsde/cxx/parser/parser-header.cxx | 16 |
1 files changed, 11 insertions, 5 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 << "};"; |