From a15cf65c44d5c224169c32ef5495b68c758134b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 18 May 2014 16:08:14 +0200 Subject: Imported Upstream version 3.3.0.2 --- .../xsd-frontend/traversal/any-attribute.hxx | 22 + libxsd-frontend/xsd-frontend/traversal/any.hxx | 22 + .../xsd-frontend/traversal/attribute-group.cxx | 30 ++ .../xsd-frontend/traversal/attribute-group.hxx | 30 ++ .../xsd-frontend/traversal/attribute.cxx | 48 +++ .../xsd-frontend/traversal/attribute.hxx | 41 ++ libxsd-frontend/xsd-frontend/traversal/complex.cxx | 64 +++ libxsd-frontend/xsd-frontend/traversal/complex.hxx | 45 ++ .../xsd-frontend/traversal/compositors.cxx | 165 +++++++ .../xsd-frontend/traversal/compositors.hxx | 136 ++++++ .../xsd-frontend/traversal/element-group.cxx | 43 ++ .../xsd-frontend/traversal/element-group.hxx | 36 ++ libxsd-frontend/xsd-frontend/traversal/element.cxx | 48 +++ libxsd-frontend/xsd-frontend/traversal/element.hxx | 39 ++ .../xsd-frontend/traversal/elements.cxx | 77 ++++ .../xsd-frontend/traversal/elements.hxx | 480 +++++++++++++++++++++ .../xsd-frontend/traversal/elements.txx | 11 + .../xsd-frontend/traversal/enumeration.cxx | 91 ++++ .../xsd-frontend/traversal/enumeration.hxx | 60 +++ .../xsd-frontend/traversal/fundamental.cxx | 13 + .../xsd-frontend/traversal/fundamental.hxx | 234 ++++++++++ libxsd-frontend/xsd-frontend/traversal/list.cxx | 48 +++ libxsd-frontend/xsd-frontend/traversal/list.hxx | 39 ++ .../xsd-frontend/traversal/namespace.cxx | 13 + .../xsd-frontend/traversal/namespace.hxx | 45 ++ .../xsd-frontend/traversal/particle.cxx | 31 ++ .../xsd-frontend/traversal/particle.hxx | 30 ++ libxsd-frontend/xsd-frontend/traversal/schema.cxx | 13 + libxsd-frontend/xsd-frontend/traversal/schema.hxx | 150 +++++++ libxsd-frontend/xsd-frontend/traversal/union.cxx | 48 +++ libxsd-frontend/xsd-frontend/traversal/union.hxx | 39 ++ 31 files changed, 2191 insertions(+) create mode 100644 libxsd-frontend/xsd-frontend/traversal/any-attribute.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/any.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/attribute-group.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/attribute-group.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/attribute.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/attribute.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/complex.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/complex.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/compositors.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/compositors.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/element-group.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/element-group.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/element.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/element.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/elements.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/elements.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/elements.txx create mode 100644 libxsd-frontend/xsd-frontend/traversal/enumeration.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/enumeration.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/fundamental.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/fundamental.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/list.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/list.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/namespace.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/namespace.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/particle.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/particle.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/schema.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/schema.hxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/union.cxx create mode 100644 libxsd-frontend/xsd-frontend/traversal/union.hxx (limited to 'libxsd-frontend/xsd-frontend/traversal') 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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + typedef + Node + 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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + typedef + Node + 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 +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct AttributeGroup: ScopeTemplate + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 + +#include + + +namespace XSDFrontend +{ + namespace Traversal + { + struct Attribute : Node + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct Complex : ScopeTemplate + { + 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 +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + // + // + struct ContainsParticle: Edge + { + ContainsParticle () + { + } + + ContainsParticle (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type&); + }; + + + // + // + struct ContainsCompositor: Edge + { + ContainsCompositor () + { + } + + ContainsCompositor (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type&); + }; + + // + // + struct Compositor : Node + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + + // + // + struct All : Node + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + + // + // + struct Choice : Node + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + contains (Type&); + + virtual Void + contains (Type&, EdgeDispatcherBase&); + + virtual Void + post (Type&); + }; + + + // + // + struct Sequence : Node + { + 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 +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct ElementGroup: ScopeTemplate + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct Element : Node + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 + +#include + +#include + +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 NodeDispatcherBase; + typedef Bits::DispatcherBase EdgeDispatcherBase; + + + // + // + struct NodeBase : virtual Bits::Dispatcher, + virtual Bits::Dispatcher + { + Void + edge_traverser (EdgeDispatcherBase& d) + { + Bits::Dispatcher::traverser (d); + } + + EdgeDispatcherBase& + edge_traverser () + { + return *this; + } + + public: + using Bits::Dispatcher::dispatch; + using Bits::Dispatcher::dispatch; + + using Bits::Dispatcher::map; + + using Bits::Dispatcher::iterate_and_dispatch; + }; + + + // + // + template + struct Node : Bits::TraverserBase, virtual NodeBase + { + typedef + T + Type; + + Node () + { + map (typeid (Type), *this); + } + + virtual Void + traverse (Type&) = 0; + + virtual Void + trampoline (SemanticGraph::Node& i) + { + traverse (dynamic_cast (i)); + } + + virtual Void + trampoline (SemanticGraph::Node const&) + { + abort (); + } + }; + + + // + // + struct EdgeBase : virtual Bits::Dispatcher, + virtual Bits::Dispatcher + { + Void + node_traverser (NodeDispatcherBase& d) + { + Bits::Dispatcher::traverser (d); + } + + NodeDispatcherBase& + node_traverser () + { + return *this; + } + + public: + using Bits::Dispatcher::dispatch; + using Bits::Dispatcher::dispatch; + + using Bits::Dispatcher::map; + + using Bits::Dispatcher::iterate_and_dispatch; + }; + + template + struct Edge : Bits::TraverserBase, virtual EdgeBase + { + typedef + T + Type; + + Edge () + { + map (typeid (Type), *this); + } + + virtual Void + traverse (Type&) = 0; + + virtual Void + trampoline (SemanticGraph::Edge& i) + { + traverse (dynamic_cast (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 + { + Names () + { + } + + Names (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.named ()); + } + }; + + + // + // + struct Belongs : Edge + { + Belongs () + { + } + + Belongs (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.type ()); + } + }; + + + // Nodes + // + + + // + // + struct Nameable : Node + { + }; + + + // + // + template + struct ScopeTemplate : Node + { + public: + virtual Void + traverse (T& s) + { + names (s); + } + + template + Void + names (T& s, + EdgeDispatcherBase& d, + Void (X::*pre_) (T&) = (Void (ScopeTemplate::*)(T&)) (0), + Void (X::*post_) (T&) = (Void (ScopeTemplate::*)(T&)) (0), + Void (X::*none_) (T&) = (Void (ScopeTemplate::*)(T&)) (0), + Void (X::*next_) (T&) = (Void (ScopeTemplate::*)(T&)) (0)) + { + X* this_ (dynamic_cast (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 > (s, d); + } + + virtual Void + names (T& s) + { + names (s, + *this, + &ScopeTemplate::names_pre, + &ScopeTemplate::names_post, + &ScopeTemplate::names_none, + &ScopeTemplate::names_next); + } + + virtual Void + names_pre (T&) + { + } + + virtual Void + names_next (T&) + { + } + + virtual Void + names_post (T&) + { + } + + virtual Void + names_none (T&) + { + } + }; + + + // + // + typedef + ScopeTemplate + Scope; + + + // + // + struct Type : Node + { + virtual Void + traverse (SemanticGraph::Type&) = 0; + }; + + + // + // + struct Instance : Node + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + post (Type&); + }; + + + // + // + struct Member : Node + { + virtual Void + traverse (Type&); + + virtual Void + pre (Type&); + + virtual Void + belongs (Type&, EdgeDispatcherBase&); + + virtual Void + belongs (Type&); + + virtual Void + post (Type&); + }; + + + // + // + struct Inherits : Edge + { + Inherits () + { + } + + Inherits (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.base ()); + } + }; + + + // + // + struct Extends : Edge + { + Extends () + { + } + + Extends (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.base ()); + } + }; + + + // + // + struct Restricts : Edge + { + Restricts () + { + } + + Restricts (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.base ()); + } + }; + + + // + // + struct Argumented : Edge + { + Argumented () + { + } + + Argumented (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& a) + { + dispatch (a.type ()); + } + }; + + + /* + // + // + struct Contains : Edge + { + virtual Void + traverse (Type& e) + { + dispatch (e.element ()); + } + }; + */ + + // + // + typedef + Node + AnyType; + + + // + // + typedef + Node + AnySimpleType; + } +} + +#include + +#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 +// 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct Enumeration : ScopeTemplate + { + 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 + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + namespace Fundamental + { + typedef + Node + Type; + + // Integers. + // + typedef + Node + Byte; + + typedef + Node + UnsignedByte; + + typedef + Node + Short; + + typedef + Node + UnsignedShort; + + typedef + Node + Int; + + typedef + Node + UnsignedInt; + + typedef + Node + Long; + + typedef + Node + UnsignedLong; + + typedef + Node + Integer; + + typedef + Node + NonPositiveInteger; + + typedef + Node + NonNegativeInteger; + + typedef + Node + PositiveInteger; + + typedef + Node + NegativeInteger; + + + // Boolean. + // + typedef + Node + Boolean; + + + // Floats. + // + typedef + Node + Float; + + typedef + Node + Double; + + typedef + Node + Decimal; + + + // Strings. + // + typedef + Node + String; + + typedef + Node + NormalizedString; + + typedef + Node + Token; + + typedef + Node + Name; + + typedef + Node + NameToken; + + typedef + Node + NameTokens; + + typedef + Node + NCName; + + typedef + Node + Language; + + + // Qualified name. + // + typedef + Node + QName; + + + // ID/IDREF. + // + typedef + Node + Id; + + typedef + Node + IdRef; + + typedef + Node + IdRefs; + + + // URI. + // + typedef + Node + AnyURI; + + + // Binary. + // + typedef + Node + Base64Binary; + + typedef + Node + HexBinary; + + + // Date/time. + // + typedef + Node + Date; + + typedef + Node + DateTime; + + typedef + Node + Duration; + + typedef + Node + Day; + + typedef + Node + Month; + + typedef + Node + MonthDay; + + typedef + Node + Year; + + typedef + Node + YearMonth; + + typedef + Node + Time; + + + // Entity. + // + typedef + Node + Entity; + + typedef + Node + Entities; + + + // Notation. + // + typedef + Node + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct List: Node + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct Namespace: ScopeTemplate + { + 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 +// copyright : Copyright (c) 2006-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct Particle : Node + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + // + // + struct Uses: Edge + { + Uses () + { + } + + Uses (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + // + // + struct Implies: Edge + { + Implies () + { + } + + Implies (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Sources: Edge + { + Sources () + { + } + + Sources (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Includes: Edge + { + Includes () + { + } + + Includes (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Imports: Edge + { + Imports () + { + } + + Imports (NodeBase& n) + { + node_traverser (n); + } + + virtual Void + traverse (Type& e) + { + dispatch (e.schema ()); + } + }; + + + // + // + struct Schema: ScopeTemplate + { + 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 +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +#include + +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 +// 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 +#include + +namespace XSDFrontend +{ + namespace Traversal + { + struct Union: Node + { + 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 -- cgit v1.2.3