aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-10-18 15:47:30 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-10-18 15:47:30 +0200
commit4f35cf6d0dcadae10e504fbc200b5c3856efa4eb (patch)
tree8ac8e43c5ccac7108c931f791ef0811b75212b78 /xsde/cxx
parent61f3b4cb0041f36cd2d9f167a9553f4ef2722819 (diff)
Use a set to calculate the enumerator count
Diffstat (limited to 'xsde/cxx')
-rw-r--r--xsde/cxx/parser/parser-header.cxx16
-rw-r--r--xsde/cxx/serializer/serializer-header.cxx16
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 << "};";