diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-07-27 11:58:50 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-07-27 11:58:50 +0200 |
commit | 72c8c02e5c841da2ec07a74d0a385c89209937a4 (patch) | |
tree | 037e08c35e824209fa7bf721d76c7f65bbb788cd /xsd/cxx/elements.hxx | |
parent | aa6aee72b74f6d1f0eece7d2f57ca7d71173214e (diff) |
Make sure we don't process sourced schemas more than once
Diffstat (limited to 'xsd/cxx/elements.hxx')
-rw-r--r-- | xsd/cxx/elements.hxx | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/xsd/cxx/elements.hxx b/xsd/cxx/elements.hxx index b0a38d1..f9fa619 100644 --- a/xsd/cxx/elements.hxx +++ b/xsd/cxx/elements.hxx @@ -438,6 +438,21 @@ namespace CXX return 0; } + // Sources traverser that goes into each schema only once. + // + struct Sources: Traversal::Sources + { + virtual void + traverse (SemanticGraph::Sources& s) + { + if (schemas_.insert (&s.schema ()).second) + Traversal::Sources::traverse (s); + } + + private: + Cult::Containers::Set<SemanticGraph::Schema*> schemas_; + }; + // Usual namespace mapping. // struct Namespace: Traversal::Namespace @@ -476,7 +491,6 @@ namespace CXX ScopeTracker* st_; }; - // // template <typename X> |