$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r79850 - in sandbox/icl/libs/xplore/br1/sqlbrowser: . Dag
From: afojgo_at_[hidden]
Date: 2012-08-02 09:56:45
Author: jofaber
Date: 2012-08-02 09:56:43 EDT (Thu, 02 Aug 2012)
New Revision: 79850
URL: http://svn.boost.org/trac/boost/changeset/79850
Log:
Adapting visitor for dag representation.
Text files modified: 
   sandbox/icl/libs/xplore/br1/sqlbrowser/CreatorVisitor2.h  |    53 ++++++++++++++++++++++++++++++++++----- 
   sandbox/icl/libs/xplore/br1/sqlbrowser/Dag/DbBasedGraph.h |    10 +++---                                  
   sandbox/icl/libs/xplore/br1/sqlbrowser/browser.cpp        |     3 -                                       
   3 files changed, 52 insertions(+), 14 deletions(-)
Modified: sandbox/icl/libs/xplore/br1/sqlbrowser/CreatorVisitor2.h
==============================================================================
--- sandbox/icl/libs/xplore/br1/sqlbrowser/CreatorVisitor2.h	(original)
+++ sandbox/icl/libs/xplore/br1/sqlbrowser/CreatorVisitor2.h	2012-08-02 09:56:43 EDT (Thu, 02 Aug 2012)
@@ -81,10 +81,7 @@
     struct OnExamineEdge : public boost::base_visitor<OnExamineEdge>
     {
         OnExamineEdge(DagItem* curItem, QString* result, Vertex2AttributesMap& attrs)
-            : p_curItem(curItem), p_result(result), r_attrs(attrs)
-        {
-            //CL r_attrs[0].setDagItem(p_curItem); //Root node
-        }
+            : p_curItem(curItem), p_result(result), r_attrs(attrs){}
 
         typedef boost::on_examine_edge event_filter;
 
@@ -92,9 +89,9 @@
         void operator()(Edge edge, Graph& dag)
         {
             vertex_descriptor source_node = source(edge, dag);
-            dbg_str = QString("(%1)[%2] %3").arg(source_node).arg(dag[source_node].key()).arg(dag[source_node].name());
+            dbg_src = QString("(%1)[%2] %3").arg(source_node).arg(dag[source_node].key()).arg(dag[source_node].name());
             vertex_descriptor target_node = target(edge, dag);
-            dbg_str = QString("(%1)[%2] %3").arg(target_node).arg(dag[target_node].key()).arg(dag[target_node].name());
+            dbg_trg = QString("(%1)[%2] %3").arg(target_node).arg(dag[target_node].key()).arg(dag[target_node].name());
 
             int source_depth = r_attrs[source_node].depth();
             int target_depth = source_depth + 1;
@@ -134,9 +131,51 @@
         DagItem*             p_curItem;
         QString*             p_result;
         Vertex2AttributesMap& r_attrs;
-        QString              dbg_str;
+        QString              dbg_src;//CL
+        QString              dbg_trg;//CL
     };
 
+
+    struct OnForwardOrCrossEdge : public boost::base_visitor<OnForwardOrCrossEdge>
+    {
+        OnForwardOrCrossEdge(DagItem* curItem, QString* result, Vertex2AttributesMap& attrs)
+            : p_curItem(curItem), p_result(result), r_attrs(attrs){}
+
+        typedef boost::on_forward_or_cross_edge event_filter;
+
+        template<class Edge, class Graph>
+        void operator()(Edge edge, Graph& graph)
+        {
+            //int source_depth = graph[source(edge, graph)].depth();
+            vertex_descriptor sourceVertex = source(edge, graph);
+            vertex_descriptor targetVertex = target(edge, graph);
+            Vertex2AttributesMap::iterator sourceVertex_ = r_attrs.find(sourceVertex);
+
+            int sourceDepth = depth(sourceVertex);
+            int targetDepth = sourceDepth + 1;
+
+            *p_result += indentation(targetDepth)
+                      + QString("[%1<%2>%3]\n").arg(graph[sourceVertex].key())
+                                               .arg(graph[edge].typeName())
+                                               .arg(graph[targetVertex].key());
+            // When constructing a QTreeModel I have to copy the node associated to
+            // graph[targetVertex] (e.g. graph[targetVertex].QtModel
+        }
+
+        template<class Vertex>
+        int depth(Vertex& node)
+        {
+            Vertex2AttributesMap::iterator node_ = r_attrs.find(node);
+            return node_ == r_attrs.end() ? 0 : (*node_).second.depth();
+        }
+
+        DagItem*             p_curItem;
+        QString*             p_result;
+        Vertex2AttributesMap& r_attrs;
+        QString              dbg_str;//CL
+    };
+
+
     struct OnFinishVertex : public boost::base_visitor<OnFinishVertex>
     {
         OnFinishVertex(DagItem* curItem, QString* result, Vertex2AttributesMap& names)
Modified: sandbox/icl/libs/xplore/br1/sqlbrowser/Dag/DbBasedGraph.h
==============================================================================
--- sandbox/icl/libs/xplore/br1/sqlbrowser/Dag/DbBasedGraph.h	(original)
+++ sandbox/icl/libs/xplore/br1/sqlbrowser/Dag/DbBasedGraph.h	2012-08-02 09:56:43 EDT (Thu, 02 Aug 2012)
@@ -203,11 +203,11 @@
         boost::depth_first_search(
             m_aGraph
           , make_dfs_visitor(boost::make_list(
-                                                  CreatorVisitor2<DbBasedGraph>::OnDiscoverVertex    (modelRoot, &graphAsString, vertex2AttrMap)
-                                                , CreatorVisitor2<DbBasedGraph>::OnExamineEdge       (modelRoot, &graphAsString, vertex2AttrMap)
-                                           //   , CreatorVisitor2<DbBasedGraph>::OnForwardOrCrossEdge(modelRoot, &graphAsString, vertex2AttrMap)
-                                                , CreatorVisitor2<DbBasedGraph>::OnFinishVertex      (modelRoot, &graphAsString, vertex2AttrMap)
-                                                )
+                                  CreatorVisitor2<DbBasedGraph>::OnDiscoverVertex    (modelRoot, &graphAsString, vertex2AttrMap)
+                                , CreatorVisitor2<DbBasedGraph>::OnExamineEdge       (modelRoot, &graphAsString, vertex2AttrMap)
+                                , CreatorVisitor2<DbBasedGraph>::OnForwardOrCrossEdge(modelRoot, &graphAsString, vertex2AttrMap)
+                                , CreatorVisitor2<DbBasedGraph>::OnFinishVertex      (modelRoot, &graphAsString, vertex2AttrMap)
+                                )
                           )
           , pm_color
           , start_vertex
Modified: sandbox/icl/libs/xplore/br1/sqlbrowser/browser.cpp
==============================================================================
--- sandbox/icl/libs/xplore/br1/sqlbrowser/browser.cpp	(original)
+++ sandbox/icl/libs/xplore/br1/sqlbrowser/browser.cpp	2012-08-02 09:56:43 EDT (Thu, 02 Aug 2012)
@@ -254,8 +254,7 @@
     DagModel2* dagmo = new DagModel2(); // Dag-Model
     QString dbg_dagString = ogra.makeDagModel(dagmo);
     util::launchMsgBox(dbg_dagString);
-    //dagmo->setDag(ogra);     //Make the Model from a boost::graph internally
-    //dagmo->makeDagModel();
+    ext_tree->setModel(dagmo);
     //--------------------------------------------------------------------------
 
     if(success)