[Lemon-commits] [lemon_svn] marci: r1397 - hugo/trunk/src/work/marci

Lemon SVN svn at lemon.cs.elte.hu
Mon Nov 6 20:45:05 CET 2006


Author: marci
Date: Thu Nov 18 15:37:22 2004
New Revision: 1397

Modified:
   hugo/trunk/src/work/marci/makefile
   hugo/trunk/src/work/marci/merge_node_graph_wrapper.h
   hugo/trunk/src/work/marci/merge_node_graph_wrapper_test.cc

Log:
MergeNodeGraphWrapper


Modified: hugo/trunk/src/work/marci/makefile
==============================================================================
--- hugo/trunk/src/work/marci/makefile	(original)
+++ hugo/trunk/src/work/marci/makefile	Thu Nov 18 15:37:22 2004
@@ -4,7 +4,7 @@
 INCLUDEDIRS ?= -I../{jacint,marci,alpar,klao,akos,athos} -I../.. -I.. -I$(BOOSTROOT)
 
 LEDABINARIES = leda_graph_demo leda_bfs_dfs max_bipartite_matching_demo
-BINARIES = bfsit_vs_byhand max_flow_demo bfs_mm_test#merge_node_graph_wrapper_test sub_graph_wrapper_demo.cc graph_wrapper_time iterator_bfs_demo macro_test lg_vs_sg_vs_sg bipartite_graph_wrapper_test bipartite_matching_demo top_sort_test max_flow_1 proba7 proba10 
+BINARIES = merge_node_graph_wrapper_test# bfsit_vs_byhand max_flow_demo bfs_mm_test# sub_graph_wrapper_demo.cc graph_wrapper_time iterator_bfs_demo macro_test lg_vs_sg_vs_sg bipartite_graph_wrapper_test bipartite_matching_demo top_sort_test max_flow_1 proba7 proba10 
 #BINARIES = preflow_bug
 #gw_vs_not preflow_demo_boost edmonds_karp_demo_boost preflow_demo_jacint preflow_demo_athos edmonds_karp_demo_alpar preflow_demo_leda
 

Modified: hugo/trunk/src/work/marci/merge_node_graph_wrapper.h
==============================================================================
--- hugo/trunk/src/work/marci/merge_node_graph_wrapper.h	(original)
+++ hugo/trunk/src/work/marci/merge_node_graph_wrapper.h	Thu Nov 18 15:37:22 2004
@@ -23,16 +23,28 @@
 #include <lemon/graph_wrapper.h>
 #include <iostream>
 
