[Lemon-commits] [lemon_svn] deba: r2962 - hugo/trunk/lemon/bits

Lemon SVN svn at lemon.cs.elte.hu
Mon Nov 6 21:51:30 CET 2006


Author: deba
Date: Fri Sep 29 13:23:54 2006
New Revision: 2962

Modified:
   hugo/trunk/lemon/bits/base_extender.h
   hugo/trunk/lemon/bits/graph_extender.h

Log:
findEdge extension also for the BpUGraphs
proper handling of loop edges in the UGraph::findUEdge



Modified: hugo/trunk/lemon/bits/base_extender.h
==============================================================================
--- hugo/trunk/lemon/bits/base_extender.h	(original)
+++ hugo/trunk/lemon/bits/base_extender.h	Fri Sep 29 13:23:54 2006
@@ -35,7 +35,7 @@
 
   /// \ingroup graphbits
   ///
-  /// \brief BaseExtender for the UGraphs
+  /// \brief BaseGraph to BaseUGraph extender
   template <typename Base>
   class UndirGraphExtender : public Base {
 
@@ -238,7 +238,7 @@
       return Parent::edgeNum();
     }
 
-    Edge findEdge(Node source, Node target, Edge prev) const {
+    Edge findEdge(Node source, Node target, Edge prev = INVALID) const {
       if (prev == INVALID) {
 	UEdge edge = Parent::findEdge(source, target);
 	if (edge != INVALID) return direct(edge, true);
@@ -256,20 +256,24 @@
       return INVALID;
     }
 
-    UEdge findUEdge(Node source, Node target, UEdge prev) const {
-      if (prev == INVALID) {
-	UEdge edge = Parent::findEdge(source, target);
-	if (edge != INVALID) return edge;
-	edge = Parent::findEdge(target, source);
-	if (edge != INVALID) return edge;
-      } else if (Parent::source(prev) == source) {
-	UEdge edge = Parent::findEdge(source, target, prev);
-	if (edge != INVALID) return edge;
-	edge = Parent::findEdge(target, source);
-	if (edge != INVALID) return edge;	
+    UEdge findUEdge(Node source, Node target, UEdge prev = INVALID) const {
+      if (source != target) {
+        if (prev == INVALID) {
+          UEdge edge = Parent::findEdge(source, target);
+          if (edge != INVALID) return edge;
+          edge = Parent::findEdge(target, source);
+          if (edge != INVALID) return edge;
+        } else if (Parent::source(prev) == source) {
+          UEdge edge = Parent::findEdge(source, target, prev);
+          if (edge != INVALID) return edge;
+          edge = Parent::findEdge(target, source);
+          if (edge != INVALID) return edge;	
+        } else {
+          UEdge edge = Parent::findEdge(target, source, prev);
+          if (edge != INVALID) return edge;	      
+        }
       } else {
-	UEdge edge = Parent::findEdge(target, source, prev);
-	if (edge != INVALID) return edge;	      
+        return Parent::findEdge(source, target, prev);
       }
       return INVALID;
     }

Modified: hugo/trunk/lemon/bits/graph_extender.h
==============================================================================
--- hugo/trunk/lemon/bits/graph_extender.h	(original)
+++ hugo/trunk/lemon/bits/graph_extender.h	Fri Sep 29 13:23:54 2006
@@ -1523,6 +1523,14 @@
       bnode_notifier.clear(); 
     }
 
+    Edge findEdge(Node u, Node v, Edge prev = INVALID) const {
+      UEdge uedge = Parent::findUEdge(u, v, prev);
+      if (uedge != INVALID) {
+        return direct(uedge, Parent::aNode(u));
+      } else {
+        return INVALID;
+      }
+    }
 
   };
 



More information about the Lemon-commits mailing list