aboutsummaryrefslogtreecommitdiff
path: root/xsd-frontend/traversal
diff options
context:
space:
mode:
Diffstat (limited to 'xsd-frontend/traversal')
-rw-r--r--xsd-frontend/traversal/attribute.cxx2
-rw-r--r--xsd-frontend/traversal/attribute.hxx2
-rw-r--r--xsd-frontend/traversal/complex.cxx4
-rw-r--r--xsd-frontend/traversal/complex.hxx4
-rw-r--r--xsd-frontend/traversal/compositors.cxx8
-rw-r--r--xsd-frontend/traversal/compositors.hxx8
-rw-r--r--xsd-frontend/traversal/element-group.cxx2
-rw-r--r--xsd-frontend/traversal/element-group.hxx2
-rw-r--r--xsd-frontend/traversal/element.cxx2
-rw-r--r--xsd-frontend/traversal/element.hxx2
-rw-r--r--xsd-frontend/traversal/elements.cxx4
-rw-r--r--xsd-frontend/traversal/elements.hxx150
-rw-r--r--xsd-frontend/traversal/enumeration.cxx4
-rw-r--r--xsd-frontend/traversal/enumeration.hxx4
-rw-r--r--xsd-frontend/traversal/list.cxx2
-rw-r--r--xsd-frontend/traversal/list.hxx2
-rw-r--r--xsd-frontend/traversal/union.cxx2
-rw-r--r--xsd-frontend/traversal/union.hxx2
18 files changed, 70 insertions, 136 deletions
diff --git a/xsd-frontend/traversal/attribute.cxx b/xsd-frontend/traversal/attribute.cxx
index 00344b6..f94aec4 100644
--- a/xsd-frontend/traversal/attribute.cxx
+++ b/xsd-frontend/traversal/attribute.cxx
@@ -24,7 +24,7 @@ namespace XSDFrontend
}
Void Attribute::
- belongs (Type& a, EdgeDispatcherBase& d)
+ belongs (Type& a, EdgeDispatcher& d)
{
d.dispatch (a.belongs ());
}
diff --git a/xsd-frontend/traversal/attribute.hxx b/xsd-frontend/traversal/attribute.hxx
index bc36a86..e04df75 100644
--- a/xsd-frontend/traversal/attribute.hxx
+++ b/xsd-frontend/traversal/attribute.hxx
@@ -24,7 +24,7 @@ namespace XSDFrontend
pre (Type&);
virtual Void
- belongs (Type&, EdgeDispatcherBase&);
+ belongs (Type&, EdgeDispatcher&);
virtual Void
belongs (Type&);
diff --git a/xsd-frontend/traversal/complex.cxx b/xsd-frontend/traversal/complex.cxx
index b014812..9a07382 100644
--- a/xsd-frontend/traversal/complex.cxx
+++ b/xsd-frontend/traversal/complex.cxx
@@ -37,7 +37,7 @@ namespace XSDFrontend
}
Void Complex::
- inherits (Type& c, EdgeDispatcherBase& d)
+ inherits (Type& c, EdgeDispatcher& d)
{
if (c.inherits_p ())
d.dispatch (c.inherits ());
@@ -50,7 +50,7 @@ namespace XSDFrontend
}
Void Complex::
- contains_compositor (Type& c, EdgeDispatcherBase& d)
+ contains_compositor (Type& c, EdgeDispatcher& d)
{
if (c.contains_compositor_p ())
d.dispatch (c.contains_compositor ());
diff --git a/xsd-frontend/traversal/complex.hxx b/xsd-frontend/traversal/complex.hxx
index 5f1e38f..21f42ef 100644
--- a/xsd-frontend/traversal/complex.hxx
+++ b/xsd-frontend/traversal/complex.hxx
@@ -28,13 +28,13 @@ namespace XSDFrontend
inherits (Type&);
Void
- inherits (Type&, EdgeDispatcherBase&);
+ inherits (Type&, EdgeDispatcher&);
virtual Void
contains_compositor (Type&);
Void
- contains_compositor (Type&, EdgeDispatcherBase&);
+ contains_compositor (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
diff --git a/xsd-frontend/traversal/compositors.cxx b/xsd-frontend/traversal/compositors.cxx
index 0de3819..c68e7a7 100644
--- a/xsd-frontend/traversal/compositors.cxx
+++ b/xsd-frontend/traversal/compositors.cxx
@@ -50,7 +50,7 @@ namespace XSDFrontend
}
Void Compositor::
- contains (Type& c, EdgeDispatcherBase& d)
+ contains (Type& c, EdgeDispatcher& d)
{
iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
}
@@ -84,7 +84,7 @@ namespace XSDFrontend
}
Void All::
- contains (Type& c, EdgeDispatcherBase& d)
+ contains (Type& c, EdgeDispatcher& d)
{
iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
}
@@ -118,7 +118,7 @@ namespace XSDFrontend
}
Void Choice::
- contains (Type& c, EdgeDispatcherBase& d)
+ contains (Type& c, EdgeDispatcher& d)
{
iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
}
@@ -152,7 +152,7 @@ namespace XSDFrontend
}
Void Sequence::
- contains (Type& c, EdgeDispatcherBase& d)
+ contains (Type& c, EdgeDispatcher& d)
{
iterate_and_dispatch (c.contains_begin (), c.contains_end (), d);
}
diff --git a/xsd-frontend/traversal/compositors.hxx b/xsd-frontend/traversal/compositors.hxx
index a6c9cec..5e099e4 100644
--- a/xsd-frontend/traversal/compositors.hxx
+++ b/xsd-frontend/traversal/compositors.hxx
@@ -62,7 +62,7 @@ namespace XSDFrontend
contains (Type&);
virtual Void
- contains (Type&, EdgeDispatcherBase&);
+ contains (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
@@ -83,7 +83,7 @@ namespace XSDFrontend
contains (Type&);
virtual Void
- contains (Type&, EdgeDispatcherBase&);
+ contains (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
@@ -104,7 +104,7 @@ namespace XSDFrontend
contains (Type&);
virtual Void
- contains (Type&, EdgeDispatcherBase&);
+ contains (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
@@ -125,7 +125,7 @@ namespace XSDFrontend
contains (Type&);
virtual Void
- contains (Type&, EdgeDispatcherBase&);
+ contains (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
diff --git a/xsd-frontend/traversal/element-group.cxx b/xsd-frontend/traversal/element-group.cxx
index 2129272..1658074 100644
--- a/xsd-frontend/traversal/element-group.cxx
+++ b/xsd-frontend/traversal/element-group.cxx
@@ -24,7 +24,7 @@ namespace XSDFrontend
}
Void ElementGroup::
- contains_compositor (Type& g, EdgeDispatcherBase& d)
+ contains_compositor (Type& g, EdgeDispatcher& d)
{
d.dispatch (g.contains_compositor ());
}
diff --git a/xsd-frontend/traversal/element-group.hxx b/xsd-frontend/traversal/element-group.hxx
index ef5bd84..56ddc0f 100644
--- a/xsd-frontend/traversal/element-group.hxx
+++ b/xsd-frontend/traversal/element-group.hxx
@@ -25,7 +25,7 @@ namespace XSDFrontend
contains_compositor (Type&);
virtual Void
- contains_compositor (Type&, EdgeDispatcherBase&);
+ contains_compositor (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
diff --git a/xsd-frontend/traversal/element.cxx b/xsd-frontend/traversal/element.cxx
index 26ed784..62e5ee8 100644
--- a/xsd-frontend/traversal/element.cxx
+++ b/xsd-frontend/traversal/element.cxx
@@ -24,7 +24,7 @@ namespace XSDFrontend
}
Void Element::
- belongs (Type& m, EdgeDispatcherBase& d)
+ belongs (Type& m, EdgeDispatcher& d)
{
d.dispatch (m.belongs ());
}
diff --git a/xsd-frontend/traversal/element.hxx b/xsd-frontend/traversal/element.hxx
index c77dd1d..3e54950 100644
--- a/xsd-frontend/traversal/element.hxx
+++ b/xsd-frontend/traversal/element.hxx
@@ -22,7 +22,7 @@ namespace XSDFrontend
pre (Type&);
virtual Void
- belongs (Type&, EdgeDispatcherBase&);
+ belongs (Type&, EdgeDispatcher&);
virtual Void
belongs (Type&);
diff --git a/xsd-frontend/traversal/elements.cxx b/xsd-frontend/traversal/elements.cxx
index 84d076a..f8bc283 100644
--- a/xsd-frontend/traversal/elements.cxx
+++ b/xsd-frontend/traversal/elements.cxx
@@ -25,7 +25,7 @@ namespace XSDFrontend
}
Void Instance::
- belongs (Type& a, EdgeDispatcherBase& d)
+ belongs (Type& a, EdgeDispatcher& d)
{
d.dispatch (a.belongs ());
}
@@ -58,7 +58,7 @@ namespace XSDFrontend
}
Void Member::
- belongs (Type& a, EdgeDispatcherBase& d)
+ belongs (Type& a, EdgeDispatcher& d)
{
d.dispatch (a.belongs ());
}
diff --git a/xsd-frontend/traversal/elements.hxx b/xsd-frontend/traversal/elements.hxx
index 3acb0b5..35604e8 100644
--- a/xsd-frontend/traversal/elements.hxx
+++ b/xsd-frontend/traversal/elements.hxx
@@ -8,7 +8,7 @@
#include <cult/types.hxx>
-#include <frontend-elements/traversal.hxx>
+#include <cutl/compiler/traversal.hxx>
#include <xsd-frontend/semantic-graph/elements.hxx>
@@ -16,150 +16,85 @@ namespace XSDFrontend
{
namespace Traversal
{
+ using namespace cutl;
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;
-
+ typedef compiler::dispatcher<SemanticGraph::Node> NodeDispatcher;
+ typedef compiler::dispatcher<SemanticGraph::Edge> EdgeDispatcher;
//
//
- struct NodeBase : virtual Bits::Dispatcher<SemanticGraph::Node>,
- virtual Bits::Dispatcher<SemanticGraph::Edge>
+ struct NodeBase: NodeDispatcher, EdgeDispatcher
{
Void
- edge_traverser (EdgeDispatcherBase& d)
+ edge_traverser (EdgeDispatcher& d)
{
- Bits::Dispatcher<SemanticGraph::Edge>::traverser (d);
+ EdgeDispatcher::traverser (d);
}
- EdgeDispatcherBase&
+ EdgeDispatcher&
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));
- }
+ using NodeDispatcher::dispatch;
+ using EdgeDispatcher::dispatch;
- virtual Void
- trampoline (SemanticGraph::Node const&)
- {
- abort ();
- }
+ using EdgeDispatcher::iterate_and_dispatch;
};
-
- //
- //
- struct EdgeBase : virtual Bits::Dispatcher<SemanticGraph::Edge>,
- virtual Bits::Dispatcher<SemanticGraph::Node>
+ struct EdgeBase: EdgeDispatcher, NodeDispatcher
{
Void
- node_traverser (NodeDispatcherBase& d)
+ node_traverser (NodeDispatcher& d)
{
- Bits::Dispatcher<SemanticGraph::Node>::traverser (d);
+ NodeDispatcher::traverser (d);
}
- NodeDispatcherBase&
+ NodeDispatcher&
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));
- }
+ using EdgeDispatcher::dispatch;
+ using NodeDispatcher::dispatch;
- virtual Void
- trampoline (SemanticGraph::Edge const&)
- {
- abort ();
- }
+ using NodeDispatcher::iterate_and_dispatch;
};
- inline
- EdgeBase&
+ inline EdgeBase&
operator>> (NodeBase& n, EdgeBase& e)
{
n.edge_traverser (e);
return e;
}
- inline
- NodeBase&
+ inline NodeBase&
operator>> (EdgeBase& e, NodeBase& n)
{
e.node_traverser (n);
return n;
}
+ //
+ //
+ template <typename T>
+ struct Node: compiler::traverser_impl<T, SemanticGraph::Node>,
+ virtual NodeBase
+ {
+ typedef T Type;
+ };
+
+ template <typename T>
+ struct Edge: compiler::traverser_impl<T, SemanticGraph::Edge>,
+ virtual EdgeBase
+ {
+ typedef T Type;
+ };
+
+ //
// Edges
//
@@ -204,11 +139,10 @@ namespace XSDFrontend
}
};
-
+ //
// Nodes
//
-
//
//
struct Nameable : Node<SemanticGraph::Nameable>
@@ -231,7 +165,7 @@ namespace XSDFrontend
template<typename X>
Void
names (T& s,
- EdgeDispatcherBase& d,
+ EdgeDispatcher& 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),
@@ -267,7 +201,7 @@ namespace XSDFrontend
}
virtual Void
- names (T& s, EdgeDispatcherBase& d)
+ names (T& s, EdgeDispatcher& d)
{
names<ScopeTemplate<T> > (s, d);
}
@@ -332,7 +266,7 @@ namespace XSDFrontend
pre (Type&);
virtual Void
- belongs (Type&, EdgeDispatcherBase&);
+ belongs (Type&, EdgeDispatcher&);
virtual Void
belongs (Type&);
@@ -353,7 +287,7 @@ namespace XSDFrontend
pre (Type&);
virtual Void
- belongs (Type&, EdgeDispatcherBase&);
+ belongs (Type&, EdgeDispatcher&);
virtual Void
belongs (Type&);
diff --git a/xsd-frontend/traversal/enumeration.cxx b/xsd-frontend/traversal/enumeration.cxx
index 4ba10eb..9dfae89 100644
--- a/xsd-frontend/traversal/enumeration.cxx
+++ b/xsd-frontend/traversal/enumeration.cxx
@@ -38,7 +38,7 @@ namespace XSDFrontend
}
Void Enumeration::
- inherits (Type& e, EdgeDispatcherBase& d)
+ inherits (Type& e, EdgeDispatcher& d)
{
if (e.inherits_p ())
d.dispatch (e.inherits ());
@@ -67,7 +67,7 @@ namespace XSDFrontend
}
Void Enumerator::
- belongs (Type& e, EdgeDispatcherBase& d)
+ belongs (Type& e, EdgeDispatcher& d)
{
d.dispatch (e.belongs ());
}
diff --git a/xsd-frontend/traversal/enumeration.hxx b/xsd-frontend/traversal/enumeration.hxx
index c1f2b08..f8aeaf7 100644
--- a/xsd-frontend/traversal/enumeration.hxx
+++ b/xsd-frontend/traversal/enumeration.hxx
@@ -28,7 +28,7 @@ namespace XSDFrontend
inherits (Type&);
Void
- inherits (Type&, EdgeDispatcherBase&);
+ inherits (Type&, EdgeDispatcher&);
virtual Void
post (Type&);
@@ -43,7 +43,7 @@ namespace XSDFrontend
pre (Type&);
virtual Void
- belongs (Type&, EdgeDispatcherBase&);
+ belongs (Type&, EdgeDispatcher&);
virtual Void
belongs (Type&);
diff --git a/xsd-frontend/traversal/list.cxx b/xsd-frontend/traversal/list.cxx
index 08186a8..523a43c 100644
--- a/xsd-frontend/traversal/list.cxx
+++ b/xsd-frontend/traversal/list.cxx
@@ -30,7 +30,7 @@ namespace XSDFrontend
}
Void List::
- argumented (Type& l, EdgeDispatcherBase& d)
+ argumented (Type& l, EdgeDispatcher& d)
{
d.dispatch (l.argumented ());
}
diff --git a/xsd-frontend/traversal/list.hxx b/xsd-frontend/traversal/list.hxx
index d750f17..6105de8 100644
--- a/xsd-frontend/traversal/list.hxx
+++ b/xsd-frontend/traversal/list.hxx
@@ -25,7 +25,7 @@ namespace XSDFrontend
argumented (Type&);
virtual Void
- argumented (Type&, EdgeDispatcherBase& d);
+ argumented (Type&, EdgeDispatcher& d);
virtual Void
name (Type&);
diff --git a/xsd-frontend/traversal/union.cxx b/xsd-frontend/traversal/union.cxx
index fbee353..26522ec 100644
--- a/xsd-frontend/traversal/union.cxx
+++ b/xsd-frontend/traversal/union.cxx
@@ -30,7 +30,7 @@ namespace XSDFrontend
}
Void Union::
- argumented (Type& u, EdgeDispatcherBase& d)
+ argumented (Type& u, EdgeDispatcher& d)
{
iterate_and_dispatch (u.argumented_begin (), u.argumented_end (), d);
}
diff --git a/xsd-frontend/traversal/union.hxx b/xsd-frontend/traversal/union.hxx
index dd2b195..fe79929 100644
--- a/xsd-frontend/traversal/union.hxx
+++ b/xsd-frontend/traversal/union.hxx
@@ -25,7 +25,7 @@ namespace XSDFrontend
argumented (Type&);
virtual Void
- argumented (Type&, EdgeDispatcherBase& d);
+ argumented (Type&, EdgeDispatcher& d);
virtual Void
name (Type&);