1 19 20 25 26 package soot.jimple.toolkits.annotation.arraycheck; 27 28 import soot.toolkits.graph.*; 29 import java.util.*; 30 31 37 class ExtendedHashMutableDirectedGraph extends HashMutableDirectedGraph 38 { 39 public ExtendedHashMutableDirectedGraph() {} 40 41 44 public void addEdge (Object from, Object to) 45 { 46 if (!super.containsNode(from)) 47 super.addNode(from); 48 49 if (!super.containsNode(to)) 50 super.addNode(to); 51 52 super.addEdge(from, to); 53 } 54 55 56 59 public void addMutualEdge (Object from, Object to) 60 { 61 if (!super.containsNode(from)) 62 super.addNode(from); 63 64 if (!super.containsNode(to)) 65 super.addNode(to); 66 67 super.addEdge(from, to); 68 super.addEdge(to, from); 69 } 70 71 74 public void skipNode(Object node) 75 { 76 if (!super.containsNode(node)) 77 return; 78 79 Object [] preds = getPredsOf(node).toArray(); 80 Object [] succs = getSuccsOf(node).toArray(); 81 82 83 for (int i=0; i<preds.length; i++) 84 { 85 for (int j=0; j<succs.length; j++) 86 { 87 if (preds[i] != succs[j]) 88 super.addEdge(preds[i], succs[j]); 89 } 90 } 91 92 for (int i=0; i<preds.length; i++) 93 { 94 super.removeEdge(preds[i], node); 95 } 96 97 for (int j=0; j<succs.length; j++) 98 { 99 super.removeEdge(node, succs[j]); 100 } 101 102 super.removeNode(node); 103 } 104 105 public void mergeWith(ExtendedHashMutableDirectedGraph other) 106 { 107 List nodes = other.getNodes(); 108 109 Iterator nodesIt = nodes.iterator(); 110 111 while (nodesIt.hasNext()) 112 { 113 Object node = nodesIt.next(); 114 115 List succs = other.getSuccsOf(node); 116 117 Iterator succsIt = succs.iterator(); 118 119 while (succsIt.hasNext()) 120 { 121 Object succ = succsIt.next(); 122 123 this.addEdge(node, succ); 124 } 125 } 126 } 127 128 public String toString() 129 { 130 String rtn = "Graph:\n"; 131 132 List nodes = super.getNodes(); 133 134 Iterator nodesIt = nodes.iterator(); 135 136 while (nodesIt.hasNext()) 137 { 138 Object node = nodesIt.next(); 139 140 List succs = super.getSuccsOf(node); 141 142 Iterator succsIt = succs.iterator(); 143 144 while (succsIt.hasNext()) 145 { 146 Object succ = succsIt.next(); 147 148 rtn = rtn + node + "\t --- \t" + succ +"\n"; 149 } 150 } 151 152 return rtn; 153 } 154 } 155 156 157 158 159 160 161 162 163 | Popular Tags |