1 19 20 22 package edu.umd.cs.findbugs.graph; 23 24 import java.util.IdentityHashMap ; 25 import java.util.Iterator ; 26 27 30 public class Transpose 31 < 32 GraphType extends Graph<EdgeType, VertexType>, 33 EdgeType extends GraphEdge<EdgeType, VertexType>, 34 VertexType extends GraphVertex<VertexType> 35 > { 36 37 private IdentityHashMap <VertexType, VertexType> m_origToTransposeMap; 38 private IdentityHashMap <VertexType, VertexType> m_transposeToOrigMap; 39 40 43 public Transpose() { 44 m_origToTransposeMap = new IdentityHashMap <VertexType, VertexType>(); 45 m_transposeToOrigMap = new IdentityHashMap <VertexType, VertexType>(); 46 } 47 48 56 public GraphType transpose(GraphType orig, GraphToolkit<GraphType, EdgeType, VertexType> toolkit) { 57 58 GraphType trans = toolkit.createGraph(); 59 60 for (Iterator <VertexType> i = orig.vertexIterator(); i.hasNext();) { 65 VertexType v = i.next(); 66 67 VertexType dupVertex = toolkit.duplicateVertex(v); 70 dupVertex.setLabel(v.getLabel()); 71 trans.addVertex(v); 72 73 m_origToTransposeMap.put(v, dupVertex); 75 m_transposeToOrigMap.put(dupVertex, v); 76 } 77 trans.setNumVertexLabels(orig.getNumVertexLabels()); 78 79 for (Iterator <EdgeType> i = orig.edgeIterator(); i.hasNext();) { 82 EdgeType e = i.next(); 83 84 VertexType transSource = m_origToTransposeMap.get(e.getTarget()); 85 VertexType transTarget = m_origToTransposeMap.get(e.getSource()); 86 87 EdgeType dupEdge = trans.createEdge(transSource, transTarget); 88 dupEdge.setLabel(e.getLabel()); 89 90 toolkit.copyEdge(e, dupEdge); 92 } 93 trans.setNumEdgeLabels(orig.getNumEdgeLabels()); 94 95 return trans; 96 97 } 98 99 106 public VertexType getTransposedGraphVertex(VertexType v) { 107 return m_origToTransposeMap.get(v); 108 } 109 110 117 public VertexType getOriginalGraphVertex(VertexType v) { 118 return m_transposeToOrigMap.get(v); 119 } 120 121 } 122 123 | Popular Tags |