[Lemon-commits] [lemon_svn] deba: r2573 - in hugo/trunk: lemon lemon/concept test

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


Author: deba
Date: Thu Feb 23 09:55:54 2006
New Revision: 2573

Modified:
   hugo/trunk/lemon/concept/ugraph.h
   hugo/trunk/lemon/graph_adaptor.h
   hugo/trunk/lemon/ugraph_adaptor.h
   hugo/trunk/test/graph_adaptor_test.cc

Log:
Renaming to be convient to the naming of the adaptors
Concept checking of the ugraph adaptors




Modified: hugo/trunk/lemon/concept/ugraph.h
==============================================================================
--- hugo/trunk/lemon/concept/ugraph.h	(original)
+++ hugo/trunk/lemon/concept/ugraph.h	Thu Feb 23 09:55:54 2006
@@ -864,6 +864,10 @@
       void nextIn(Edge&) const {}
 
 
+      void firstInc(UEdge &, bool &, const Node &) const {}
+
+      void nextInc(UEdge &, bool &) const {}
+
       /// \brief Base node of the iterator
       ///
       /// Returns the base node (the source in this case) of the iterator

Modified: hugo/trunk/lemon/graph_adaptor.h
==============================================================================
--- hugo/trunk/lemon/graph_adaptor.h	(original)
+++ hugo/trunk/lemon/graph_adaptor.h	Thu Feb 23 09:55:54 2006
@@ -698,13 +698,13 @@
   };
 
   template <typename _Graph>
