From cf80396f8b6147e9048c1f3bd50b3086f754d037 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 29 Mar 2010 14:29:02 +0200 Subject: Implement semantic graph traversal mechanism --- odb/traversal/derived.hxx | 132 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 odb/traversal/derived.hxx (limited to 'odb/traversal/derived.hxx') diff --git a/odb/traversal/derived.hxx b/odb/traversal/derived.hxx new file mode 100644 index 0000000..5af31af --- /dev/null +++ b/odb/traversal/derived.hxx @@ -0,0 +1,132 @@ +// file : odb/traversal/derived.hxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +#ifndef ODB_TRAVERSAL_DERIVED_HXX +#define ODB_TRAVERSAL_DERIVED_HXX + +#include +#include + +namespace traversal +{ + // + // Edges. + // + struct qualifies: edge + { + qualifies () + { + } + + qualifies (node_dispatcher& n) + { + node_traverser (n); + } + + virtual void + traverse (type&); + }; + + struct points: edge + { + points () + { + } + + points (node_dispatcher& n) + { + node_traverser (n); + } + + virtual void + traverse (type&); + }; + + struct references: edge + { + references () + { + } + + references (node_dispatcher& n) + { + node_traverser (n); + } + + virtual void + traverse (type&); + }; + + struct contains: edge + { + contains () + { + } + + contains (node_dispatcher& n) + { + node_traverser (n); + } + + virtual void + traverse (type&); + }; + + + // + // Nodes. + // + struct derived_type: node {}; + + struct qualifier: node + { + virtual void + traverse (type&); + + virtual void + qualifies (type&); + + virtual void + qualifies (type&, edge_dispatcher&); + }; + + struct pointer: node + { + virtual void + traverse (type&); + + virtual void + points (type&); + + virtual void + points (type&, edge_dispatcher&); + }; + + struct reference: node + { + virtual void + traverse (type&); + + virtual void + references (type&); + + virtual void + references (type&, edge_dispatcher&); + }; + + struct array: node + { + virtual void + traverse (type&); + + virtual void + contains (type&); + + virtual void + contains (type&, edge_dispatcher&); + }; +} + +#endif // ODB_TRAVERSAL_DERIVED_HXX -- cgit v1.1