[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