package GPL;
//dja: added for performance improvement
import java.util.HashMap;
import java.util.Map;
import java.util.LinkedList;
// *********************************************************
public class Graph {
public Graph ComputeTranspose( Graph the_graph )
{
int i;
String theName;
//dja: added for performance improvement
Map newVertices = new HashMap( );
// Creating the new Graph
Graph newGraph = new Graph();
// Creates and adds the vertices with the same name
for ( VertexIter vxiter = getVertices(); vxiter.hasNext(); )
{
theName = vxiter.next().getName();
//dja: changes for performance improvement
Vertex v = new Vertex( ).assignName( theName );
// newGraph.addVertex( new Vertex().assignName( theName ) );
newGraph.addVertex( v );
//dja: added for performance improvement
newVertices.put( theName, v );
}
Vertex theVertex, newVertex;
Vertex theNeighbor;
Vertex newAdjacent;
EdgeIfc newEdge;
// adds the transposed edges
// dja: added line below for performance improvements
VertexIter newvxiter = newGraph.getVertices( );
for ( VertexIter vxiter = getVertices(); vxiter.hasNext(); )
{
// theVertex is the original source vertex
// the newAdjacent is the reference in the newGraph to theVertex
theVertex = vxiter.next();
// dja: performance improvement fix
// newAdjacent = newGraph.findsVertex( theVertex.getName() );
newAdjacent = newvxiter.next( );
for( VertexIter neighbors = theVertex.getNeighbors(); neighbors.hasNext(); )
{
// Gets the neighbor object
theNeighbor = neighbors.next();
// the new Vertex is the vertex that was adjacent to theVertex
// but now in the new graph
// dja: performance improvement fix
// newVertex = newGraph.findsVertex( theNeighbor.getName() );
newVertex = ( Vertex ) newVertices.get( theNeighbor.getName( ) );
// Creates a new Edge object and adjusts the adornments
newEdge = newGraph.addEdge( newVertex, newAdjacent );
//newEdge.adjustAdorns( theNeighbor.edge );
// Adds the new Neighbor object with the newly formed edge
// newNeighbor = new $TEqn.Neighbor(newAdjacent, newEdge);
// (newVertex.neighbors).add(newNeighbor);
} // all adjacentNeighbors
} // all the vertices
return newGraph;
} // of ComputeTranspose
}