commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From simonetrip...@apache.org
Subject svn commit: r1298402 - /commons/sandbox/graph/branches/drop-marker-interfaces-feature/src/main/java/org/apache/commons/graph/flow/DefaultMaxFlowAlgorithmSelector.java
Date Thu, 08 Mar 2012 14:20:49 GMT
Author: simonetripodi
Date: Thu Mar  8 14:20:49 2012
New Revision: 1298402

URL: http://svn.apache.org/viewvc?rev=1298402&view=rev
Log:
resolved compilation issues, used an edge wrapper due to the missing Edge supertype

Modified:
    commons/sandbox/graph/branches/drop-marker-interfaces-feature/src/main/java/org/apache/commons/graph/flow/DefaultMaxFlowAlgorithmSelector.java

Modified: commons/sandbox/graph/branches/drop-marker-interfaces-feature/src/main/java/org/apache/commons/graph/flow/DefaultMaxFlowAlgorithmSelector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/graph/branches/drop-marker-interfaces-feature/src/main/java/org/apache/commons/graph/flow/DefaultMaxFlowAlgorithmSelector.java?rev=1298402&r1=1298401&r2=1298402&view=diff
==============================================================================
--- commons/sandbox/graph/branches/drop-marker-interfaces-feature/src/main/java/org/apache/commons/graph/flow/DefaultMaxFlowAlgorithmSelector.java
(original)
+++ commons/sandbox/graph/branches/drop-marker-interfaces-feature/src/main/java/org/apache/commons/graph/flow/DefaultMaxFlowAlgorithmSelector.java
Thu Mar  8 14:20:49 2012
@@ -27,7 +27,6 @@ import org.apache.commons.graph.Directed
 import org.apache.commons.graph.Mapper;
 import org.apache.commons.graph.VertexPair;
 import org.apache.commons.graph.builder.AbstractGraphConnection;
-import org.apache.commons.graph.model.BaseLabeledWeightedEdge;
 import org.apache.commons.graph.weight.OrderedMonoid;
 
 /**
@@ -66,10 +65,11 @@ final class DefaultMaxFlowAlgorithmSelec
         final WO checkedWeightOperations = checkNotNull( weightOperations, "Weight operations
can not be null to find the max flow in the graph" );
 
         // create flow network
-        final DirectedGraph<V, WE> flowNetwork = newFlowNetwok( graph, checkedWeightOperations
);
+        final DirectedGraph<V, EdgeWrapper<WE>> flowNetwork = newFlowNetwok(
graph, checkedWeightOperations );
 
         // create flow network handler
-        final FlowNetworkHandler<V, WE, W> flowNetworkHandler = new FlowNetworkHandler<V,
WE, W>( flowNetwork, source, target, checkedWeightOperations, weightedEdges );
+        final FlowNetworkHandler<V, EdgeWrapper<WE>, W> flowNetworkHandler =
+                        new FlowNetworkHandler<V, EdgeWrapper<WE>, W>( flowNetwork,
source, target, checkedWeightOperations, new MapperWrapper<WE, W, WO>( checkedWeightOperations,
weightedEdges ) );
 
         // perform depth first search
         visit( flowNetwork ).from( source ).applyingDepthFirstSearch( flowNetworkHandler
);
@@ -93,10 +93,11 @@ final class DefaultMaxFlowAlgorithmSelec
         final WO checkedWeightOperations = checkNotNull( weightOperations, "Weight operations
can not be null to find the max flow in the graph" );
 
         // create flow network
-        final DirectedGraph<V, WE> flowNetwork = newFlowNetwok( graph, checkedWeightOperations
);
+        final DirectedGraph<V, EdgeWrapper<WE>> flowNetwork = newFlowNetwok(
graph, checkedWeightOperations );
 
         // create flow network handler
-        final FlowNetworkHandler<V, WE, W> flowNetworkHandler = new FlowNetworkHandler<V,
WE, W>( flowNetwork, source, target, checkedWeightOperations, weightedEdges );
+        final FlowNetworkHandler<V, EdgeWrapper<WE>, W> flowNetworkHandler =
+                        new FlowNetworkHandler<V, EdgeWrapper<WE>, W>( flowNetwork,
source, target, checkedWeightOperations, new MapperWrapper<WE, W, WO>( checkedWeightOperations,
weightedEdges ) );
 
         // perform breadth first search
         visit( flowNetwork ).from( source ).applyingBreadthFirstSearch( flowNetworkHandler
);
@@ -112,9 +113,9 @@ final class DefaultMaxFlowAlgorithmSelec
         return flowNetworkHandler.onCompleted();
     }
 
-    private <WO extends OrderedMonoid<W>> DirectedGraph<V, WE> newFlowNetwok(
final G graph, final WO weightOperations )
+    private <WO extends OrderedMonoid<W>> DirectedGraph<V, EdgeWrapper<WE>>
newFlowNetwok( final G graph, final WO weightOperations )
     {
-        return newDirectedMutableGraph( new AbstractGraphConnection<V, WE>()
+        return newDirectedMutableGraph( new AbstractGraphConnection<V, EdgeWrapper<WE>>()
         {
             @Override
             public void connect()
@@ -131,18 +132,63 @@ final class DefaultMaxFlowAlgorithmSelec
                     V head = edgeVertices.getHead();
                     V tail = edgeVertices.getTail();
 
-                    addEdge( edge ).from( head ).to( tail );
+                    addEdge( new EdgeWrapper<WE>( edge ) ).from( head ).to( tail );
 
                     if ( graph.getEdge( tail, head ) == null )
                     {
-                        // FIXME!!!
                         // complete the flow network with a zero-capacity inverse edge
-                        addEdge( new BaseLabeledWeightedEdge<W>( "Inverse edge for
" + edge, weightOperations.zero() ) )
-                            .from( tail ).to( head );
+                        addEdge( new EdgeWrapper<WE>() ).from( tail ).to( head );
                     }
                 }
             }
         } );
     }
 
+    private static final class EdgeWrapper<WE>
+    {
+
+        private final WE wrapped;
+
+        public EdgeWrapper()
+        {
+            this( null );
+        }
+
+        public EdgeWrapper( WE wrapped )
+        {
+            this.wrapped = wrapped;
+        }
+
+        public WE getWrapped()
+        {
+            return wrapped;
+        }
+
+    }
+
+    private static final class MapperWrapper<WE, W, WO extends OrderedMonoid<W>>
+        implements Mapper<EdgeWrapper<WE>, W>
+    {
+
+        private final WO weightOperations;
+
+        private final Mapper<WE, W> weightedEdges;
+
+        public MapperWrapper( WO weightOperations, Mapper<WE, W> weightedEdges )
+        {
+            this.weightOperations = weightOperations;
+            this.weightedEdges = weightedEdges;
+        }
+
+        public W map( EdgeWrapper<WE> input )
+        {
+            if ( input.getWrapped() == null )
+            {
+                weightOperations.zero();
+            }
+            return weightedEdges.map( input.getWrapped() );
+        }
+
+    }
+
 }



Mime
View raw message