+#include <boost/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+
 namespace lemon {
 
+  template <class _Graph1>
+  class P1 : public GraphWrapperBase<_Graph1> {
+  };
+
+  template <class _Graph2>
+  class P2 : public GraphWrapperBase<_Graph2> {
+  };
+
   template <typename _Graph1, typename _Graph2, typename Enable=void>
   class MergeNodeGraphWrapperBase : 
-    public GraphWrapperBase<_Graph1>, public GraphWrapperBase<_Graph2> {
+    public P1<_Graph1>, public P2<_Graph2> {
   public:
+    void print() const { std::cout << "generic" << std::endl; }
     typedef _Graph1 Graph1;
     typedef _Graph2 Graph2;
-    typedef GraphWrapperBase<_Graph1> Parent1;
-    typedef GraphWrapperBase<_Graph2> Parent2;
+    typedef P1<_Graph1> Parent1;
+    typedef P2<_Graph2> Parent2;
     typedef typename Parent1::Node Graph1Node;
     typedef typename Parent2::Node Graph2Node;
   protected:
@@ -149,6 +161,72 @@
 
   };
 
+  template <typename _Graph1, typename _Graph2>
+  class MergeNodeGraphWrapperBase<
+    _Graph1, _Graph2, typename boost::enable_if<
+    boost::is_same<typename _Graph1::Node, typename _Graph2::Node> >::type> : 
+    public P1<_Graph1>, public P2<_Graph2> {
+  public :
+    void print() const { std::cout << "same" << std::endl; }
+    typedef _Graph1 Graph1;
+    typedef _Graph2 Graph2;
+    typedef P1<_Graph1> Parent1;
+    typedef P2<_Graph2> Parent2;
+    typedef typename Parent1::Node Graph1Node;
+    typedef typename Parent2::Node Graph2Node;
+  protected:
+    MergeNodeGraphWrapperBase() { }
+  public:
+    class Node { };
+    class Edge { };
+    void first() const;
+    void next() const;
+  };
+
+  template <typename _Graph1, typename _Graph2>
+  class MergeNodeGraphWrapperBase<
+    _Graph1, _Graph2, typename boost::enable_if<
+    boost::is_base_and_derived<typename _Graph1::Node, typename _Graph2::Node> >::type> : 
+    public P1<_Graph1>, public P2<_Graph2> {
+  public :
+    void print() const { std::cout << "2. nagyobb" << std::endl; }
+    typedef _Graph1 Graph1;
+    typedef _Graph2 Graph2;
+    typedef P1<_Graph1> Parent1;
+    typedef P2<_Graph2> Parent2;
+    typedef typename Parent1::Node Graph1Node;
+    typedef typename Parent2::Node Graph2Node;
+  protected:
+    MergeNodeGraphWrapperBase() { }
+  public:
+    class Node { };
+    class Edge { };
+    void first() const;
+    void next() const;
+  };
+
+  template <typename _Graph1, typename _Graph2>
+  class MergeNodeGraphWrapperBase<
+    _Graph1, _Graph2, typename boost::enable_if<
+    boost::is_base_and_derived<typename _Graph2::Node, typename _Graph1::Node> >::type> : 
+    public P1<_Graph1>, public P2<_Graph2> {
+  public :
+    void print() const { std::cout << "1. nagyobb" << std::endl; }
+    typedef _Graph1 Graph1;
+    typedef _Graph2 Graph2;
+    typedef P1<_Graph1> Parent1;
+    typedef P2<_Graph2> Parent2;
+    typedef typename Parent1::Node Graph1Node;
+    typedef typename Parent2::Node Graph2Node;
+  protected:
+    MergeNodeGraphWrapperBase() { }
+  public:
+    class Node { };
+    class Edge { };
+    void first() const;
+    void next() const;
+  };
+
 
   template <typename _Graph1, typename _Graph2, typename Enable=void>
   class MergeNodeGraphWrapper : public 

Modified: hugo/trunk/src/work/marci/merge_node_graph_wrapper_test.cc
==============================================================================
--- hugo/trunk/src/work/marci/merge_node_graph_wrapper_test.cc	(original)
+++ hugo/trunk/src/work/marci/merge_node_graph_wrapper_test.cc	Thu Nov 18 15:37:22 2004
@@ -9,6 +9,12 @@
 
 using namespace lemon;
 
+class Graph3 : ListGraph {
+public:
+  class Node : public ListGraph::Node { };
+  class Edge { };
+};
+
 int main() {
   typedef SmartGraph Graph1;
   typedef ListGraph Graph2;
@@ -38,4 +44,37 @@
   for (Graph2::NodeIt n(h); n!=INVALID; ++n) { 
     cout << nm[n] << endl;
   }
+
+  gw.print();
+
+  {
+//    typedef SmartGraph Graph1;
+    typedef ListGraph Graph1;
+    typedef ListGraph Graph2;
+    Graph1 g;
+    Graph2 h;
+    typedef MergeNodeGraphWrapper<Graph1, Graph2> GW;
+    GW gw(g, h);    
+    gw.print();
+  }
+  {
+//    typedef SmartGraph Graph1;
+    typedef Graph3 Graph1;
+    typedef ListGraph Graph2;
+    Graph1 g;
+    Graph2 h;
+    typedef MergeNodeGraphWrapper<Graph1, Graph2> GW;
+    GW gw(g, h);    
+    gw.print();
+  }
+  {
+//    typedef SmartGraph Graph1;
+    typedef ListGraph Graph1;
+    typedef Graph3 Graph2;
+    Graph1 g;
+    Graph2 h;
+    typedef MergeNodeGraphWrapper<Graph1, Graph2> GW;
+    GW gw(g, h);    
+    gw.print();
+  }
 }



More information about the Lemon-commits mailing list