[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