-  class UndirectGraphAdaptorBase : 
+  class UndirGraphAdaptorBase : 
     public UGraphBaseExtender<GraphAdaptorBase<_Graph> > {
   public:
     typedef _Graph Graph;
     typedef UGraphBaseExtender<GraphAdaptorBase<_Graph> > Parent;
   protected:
-    UndirectGraphAdaptorBase() : Parent() { }
+    UndirGraphAdaptorBase() : Parent() { }
   public:
     typedef typename Parent::UEdge UEdge;
     typedef typename Parent::Edge Edge;
@@ -712,17 +712,17 @@
     template <typename T>
     class EdgeMap {
     protected:
-      const UndirectGraphAdaptorBase<_Graph>* g;
+      const UndirGraphAdaptorBase<_Graph>* g;
       template <typename TT> friend class EdgeMap;
       typename _Graph::template EdgeMap<T> forward_map, backward_map; 
     public:
       typedef T Value;
       typedef Edge Key;
       
-      EdgeMap(const UndirectGraphAdaptorBase<_Graph>& _g) : g(&_g), 
+      EdgeMap(const UndirGraphAdaptorBase<_Graph>& _g) : g(&_g), 
 	forward_map(*(g->graph)), backward_map(*(g->graph)) { }
 
-      EdgeMap(const UndirectGraphAdaptorBase<_Graph>& _g, T a) : g(&_g), 
+      EdgeMap(const UndirGraphAdaptorBase<_Graph>& _g, T a) : g(&_g), 
 	forward_map(*(g->graph), a), backward_map(*(g->graph), a) { }
       
       void set(Edge e, T a) { 
@@ -748,10 +748,10 @@
       typedef T Value;
       typedef UEdge Key;
       
-      UEdgeMap(const UndirectGraphAdaptorBase<_Graph>& g) : 
+      UEdgeMap(const UndirGraphAdaptorBase<_Graph>& g) : 
 	map(*(g.graph)) { }
 
-      UEdgeMap(const UndirectGraphAdaptorBase<_Graph>& g, T a) : 
+      UEdgeMap(const UndirGraphAdaptorBase<_Graph>& g, T a) : 
 	map(*(g.graph), a) { }
       
       void set(UEdge e, T a) { 
@@ -773,17 +773,17 @@
   /// 
   /// \author Marton Makai
   template<typename _Graph>
-  class UndirectGraphAdaptor : 
+  class UndirGraphAdaptor : 
     public UGraphAdaptorExtender<
-    UndirectGraphAdaptorBase<_Graph> > {
+    UndirGraphAdaptorBase<_Graph> > {
   public:
     typedef _Graph Graph;
     typedef UGraphAdaptorExtender<
-      UndirectGraphAdaptorBase<_Graph> > Parent;
+      UndirGraphAdaptorBase<_Graph> > Parent;
   protected:
-    UndirectGraphAdaptor() { }
+    UndirGraphAdaptor() { }
   public:
-    UndirectGraphAdaptor(_Graph& _graph) { 
+    UndirGraphAdaptor(_Graph& _graph) { 
       setGraph(_graph);
     }
   };

Modified: hugo/trunk/lemon/ugraph_adaptor.h
==============================================================================
--- hugo/trunk/lemon/ugraph_adaptor.h	(original)
+++ hugo/trunk/lemon/ugraph_adaptor.h	Thu Feb 23 09:55:54 2006
@@ -511,9 +511,6 @@
   /// \brief A graph adaptor for hiding nodes and edges from an undirected 
   /// graph.
   /// 
-  /// \warning Graph adaptors are in even more experimental state than the
-  /// other parts of the lib. Use them at you own risk.
-  /// 
   /// SubUGraphAdaptor shows the undirected graph with filtered node-set and 
   /// edge-set. If the \c checked parameter is true then it filters the edgeset
   /// to do not get invalid edges without source or target.
@@ -528,11 +525,6 @@
   /// Note that \c n is of type \c SubGA::NodeIt, but it can be converted to
   /// \c Graph::Node that is why \c g.id(n) can be applied.
   /// 
-  /// For examples see also the documentation of NodeSubUGraphAdaptor and 
-  /// EdgeSubUGraphAdaptor.
-  /// 
-  /// \author Marton Makai
-
   template<typename _UGraph, typename NodeFilterMap, 
 	   typename UEdgeFilterMap, bool checked = true>
   class SubUGraphAdaptor : 
@@ -553,13 +545,42 @@
     }
   };
 
+  template<typename UGraph, typename NodeFilterMap, typename EdgeFilterMap>
+  SubUGraphAdaptor<const UGraph, NodeFilterMap, EdgeFilterMap>
+  subUGraphAdaptor(const UGraph& graph, 
+                   NodeFilterMap& nfm, EdgeFilterMap& efm) {
+    return SubUGraphAdaptor<const UGraph, NodeFilterMap, EdgeFilterMap>
+      (graph, nfm, efm);
+  }
+
+  template<typename UGraph, typename NodeFilterMap, typename EdgeFilterMap>
+  SubUGraphAdaptor<const UGraph, const NodeFilterMap, EdgeFilterMap>
+  subUGraphAdaptor(const UGraph& graph, 
+                   NodeFilterMap& nfm, EdgeFilterMap& efm) {
+    return SubUGraphAdaptor<const UGraph, const NodeFilterMap, EdgeFilterMap>
+      (graph, nfm, efm);
+  }
+
+  template<typename UGraph, typename NodeFilterMap, typename EdgeFilterMap>
+  SubUGraphAdaptor<const UGraph, NodeFilterMap, const EdgeFilterMap>
+  subUGraphAdaptor(const UGraph& graph, 
+                   NodeFilterMap& nfm, EdgeFilterMap& efm) {
+    return SubUGraphAdaptor<const UGraph, NodeFilterMap, const EdgeFilterMap>
+      (graph, nfm, efm);
+  }
+
+  template<typename UGraph, typename NodeFilterMap, typename EdgeFilterMap>
+  SubUGraphAdaptor<const UGraph, const NodeFilterMap, const EdgeFilterMap>
+  subUGraphAdaptor(const UGraph& graph, 
+                   NodeFilterMap& nfm, EdgeFilterMap& efm) {
+    return SubUGraphAdaptor<const UGraph, const NodeFilterMap, 
+      const EdgeFilterMap>(graph, nfm, efm);
+  }
+
   /// \ingroup graph_adaptors
   ///
-  /// \brief An adaptor for hiding nodes from an undorected graph.
+  /// \brief An adaptor for hiding nodes from an undirected graph.
   ///
-  /// \warning Graph adaptors are in even more experimental state
-  /// than the other
-  /// parts of the lib. Use them at you own risk.
   ///
   /// An adaptor for hiding nodes from an undirected graph.
   /// This adaptor specializes SubUGraphAdaptor in the way that only
@@ -567,7 +588,6 @@
   /// can be filtered. In usual case the checked parameter is true, we get the
   /// induced subgraph. But if the checked parameter is false then we can only
   /// filter only isolated nodes.
-  /// \author Marton Makai
   template<typename _UGraph, typename NodeFilterMap, bool checked = true>
   class NodeSubUGraphAdaptor : 
     public SubUGraphAdaptor<_UGraph, NodeFilterMap, 
@@ -609,8 +629,6 @@
   /// This adaptor specializes SubUGraphAdaptor in the way that
   /// only the edge-set 
   /// can be filtered.
-  ///
-  ///\author Marton Makai
   template<typename _UGraph, typename UEdgeFilterMap>
   class EdgeSubUGraphAdaptor : 
     public SubUGraphAdaptor<_UGraph, ConstMap<typename _UGraph::Node,bool>, 
@@ -643,7 +661,7 @@
   }
 
   template <typename _UGraph, typename _DirectionMap>
-  class DirectUGraphAdaptorBase {
+  class DirUGraphAdaptorBase {
   public:
     
     typedef _UGraph Graph;
@@ -736,19 +754,19 @@
     class NodeMap : public _UGraph::template NodeMap<_Value> {
     public:
       typedef typename _UGraph::template NodeMap<_Value> Parent;
-      explicit NodeMap(const DirectUGraphAdaptorBase& ga) 
+      explicit NodeMap(const DirUGraphAdaptorBase& ga) 
 	: Parent(*ga.graph) { }
-      NodeMap(const DirectUGraphAdaptorBase& ga, const _Value& value)
+      NodeMap(const DirUGraphAdaptorBase& ga, const _Value& value)
 	: Parent(*ga.graph, value) { }
     };
 
     template <typename _Value>
     class EdgeMap : public _UGraph::template UEdgeMap<_Value> {
     public:
-      typedef typename _UGraph::template EdgeMap<_Value> Parent;
-      explicit EdgeMap(const DirectUGraphAdaptorBase& ga) 
+      typedef typename _UGraph::template UEdgeMap<_Value> Parent;
+      explicit EdgeMap(const DirUGraphAdaptorBase& ga) 
 	: Parent(*ga.graph) { }
-      EdgeMap(const DirectUGraphAdaptorBase& ga, const _Value& value)
+      EdgeMap(const DirUGraphAdaptorBase& ga, const _Value& value)
 	: Parent(*ga.graph, value) { }
     };
 
@@ -769,33 +787,43 @@
   };
 
 
-  template<typename _Graph, typename DirectionMap> 
-  class DirectUGraphAdaptor : 
+  /// \ingroup graph_adaptors
+  /// \brief A directed graph is made from a undirected graph by an adaptor
+  ///
+  /// This adaptor gives a direction for each uedge in the undirected graph.
+  /// The direction of the edges stored in the DirectionMap. This map is
+  /// a bool map on the undirected edges. If the uedge is mapped to true
+  /// then the direction of the directed edge will be the same as the
+  /// default direction of the uedge. The edges can be easily reverted
+  /// by the reverseEdge member in the adaptor.  
+  template<typename _Graph, 
+           typename DirectionMap = typename _Graph::template UEdgeMap<bool> > 
+  class DirUGraphAdaptor : 
     public GraphAdaptorExtender<
-    DirectUGraphAdaptorBase<_Graph, DirectionMap> > {
+    DirUGraphAdaptorBase<_Graph, DirectionMap> > {
   public:
     typedef _Graph Graph;
     typedef GraphAdaptorExtender<
-      DirectUGraphAdaptorBase<_Graph, DirectionMap> > Parent;
+      DirUGraphAdaptorBase<_Graph, DirectionMap> > Parent;
   protected:
-    DirectUGraphAdaptor() { }
+    DirUGraphAdaptor() { }
   public:
-    DirectUGraphAdaptor(_Graph& _graph, DirectionMap& _direction_map) { 
+    DirUGraphAdaptor(_Graph& _graph, DirectionMap& _direction_map) { 
       setGraph(_graph);
       setDirectionMap(_direction_map);
     }
   };
 
   template<typename UGraph, typename DirectionMap>
-  DirectUGraphAdaptor<const UGraph, DirectionMap>
-  directUGraphAdaptor(const UGraph& graph, DirectionMap& dm) {
-    return DirectUGraphAdaptor<const UGraph, DirectionMap>(graph, dm);
+  DirUGraphAdaptor<const UGraph, DirectionMap>
+  dirUGraphAdaptor(const UGraph& graph, DirectionMap& dm) {
+    return DirUGraphAdaptor<const UGraph, DirectionMap>(graph, dm);
   }
 
   template<typename UGraph, typename DirectionMap>
-  DirectUGraphAdaptor<const UGraph, const DirectionMap>
-  directUGraphAdaptor(const UGraph& graph, const DirectionMap& dm) {
-    return DirectUGraphAdaptor<const UGraph, const DirectionMap>(graph, dm);
+  DirUGraphAdaptor<const UGraph, const DirectionMap>
+  dirUGraphAdaptor(const UGraph& graph, const DirectionMap& dm) {
+    return DirUGraphAdaptor<const UGraph, const DirectionMap>(graph, dm);
   }
 
 }

Modified: hugo/trunk/test/graph_adaptor_test.cc
==============================================================================
--- hugo/trunk/test/graph_adaptor_test.cc	(original)
+++ hugo/trunk/test/graph_adaptor_test.cc	Thu Feb 23 09:55:54 2006
@@ -26,6 +26,7 @@
 #include<lemon/list_graph.h>
 #include<lemon/full_graph.h>
 #include<lemon/graph_adaptor.h>
+#include<lemon/ugraph_adaptor.h>
 
 #include"test/test_tools.h"
 #include"test/graph_test.h"
@@ -66,8 +67,17 @@
     checkConcept<StaticGraph, ErasingFirstGraphAdaptor<Graph, 
       Graph::NodeMap<Graph::Edge> > >(); 
 
-    /// \bug why does not compile with StaticGraph
-    checkConcept<UGraph, UndirectGraphAdaptor<ListGraph> >();
+    checkConcept<UGraph, UndirGraphAdaptor<Graph> >();
+
+    checkConcept<UGraph, SubUGraphAdaptor<UGraph, 
+      UGraph::NodeMap<bool> , UGraph::UEdgeMap<bool> > >();
+    checkConcept<UGraph, NodeSubUGraphAdaptor<UGraph, 
+      UGraph::NodeMap<bool> > >();
+    checkConcept<UGraph, EdgeSubUGraphAdaptor<UGraph, 
+      UGraph::UEdgeMap<bool> > >();
+
+    checkConcept<StaticGraph, DirUGraphAdaptor<UGraph, 
+      UGraph::UEdgeMap<bool> > >();
   }
   std::cout << __FILE__ ": All tests passed.\n";
 



More information about the Lemon-commits mailing list