# HG changeset patch # User deba # Date 1159529034 0 # Node ID a24939ee343c2048fb3cb0b35f5ce5f8f3f8118b # Parent c7261e981330b36ced6590fad0dc1a523f04227e findEdge extension also for the BpUGraphs proper handling of loop edges in the UGraph::findUEdge diff -r c7261e981330 -r a24939ee343c lemon/bits/base_extender.h --- a/lemon/bits/base_extender.h Tue Sep 26 12:20:22 2006 +0000 +++ b/lemon/bits/base_extender.h Fri Sep 29 11:23:54 2006 +0000 @@ -35,7 +35,7 @@ /// \ingroup graphbits /// - /// \brief BaseExtender for the UGraphs + /// \brief BaseGraph to BaseUGraph extender template 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; } diff -r c7261e981330 -r a24939ee343c lemon/bits/graph_extender.h --- a/lemon/bits/graph_extender.h Tue Sep 26 12:20:22 2006 +0000 +++ b/lemon/bits/graph_extender.h Fri Sep 29 11:23:54 2006 +0000 @@ -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; + } + } };