From 4f35cf6d0dcadae10e504fbc200b5c3856efa4eb Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 18 Oct 2010 15:47:30 +0200 Subject: Use a set to calculate the enumerator count --- xsde/cxx/parser/parser-header.cxx | 16 +++++++++++----- xsde/cxx/serializer/serializer-header.cxx | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) (limited to 'xsde/cxx') 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 +#include + #include #include @@ -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 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 +#include + #include #include @@ -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 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 << "};"; -- cgit v1.1