lemon/bits/base_extender.h
changeset 2222 a24939ee343c
parent 2187 a54a2dd03f03
child 2231 06faf3f06d67
     1.1 --- a/lemon/bits/base_extender.h	Tue Sep 26 12:20:22 2006 +0000
     1.2 +++ b/lemon/bits/base_extender.h	Fri Sep 29 11:23:54 2006 +0000
     1.3 @@ -35,7 +35,7 @@
     1.4  
     1.5    /// \ingroup graphbits
     1.6    ///
     1.7 -  /// \brief BaseExtender for the UGraphs
     1.8 +  /// \brief BaseGraph to BaseUGraph extender
     1.9    template <typename Base>
    1.10    class UndirGraphExtender : public Base {
    1.11  
    1.12 @@ -238,7 +238,7 @@
    1.13        return Parent::edgeNum();
    1.14      }
    1.15  
    1.16 -    Edge findEdge(Node source, Node target, Edge prev) const {
    1.17 +    Edge findEdge(Node source, Node target, Edge prev = INVALID) const {
    1.18        if (prev == INVALID) {
    1.19  	UEdge edge = Parent::findEdge(source, target);
    1.20  	if (edge != INVALID) return direct(edge, true);
    1.21 @@ -256,20 +256,24 @@
    1.22        return INVALID;
    1.23      }
    1.24  
    1.25 -    UEdge findUEdge(Node source, Node target, UEdge prev) const {
    1.26 -      if (prev == INVALID) {
    1.27 -	UEdge edge = Parent::findEdge(source, target);
    1.28 -	if (edge != INVALID) return edge;
    1.29 -	edge = Parent::findEdge(target, source);
    1.30 -	if (edge != INVALID) return edge;
    1.31 -      } else if (Parent::source(prev) == source) {
    1.32 -	UEdge edge = Parent::findEdge(source, target, prev);
    1.33 -	if (edge != INVALID) return edge;
    1.34 -	edge = Parent::findEdge(target, source);
    1.35 -	if (edge != INVALID) return edge;	
    1.36 +    UEdge findUEdge(Node source, Node target, UEdge prev = INVALID) const {
    1.37 +      if (source != target) {
    1.38 +        if (prev == INVALID) {
    1.39 +          UEdge edge = Parent::findEdge(source, target);
    1.40 +          if (edge != INVALID) return edge;
    1.41 +          edge = Parent::findEdge(target, source);
    1.42 +          if (edge != INVALID) return edge;
    1.43 +        } else if (Parent::source(prev) == source) {
    1.44 +          UEdge edge = Parent::findEdge(source, target, prev);
    1.45 +          if (edge != INVALID) return edge;
    1.46 +          edge = Parent::findEdge(target, source);
    1.47 +          if (edge != INVALID) return edge;	
    1.48 +        } else {
    1.49 +          UEdge edge = Parent::findEdge(target, source, prev);
    1.50 +          if (edge != INVALID) return edge;	      
    1.51 +        }
    1.52        } else {
    1.53 -	UEdge edge = Parent::findEdge(target, source, prev);
    1.54 -	if (edge != INVALID) return edge;	      
    1.55 +        return Parent::findEdge(source, target, prev);
    1.56        }
    1.57        return INVALID;
    1.58      }