aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/parser/parser-header.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/parser/parser-header.cxx')
-rw-r--r--xsde/cxx/parser/parser-header.cxx16
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 << "};";