summaryrefslogtreecommitdiff
path: root/libxsd-frontend/xsd-frontend/traversal
diff options
context:
space:
mode:
authorJörg Frings-Fürst <jff@merkur>2014-05-18 16:08:14 +0200
committerJörg Frings-Fürst <jff@merkur>2014-05-18 16:08:14 +0200
commita15cf65c44d5c224169c32ef5495b68c758134b7 (patch)
tree3419f58fc8e1b315ba8171910ee044c5d467c162 /libxsd-frontend/xsd-frontend/traversal
Imported Upstream version 3.3.0.2upstream/3.3.0.2
Diffstat (limited to 'libxsd-frontend/xsd-frontend/traversal')
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx22
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/any.hxx22
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx30
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx30
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/attribute.cxx48
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/attribute.hxx41
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/complex.cxx64
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/complex.hxx45
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/compositors.cxx165
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/compositors.hxx136
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/element-group.cxx43
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/element-group.hxx36
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/element.cxx48
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/element.hxx39
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/elements.cxx77
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/elements.hxx480
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/elements.txx11
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/enumeration.cxx91
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/enumeration.hxx60
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/fundamental.cxx13
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/fundamental.hxx234
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/list.cxx48
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/list.hxx39
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/namespace.cxx13
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/namespace.hxx45
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/particle.cxx31
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/particle.hxx30
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/schema.cxx13
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/schema.hxx150
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/union.cxx48
-rw-r--r--libxsd-frontend/xsd-frontend/traversal/union.hxx39
31 files changed, 2191 insertions, 0 deletions
diff --git a/libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx b/libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx
new file mode 100644
index 0000000..55ed999
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx
@@ -0,0 +1,22 @@
+// file : xsd-frontend/traversal/any-attribute.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ANY_ATTRIBUTE_HXX
+#define XSD_FRONTEND_TRAVERSAL_ANY_ATTRIBUTE_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/any-attribute.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ typedef
+ Node<SemanticGraph::AnyAttribute>
+ AnyAttribute;
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ANY_ATTRIBUTE_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/any.hxx b/libxsd-frontend/xsd-frontend/traversal/any.hxx
new file mode 100644
index 0000000..505d336
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/any.hxx
@@ -0,0 +1,22 @@
+// file : xsd-frontend/traversal/any.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ANY_HXX
+#define XSD_FRONTEND_TRAVERSAL_ANY_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/any.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ typedef
+ Node<SemanticGraph::Any>
+ Any;
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ANY_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx b/libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx
new file mode 100644
index 0000000..e5c2237
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx
@@ -0,0 +1,30 @@
+// file : xsd-frontend/traversal/attribute-group.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/attribute-group.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void AttributeGroup::
+ traverse (Type& g)
+ {
+ pre (g);
+ names (g);
+ post (g);
+ }
+
+ Void AttributeGroup::
+ pre (Type&)
+ {
+ }
+
+ Void AttributeGroup::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx b/libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx
new file mode 100644
index 0000000..cd01a97
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx
@@ -0,0 +1,30 @@
+// file : xsd-frontend/traversal/attribute-group.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_GROUP_HXX
+#define XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_GROUP_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/attribute-group.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct AttributeGroup: ScopeTemplate<SemanticGraph::AttributeGroup>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_GROUP_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute.cxx b/libxsd-frontend/xsd-frontend/traversal/attribute.cxx
new file mode 100644
index 0000000..c051667
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/attribute.cxx
@@ -0,0 +1,48 @@
+// file : xsd-frontend/traversal/attribute.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/attribute.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void Attribute::
+ traverse (Type& a)
+ {
+ pre (a);
+ belongs (a);
+ name (a);
+ post (a);
+ }
+
+ Void Attribute::
+ pre (Type&)
+ {
+ }
+
+ Void Attribute::
+ belongs (Type& a, EdgeDispatcherBase& d)
+ {
+ d.dispatch (a.belongs ());
+ }
+
+ Void Attribute::
+ belongs (Type& a)
+ {
+ belongs (a, *this);
+ }
+
+ Void Attribute::
+ name (Type&)
+ {
+ }
+
+ Void Attribute::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/attribute.hxx b/libxsd-frontend/xsd-frontend/traversal/attribute.hxx
new file mode 100644
index 0000000..feb6b31
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/attribute.hxx
@@ -0,0 +1,41 @@
+// file : xsd-frontend/traversal/attribute.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_HXX
+#define XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+
+#include <xsd-frontend/semantic-graph/attribute.hxx>
+
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Attribute : Node<SemanticGraph::Attribute>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ belongs (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ belongs (Type&);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ATTRIBUTE_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/complex.cxx b/libxsd-frontend/xsd-frontend/traversal/complex.cxx
new file mode 100644
index 0000000..d6cfc41
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/complex.cxx
@@ -0,0 +1,64 @@
+// file : xsd-frontend/traversal/complex.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/complex.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void Complex::
+ traverse (Type& c)
+ {
+ pre (c);
+ name (c);
+ inherits (c);
+ names (c);
+ contains_compositor (c);
+ post (c);
+ }
+
+ Void Complex::
+ pre (Type&)
+ {
+ }
+
+ Void Complex::
+ name (Type&)
+ {
+ }
+
+ Void Complex::
+ inherits (Type& c)
+ {
+ inherits (c, *this);
+ }
+
+ Void Complex::
+ inherits (Type& c, EdgeDispatcherBase& d)
+ {
+ if (c.inherits_p ())
+ d.dispatch (c.inherits ());
+ }
+
+ Void Complex::
+ contains_compositor (Type& c)
+ {
+ contains_compositor (c, *this);
+ }
+
+ Void Complex::
+ contains_compositor (Type& c, EdgeDispatcherBase& d)
+ {
+ if (c.contains_compositor_p ())
+ d.dispatch (c.contains_compositor ());
+ }
+
+ Void Complex::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/complex.hxx b/libxsd-frontend/xsd-frontend/traversal/complex.hxx
new file mode 100644
index 0000000..3dd7e7b
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/complex.hxx
@@ -0,0 +1,45 @@
+// file : xsd-frontend/traversal/complex.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_COMPLEX_HXX
+#define XSD_FRONTEND_TRAVERSAL_COMPLEX_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/complex.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Complex : ScopeTemplate<SemanticGraph::Complex>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ inherits (Type&);
+
+ Void
+ inherits (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ contains_compositor (Type&);
+
+ Void
+ contains_compositor (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_COMPLEX_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/compositors.cxx b/libxsd-frontend/xsd-frontend/traversal/compositors.cxx
new file mode 100644
index 0000000..d3089fc
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/compositors.cxx
@@ -0,0 +1,165 @@
+// file : xsd-frontend/traversal/compositors.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/compositors.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ // ContainsParticle
+ //
+ Void ContainsParticle::
+ traverse (Type& c)
+ {
+ dispatch (c.particle ());
+ }
+
+
+ // ContainsCompositor
+ //
+ Void ContainsCompositor::
+ traverse (Type& c)
+ {
+ dispatch (c.compositor ());
+ }
+
+
+ // Compositor
+ //
+ Void Compositor::
+ traverse (Type& c)
+ {
+ pre (c);
+ contains (c);
+ post (c);
+ }
+
+ Void Compositor::
+ pre (Type&)
+ {
+ }
+
+ Void Compositor::
+ contains (Type& c)
+ {
+ iterate_and_dispatch (
+ c.contains_begin (), c.contains_end (), edge_traverser ());
+ }
+
+ Void Compositor::
+ contains (Type& c, EdgeDispatcherBase& d)
+ {
+ iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
+ }
+
+ Void Compositor::
+ post (Type&)
+ {
+ }
+
+
+ // All
+ //
+ Void All::
+ traverse (Type& c)
+ {
+ pre (c);
+ contains (c);
+ post (c);
+ }
+
+ Void All::
+ pre (Type&)
+ {
+ }
+
+ Void All::
+ contains (Type& c)
+ {
+ iterate_and_dispatch (
+ c.contains_begin (), c.contains_end (), edge_traverser ());
+ }
+
+ Void All::
+ contains (Type& c, EdgeDispatcherBase& d)
+ {
+ iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
+ }
+
+ Void All::
+ post (Type&)
+ {
+ }
+
+
+ // Choice
+ //
+ Void Choice::
+ traverse (Type& c)
+ {
+ pre (c);
+ contains (c);
+ post (c);
+ }
+
+ Void Choice::
+ pre (Type&)
+ {
+ }
+
+ Void Choice::
+ contains (Type& c)
+ {
+ iterate_and_dispatch (
+ c.contains_begin (), c.contains_end (), edge_traverser ());
+ }
+
+ Void Choice::
+ contains (Type& c, EdgeDispatcherBase& d)
+ {
+ iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
+ }
+
+ Void Choice::
+ post (Type&)
+ {
+ }
+
+
+ // Sequence
+ //
+ Void Sequence::
+ traverse (Type& c)
+ {
+ pre (c);
+ contains (c);
+ post (c);
+ }
+
+ Void Sequence::
+ pre (Type&)
+ {
+ }
+
+ Void Sequence::
+ contains (Type& c)
+ {
+ iterate_and_dispatch (
+ c.contains_begin (), c.contains_end (), edge_traverser ());
+ }
+
+ Void Sequence::
+ contains (Type& c, EdgeDispatcherBase& d)
+ {
+ iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
+ }
+
+ Void Sequence::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/compositors.hxx b/libxsd-frontend/xsd-frontend/traversal/compositors.hxx
new file mode 100644
index 0000000..e81460b
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/compositors.hxx
@@ -0,0 +1,136 @@
+// file : xsd-frontend/traversal/compositors.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_COMPOSITORS_HXX
+#define XSD_FRONTEND_TRAVERSAL_COMPOSITORS_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/compositors.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ //
+ //
+ struct ContainsParticle: Edge<SemanticGraph::ContainsParticle>
+ {
+ ContainsParticle ()
+ {
+ }
+
+ ContainsParticle (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type&);
+ };
+
+
+ //
+ //
+ struct ContainsCompositor: Edge<SemanticGraph::ContainsCompositor>
+ {
+ ContainsCompositor ()
+ {
+ }
+
+ ContainsCompositor (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type&);
+ };
+
+ //
+ //
+ struct Compositor : Node<SemanticGraph::Compositor>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ contains (Type&);
+
+ virtual Void
+ contains (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+
+
+ //
+ //
+ struct All : Node<SemanticGraph::All>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ contains (Type&);
+
+ virtual Void
+ contains (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+
+
+ //
+ //
+ struct Choice : Node<SemanticGraph::Choice>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ contains (Type&);
+
+ virtual Void
+ contains (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+
+
+ //
+ //
+ struct Sequence : Node<SemanticGraph::Sequence>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ contains (Type&);
+
+ virtual Void
+ contains (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_COMPOSITORS_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/element-group.cxx b/libxsd-frontend/xsd-frontend/traversal/element-group.cxx
new file mode 100644
index 0000000..cb7a51a
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/element-group.cxx
@@ -0,0 +1,43 @@
+// file : xsd-frontend/traversal/element-group.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/element-group.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void ElementGroup::
+ traverse (Type& g)
+ {
+ pre (g);
+ names (g);
+ contains_compositor (g);
+ post (g);
+ }
+
+ Void ElementGroup::
+ pre (Type&)
+ {
+ }
+
+ Void ElementGroup::
+ contains_compositor (Type& g, EdgeDispatcherBase& d)
+ {
+ d.dispatch (g.contains_compositor ());
+ }
+
+ Void ElementGroup::
+ contains_compositor (Type& g)
+ {
+ contains_compositor (g, *this);
+ }
+
+ Void ElementGroup::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/element-group.hxx b/libxsd-frontend/xsd-frontend/traversal/element-group.hxx
new file mode 100644
index 0000000..8ebe0bd
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/element-group.hxx
@@ -0,0 +1,36 @@
+// file : xsd-frontend/traversal/element-group.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ELEMENT_GROUP_HXX
+#define XSD_FRONTEND_TRAVERSAL_ELEMENT_GROUP_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/element-group.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct ElementGroup: ScopeTemplate<SemanticGraph::ElementGroup>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ contains_compositor (Type&);
+
+ virtual Void
+ contains_compositor (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ELEMENT_GROUP_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/element.cxx b/libxsd-frontend/xsd-frontend/traversal/element.cxx
new file mode 100644
index 0000000..7f296ee
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/element.cxx
@@ -0,0 +1,48 @@
+// file : xsd-frontend/traversal/element.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/element.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void Element::
+ traverse (Type& m)
+ {
+ pre (m);
+ belongs (m);
+ name (m);
+ post (m);
+ }
+
+ Void Element::
+ pre (Type&)
+ {
+ }
+
+ Void Element::
+ belongs (Type& m, EdgeDispatcherBase& d)
+ {
+ d.dispatch (m.belongs ());
+ }
+
+ Void Element::
+ belongs (Type& m)
+ {
+ belongs (m, edge_traverser ());
+ }
+
+ Void Element::
+ name (Type&)
+ {
+ }
+
+ Void Element::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/element.hxx b/libxsd-frontend/xsd-frontend/traversal/element.hxx
new file mode 100644
index 0000000..d5187ad
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/element.hxx
@@ -0,0 +1,39 @@
+// file : xsd-frontend/traversal/element.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ELEMENT_HXX
+#define XSD_FRONTEND_TRAVERSAL_ELEMENT_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/element.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Element : Node<SemanticGraph::Element>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ belongs (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ belongs (Type&);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ELEMENT_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/elements.cxx b/libxsd-frontend/xsd-frontend/traversal/elements.cxx
new file mode 100644
index 0000000..b1c47a0
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/elements.cxx
@@ -0,0 +1,77 @@
+// file : xsd-frontend/traversal/elements.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/elements.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ // Instance
+ //
+ Void Instance::
+ traverse (Type& a)
+ {
+ pre (a);
+ belongs (a);
+ post (a);
+ }
+
+ Void Instance::
+ pre (Type&)
+ {
+ }
+
+ Void Instance::
+ belongs (Type& a, EdgeDispatcherBase& d)
+ {
+ d.dispatch (a.belongs ());
+ }
+
+ Void Instance::
+ belongs (Type& a)
+ {
+ belongs (a, edge_traverser ());
+ }
+
+ Void Instance::
+ post (Type&)
+ {
+ }
+
+
+ // Member
+ //
+ Void Member::
+ traverse (Type& a)
+ {
+ pre (a);
+ belongs (a);
+ post (a);
+ }
+
+ Void Member::
+ pre (Type&)
+ {
+ }
+
+ Void Member::
+ belongs (Type& a, EdgeDispatcherBase& d)
+ {
+ d.dispatch (a.belongs ());
+ }
+
+ Void Member::
+ belongs (Type& a)
+ {
+ belongs (a, edge_traverser ());
+ }
+
+ Void Member::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/elements.hxx b/libxsd-frontend/xsd-frontend/traversal/elements.hxx
new file mode 100644
index 0000000..c405a1b
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/elements.hxx
@@ -0,0 +1,480 @@
+// file : xsd-frontend/traversal/elements.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ELEMENTS_HXX
+#define XSD_FRONTEND_TRAVERSAL_ELEMENTS_HXX
+
+#include <cult/types.hxx>
+
+#include <frontend-elements/traversal.hxx>
+
+#include <xsd-frontend/semantic-graph/elements.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ using namespace Cult::Types;
+
+ namespace Bits
+ {
+ using FrontendElements::Traversal::TraverserBase;
+ using FrontendElements::Traversal::Traverser;
+
+ using FrontendElements::Traversal::DispatcherBase;
+ using FrontendElements::Traversal::Dispatcher;
+
+ }
+
+ typedef Bits::DispatcherBase<SemanticGraph::Node> NodeDispatcherBase;
+ typedef Bits::DispatcherBase<SemanticGraph::Edge> EdgeDispatcherBase;
+
+
+ //
+ //
+ struct NodeBase : virtual Bits::Dispatcher<SemanticGraph::Node>,
+ virtual Bits::Dispatcher<SemanticGraph::Edge>
+ {
+ Void
+ edge_traverser (EdgeDispatcherBase& d)
+ {
+ Bits::Dispatcher<SemanticGraph::Edge>::traverser (d);
+ }
+
+ EdgeDispatcherBase&
+ edge_traverser ()
+ {
+ return *this;
+ }
+
+ public:
+ using Bits::Dispatcher<SemanticGraph::Node>::dispatch;
+ using Bits::Dispatcher<SemanticGraph::Edge>::dispatch;
+
+ using Bits::Dispatcher<SemanticGraph::Node>::map;
+
+ using Bits::Dispatcher<SemanticGraph::Edge>::iterate_and_dispatch;
+ };
+
+
+ //
+ //
+ template <typename T>
+ struct Node : Bits::TraverserBase<SemanticGraph::Node>, virtual NodeBase
+ {
+ typedef
+ T
+ Type;
+
+ Node ()
+ {
+ map (typeid (Type), *this);
+ }
+
+ virtual Void
+ traverse (Type&) = 0;
+
+ virtual Void
+ trampoline (SemanticGraph::Node& i)
+ {
+ traverse (dynamic_cast<Type&> (i));
+ }
+
+ virtual Void
+ trampoline (SemanticGraph::Node const&)
+ {
+ abort ();
+ }
+ };
+
+
+ //
+ //
+ struct EdgeBase : virtual Bits::Dispatcher<SemanticGraph::Edge>,
+ virtual Bits::Dispatcher<SemanticGraph::Node>
+ {
+ Void
+ node_traverser (NodeDispatcherBase& d)
+ {
+ Bits::Dispatcher<SemanticGraph::Node>::traverser (d);
+ }
+
+ NodeDispatcherBase&
+ node_traverser ()
+ {
+ return *this;
+ }
+
+ public:
+ using Bits::Dispatcher<SemanticGraph::Edge>::dispatch;
+ using Bits::Dispatcher<SemanticGraph::Node>::dispatch;
+
+ using Bits::Dispatcher<SemanticGraph::Edge>::map;
+
+ using Bits::Dispatcher<SemanticGraph::Node>::iterate_and_dispatch;
+ };
+
+ template <typename T>
+ struct Edge : Bits::TraverserBase<SemanticGraph::Edge>, virtual EdgeBase
+ {
+ typedef
+ T
+ Type;
+
+ Edge ()
+ {
+ map (typeid (Type), *this);
+ }
+
+ virtual Void
+ traverse (Type&) = 0;
+
+ virtual Void
+ trampoline (SemanticGraph::Edge& i)
+ {
+ traverse (dynamic_cast<Type&> (i));
+ }
+
+ virtual Void
+ trampoline (SemanticGraph::Edge const&)
+ {
+ abort ();
+ }
+ };
+
+ inline
+ EdgeBase&
+ operator>> (NodeBase& n, EdgeBase& e)
+ {
+ n.edge_traverser (e);
+ return e;
+ }
+
+ inline
+ NodeBase&
+ operator>> (EdgeBase& e, NodeBase& n)
+ {
+ e.node_traverser (n);
+ return n;
+ }
+
+ // Edges
+ //
+
+ //
+ //
+ struct Names : Edge<SemanticGraph::Names>
+ {
+ Names ()
+ {
+ }
+
+ Names (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.named ());
+ }
+ };
+
+
+ //
+ //
+ struct Belongs : Edge<SemanticGraph::Belongs>
+ {
+ Belongs ()
+ {
+ }
+
+ Belongs (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.type ());
+ }
+ };
+
+
+ // Nodes
+ //
+
+
+ //
+ //
+ struct Nameable : Node<SemanticGraph::Nameable>
+ {
+ };
+
+
+ //
+ //
+ template <typename T>
+ struct ScopeTemplate : Node<T>
+ {
+ public:
+ virtual Void
+ traverse (T& s)
+ {
+ names (s);
+ }
+
+ template<typename X>
+ Void
+ names (T& s,
+ EdgeDispatcherBase& d,
+ Void (X::*pre_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0),
+ Void (X::*post_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0),
+ Void (X::*none_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0),
+ Void (X::*next_) (T&) = (Void (ScopeTemplate<T>::*)(T&)) (0))
+ {
+ X* this_ (dynamic_cast<X*> (this));
+
+ typename T::NamesIterator b (s.names_begin ()), e (s.names_end ());
+
+ if (b != e)
+ {
+ if (pre_)
+ (this_->*pre_) (s);
+
+ //iterate_and_dispatch (b, e, d, *this_, next_, s);
+
+ for (; b != s.names_end ();)
+ {
+ d.dispatch (*b);
+
+ if (++b != s.names_end () && next_ != 0)
+ (this_->*next_) (s);
+ }
+
+ if (post_)
+ (this_->*post_) (s);
+ }
+ else
+ {
+ if (none_)
+ (this_->*none_) (s);
+ }
+ }
+
+ virtual Void
+ names (T& s, EdgeDispatcherBase& d)
+ {
+ names<ScopeTemplate<T> > (s, d);
+ }
+
+ virtual Void
+ names (T& s)
+ {
+ names (s,
+ *this,
+ &ScopeTemplate<T>::names_pre,
+ &ScopeTemplate<T>::names_post,
+ &ScopeTemplate<T>::names_none,
+ &ScopeTemplate<T>::names_next);
+ }
+
+ virtual Void
+ names_pre (T&)
+ {
+ }
+
+ virtual Void
+ names_next (T&)
+ {
+ }
+
+ virtual Void
+ names_post (T&)
+ {
+ }
+
+ virtual Void
+ names_none (T&)
+ {
+ }
+ };
+
+
+ //
+ //
+ typedef
+ ScopeTemplate<SemanticGraph::Scope>
+ Scope;
+
+
+ //
+ //
+ struct Type : Node<SemanticGraph::Type>
+ {
+ virtual Void
+ traverse (SemanticGraph::Type&) = 0;
+ };
+
+
+ //
+ //
+ struct Instance : Node<SemanticGraph::Instance>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ belongs (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ belongs (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+
+
+ //
+ //
+ struct Member : Node<SemanticGraph::Member>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ belongs (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ belongs (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+
+
+ //
+ //
+ struct Inherits : Edge<SemanticGraph::Inherits>
+ {
+ Inherits ()
+ {
+ }
+
+ Inherits (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.base ());
+ }
+ };
+
+
+ //
+ //
+ struct Extends : Edge<SemanticGraph::Extends>
+ {
+ Extends ()
+ {
+ }
+
+ Extends (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.base ());
+ }
+ };
+
+
+ //
+ //
+ struct Restricts : Edge<SemanticGraph::Restricts>
+ {
+ Restricts ()
+ {
+ }
+
+ Restricts (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.base ());
+ }
+ };
+
+
+ //
+ //
+ struct Argumented : Edge<SemanticGraph::Arguments>
+ {
+ Argumented ()
+ {
+ }
+
+ Argumented (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& a)
+ {
+ dispatch (a.type ());
+ }
+ };
+
+
+ /*
+ //
+ //
+ struct Contains : Edge<SemanticGraph::Contains>
+ {
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.element ());
+ }
+ };
+ */
+
+ //
+ //
+ typedef
+ Node<SemanticGraph::AnyType>
+ AnyType;
+
+
+ //
+ //
+ typedef
+ Node<SemanticGraph::AnySimpleType>
+ AnySimpleType;
+ }
+}
+
+#include <xsd-frontend/traversal/elements.txx>
+
+#endif // XSD_FRONTEND_TRAVERSAL_ELEMENTS_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/elements.txx b/libxsd-frontend/xsd-frontend/traversal/elements.txx
new file mode 100644
index 0000000..b673a8d
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/elements.txx
@@ -0,0 +1,11 @@
+// file : xsd-frontend/traversal/elements.txx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/enumeration.cxx b/libxsd-frontend/xsd-frontend/traversal/enumeration.cxx
new file mode 100644
index 0000000..a8a49a5
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/enumeration.cxx
@@ -0,0 +1,91 @@
+// file : xsd-frontend/traversal/enumeration.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/enumeration.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ // Enumeration
+ //
+ Void Enumeration::
+ traverse (Type& e)
+ {
+ pre (e);
+ name (e);
+ inherits (e);
+ names (e);
+ post (e);
+ }
+
+ Void Enumeration::
+ pre (Type&)
+ {
+ }
+
+ Void Enumeration::
+ name (Type&)
+ {
+ }
+
+ Void Enumeration::
+ inherits (Type& e)
+ {
+ inherits (e, *this);
+ }
+
+ Void Enumeration::
+ inherits (Type& e, EdgeDispatcherBase& d)
+ {
+ if (e.inherits_p ())
+ d.dispatch (e.inherits ());
+ }
+
+ Void Enumeration::
+ post (Type&)
+ {
+ }
+
+
+ // Enumerator
+ //
+ Void Enumerator::
+ traverse (Type& e)
+ {
+ pre (e);
+ belongs (e);
+ name (e);
+ post (e);
+ }
+
+ Void Enumerator::
+ pre (Type&)
+ {
+ }
+
+ Void Enumerator::
+ belongs (Type& e, EdgeDispatcherBase& d)
+ {
+ d.dispatch (e.belongs ());
+ }
+
+ Void Enumerator::
+ belongs (Type& e)
+ {
+ belongs (e, edge_traverser ());
+ }
+
+ Void Enumerator::
+ name (Type&)
+ {
+ }
+
+ Void Enumerator::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/enumeration.hxx b/libxsd-frontend/xsd-frontend/traversal/enumeration.hxx
new file mode 100644
index 0000000..c6d7f04
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/enumeration.hxx
@@ -0,0 +1,60 @@
+// file : xsd-frontend/traversal/enumeration.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_ENUMERATION_HXX
+#define XSD_FRONTEND_TRAVERSAL_ENUMERATION_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/enumeration.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Enumeration : ScopeTemplate<SemanticGraph::Enumeration>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ inherits (Type&);
+
+ Void
+ inherits (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ post (Type&);
+ };
+
+ struct Enumerator : Node<SemanticGraph::Enumerator>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ belongs (Type&, EdgeDispatcherBase&);
+
+ virtual Void
+ belongs (Type&);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_ENUMERATION_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/fundamental.cxx b/libxsd-frontend/xsd-frontend/traversal/fundamental.cxx
new file mode 100644
index 0000000..b9cadec
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/fundamental.cxx
@@ -0,0 +1,13 @@
+// file : xsd-frontend/traversal/fundamental.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/fundamental.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/fundamental.hxx b/libxsd-frontend/xsd-frontend/traversal/fundamental.hxx
new file mode 100644
index 0000000..5c20d9c
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/fundamental.hxx
@@ -0,0 +1,234 @@
+// file : xsd-frontend/traversal/fundamental.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_FUNDAMENTAL_HXX
+#define XSD_FRONTEND_TRAVERSAL_FUNDAMENTAL_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/fundamental.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ namespace Fundamental
+ {
+ typedef
+ Node<SemanticGraph::Fundamental::Type>
+ Type;
+
+ // Integers.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Byte>
+ Byte;
+
+ typedef
+ Node<SemanticGraph::Fundamental::UnsignedByte>
+ UnsignedByte;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Short>
+ Short;
+
+ typedef
+ Node<SemanticGraph::Fundamental::UnsignedShort>
+ UnsignedShort;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Int>
+ Int;
+
+ typedef
+ Node<SemanticGraph::Fundamental::UnsignedInt>
+ UnsignedInt;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Long>
+ Long;
+
+ typedef
+ Node<SemanticGraph::Fundamental::UnsignedLong>
+ UnsignedLong;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Integer>
+ Integer;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NonPositiveInteger>
+ NonPositiveInteger;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NonNegativeInteger>
+ NonNegativeInteger;
+
+ typedef
+ Node<SemanticGraph::Fundamental::PositiveInteger>
+ PositiveInteger;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NegativeInteger>
+ NegativeInteger;
+
+
+ // Boolean.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Boolean>
+ Boolean;
+
+
+ // Floats.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Float>
+ Float;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Double>
+ Double;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Decimal>
+ Decimal;
+
+
+ // Strings.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::String>
+ String;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NormalizedString>
+ NormalizedString;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Token>
+ Token;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Name>
+ Name;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NameToken>
+ NameToken;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NameTokens>
+ NameTokens;
+
+ typedef
+ Node<SemanticGraph::Fundamental::NCName>
+ NCName;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Language>
+ Language;
+
+
+ // Qualified name.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::QName>
+ QName;
+
+
+ // ID/IDREF.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Id>
+ Id;
+
+ typedef
+ Node<SemanticGraph::Fundamental::IdRef>
+ IdRef;
+
+ typedef
+ Node<SemanticGraph::Fundamental::IdRefs>
+ IdRefs;
+
+
+ // URI.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::AnyURI>
+ AnyURI;
+
+
+ // Binary.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Base64Binary>
+ Base64Binary;
+
+ typedef
+ Node<SemanticGraph::Fundamental::HexBinary>
+ HexBinary;
+
+
+ // Date/time.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Date>
+ Date;
+
+ typedef
+ Node<SemanticGraph::Fundamental::DateTime>
+ DateTime;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Duration>
+ Duration;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Day>
+ Day;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Month>
+ Month;
+
+ typedef
+ Node<SemanticGraph::Fundamental::MonthDay>
+ MonthDay;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Year>
+ Year;
+
+ typedef
+ Node<SemanticGraph::Fundamental::YearMonth>
+ YearMonth;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Time>
+ Time;
+
+
+ // Entity.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Entity>
+ Entity;
+
+ typedef
+ Node<SemanticGraph::Fundamental::Entities>
+ Entities;
+
+
+ // Notation.
+ //
+ typedef
+ Node<SemanticGraph::Fundamental::Notation>
+ Notation;
+ }
+ }
+}
+
+
+#endif // XSD_FRONTEND_TRAVERSAL_FUNDAMENTAL_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/list.cxx b/libxsd-frontend/xsd-frontend/traversal/list.cxx
new file mode 100644
index 0000000..ec434ba
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/list.cxx
@@ -0,0 +1,48 @@
+// file : xsd-frontend/traversal/list.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/list.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void List::
+ traverse (Type& l)
+ {
+ pre (l);
+ argumented (l);
+ name (l);
+ post (l);
+ }
+
+ Void List::
+ pre (Type&)
+ {
+ }
+
+ Void List::
+ argumented (Type& l)
+ {
+ argumented (l, *this);
+ }
+
+ Void List::
+ argumented (Type& l, EdgeDispatcherBase& d)
+ {
+ d.dispatch (l.argumented ());
+ }
+
+ Void List::
+ name (Type&)
+ {
+ }
+
+ Void List::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/list.hxx b/libxsd-frontend/xsd-frontend/traversal/list.hxx
new file mode 100644
index 0000000..2bbc136
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/list.hxx
@@ -0,0 +1,39 @@
+// file : xsd-frontend/traversal/list.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_LIST_HXX
+#define XSD_FRONTEND_TRAVERSAL_LIST_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/list.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct List: Node<SemanticGraph::List>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ argumented (Type&);
+
+ virtual Void
+ argumented (Type&, EdgeDispatcherBase& d);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_LIST_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/namespace.cxx b/libxsd-frontend/xsd-frontend/traversal/namespace.cxx
new file mode 100644
index 0000000..cbc6ef2
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/namespace.cxx
@@ -0,0 +1,13 @@
+// file : xsd-frontend/traversal/namespace.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/namespace.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/namespace.hxx b/libxsd-frontend/xsd-frontend/traversal/namespace.hxx
new file mode 100644
index 0000000..22305e1
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/namespace.hxx
@@ -0,0 +1,45 @@
+// file : xsd-frontend/traversal/namespace.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_NAMESPACE_HXX
+#define XSD_FRONTEND_TRAVERSAL_NAMESPACE_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/namespace.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Namespace: ScopeTemplate<SemanticGraph::Namespace>
+ {
+ virtual Void
+ traverse (Type& m)
+ {
+ pre (m);
+ name (m);
+ names (m);
+ post (m);
+ }
+
+ virtual Void
+ pre (Type&)
+ {
+ }
+
+ virtual Void
+ name (Type&)
+ {
+ }
+
+ virtual Void
+ post (Type&)
+ {
+ }
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_NAMESPACE_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/particle.cxx b/libxsd-frontend/xsd-frontend/traversal/particle.cxx
new file mode 100644
index 0000000..e3d3a97
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/particle.cxx
@@ -0,0 +1,31 @@
+// file : xsd-frontend/traversal/particle.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/particle.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ // Particle
+ //
+ Void Particle::
+ traverse (Type& c)
+ {
+ pre (c);
+ post (c);
+ }
+
+ Void Particle::
+ pre (Type&)
+ {
+ }
+
+ Void Particle::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/particle.hxx b/libxsd-frontend/xsd-frontend/traversal/particle.hxx
new file mode 100644
index 0000000..3584c12
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/particle.hxx
@@ -0,0 +1,30 @@
+// file : xsd-frontend/traversal/particle.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_PARTICLE_HXX
+#define XSD_FRONTEND_TRAVERSAL_PARTICLE_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/particle.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Particle : Node<SemanticGraph::Particle>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_PARTICLE_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/schema.cxx b/libxsd-frontend/xsd-frontend/traversal/schema.cxx
new file mode 100644
index 0000000..acfca26
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/schema.cxx
@@ -0,0 +1,13 @@
+// file : xsd-frontend/traversal/schema.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/schema.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/schema.hxx b/libxsd-frontend/xsd-frontend/traversal/schema.hxx
new file mode 100644
index 0000000..a975475
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/schema.hxx
@@ -0,0 +1,150 @@
+// file : xsd-frontend/traversal/schema.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_SCHEMA_HXX
+#define XSD_FRONTEND_TRAVERSAL_SCHEMA_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/schema.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ //
+ //
+ struct Uses: Edge<SemanticGraph::Uses>
+ {
+ Uses ()
+ {
+ }
+
+ Uses (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.schema ());
+ }
+ };
+
+ //
+ //
+ struct Implies: Edge<SemanticGraph::Implies>
+ {
+ Implies ()
+ {
+ }
+
+ Implies (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.schema ());
+ }
+ };
+
+
+ //
+ //
+ struct Sources: Edge<SemanticGraph::Sources>
+ {
+ Sources ()
+ {
+ }
+
+ Sources (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.schema ());
+ }
+ };
+
+
+ //
+ //
+ struct Includes: Edge<SemanticGraph::Includes>
+ {
+ Includes ()
+ {
+ }
+
+ Includes (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.schema ());
+ }
+ };
+
+
+ //
+ //
+ struct Imports: Edge<SemanticGraph::Imports>
+ {
+ Imports ()
+ {
+ }
+
+ Imports (NodeBase& n)
+ {
+ node_traverser (n);
+ }
+
+ virtual Void
+ traverse (Type& e)
+ {
+ dispatch (e.schema ());
+ }
+ };
+
+
+ //
+ //
+ struct Schema: ScopeTemplate<SemanticGraph::Schema>
+ {
+ virtual Void
+ traverse (Type& s)
+ {
+ pre (s);
+
+ iterate_and_dispatch (
+ s.uses_begin (), s.uses_end (), edge_traverser ());
+
+ names (s);
+
+ post (s);
+ }
+
+ virtual Void
+ pre (Type&)
+ {
+ }
+
+ virtual Void
+ post (Type&)
+ {
+ }
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_SCHEMA_HXX
diff --git a/libxsd-frontend/xsd-frontend/traversal/union.cxx b/libxsd-frontend/xsd-frontend/traversal/union.cxx
new file mode 100644
index 0000000..acf419a
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/union.cxx
@@ -0,0 +1,48 @@
+// file : xsd-frontend/traversal/union.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <xsd-frontend/traversal/union.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ Void Union::
+ traverse (Type& u)
+ {
+ pre (u);
+ argumented (u);
+ name (u);
+ post (u);
+ }
+
+ Void Union::
+ pre (Type&)
+ {
+ }
+
+ Void Union::
+ argumented (Type& u)
+ {
+ argumented (u, *this);
+ }
+
+ Void Union::
+ argumented (Type& u, EdgeDispatcherBase& d)
+ {
+ iterate_and_dispatch (u.argumented_begin (), u.argumented_end (), d);
+ }
+
+ Void Union::
+ name (Type&)
+ {
+ }
+
+ Void Union::
+ post (Type&)
+ {
+ }
+ }
+}
diff --git a/libxsd-frontend/xsd-frontend/traversal/union.hxx b/libxsd-frontend/xsd-frontend/traversal/union.hxx
new file mode 100644
index 0000000..e3d31bd
--- /dev/null
+++ b/libxsd-frontend/xsd-frontend/traversal/union.hxx
@@ -0,0 +1,39 @@
+// file : xsd-frontend/traversal/union.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSD_FRONTEND_TRAVERSAL_UNION_HXX
+#define XSD_FRONTEND_TRAVERSAL_UNION_HXX
+
+#include <xsd-frontend/traversal/elements.hxx>
+#include <xsd-frontend/semantic-graph/union.hxx>
+
+namespace XSDFrontend
+{
+ namespace Traversal
+ {
+ struct Union: Node<SemanticGraph::Union>
+ {
+ virtual Void
+ traverse (Type&);
+
+ virtual Void
+ pre (Type&);
+
+ virtual Void
+ argumented (Type&);
+
+ virtual Void
+ argumented (Type&, EdgeDispatcherBase& d);
+
+ virtual Void
+ name (Type&);
+
+ virtual Void
+ post (Type&);
+ };
+ }
+}
+
+#endif // XSD_FRONTEND_TRAVERSAL_UNION_HXX