X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FSSJava%2FSSJavaLattice.java;h=406b72eca8c2671f0f1e326d4c72039819976848;hb=74da1d0f330468f65e6d141d1732fc1f6e0bb38e;hp=ae875777acf78d4982b2eebe9dd31353dad79a0d;hpb=3e70000b1b45e43a58585fc075ee721adf2a0af0;p=IRC.git diff --git a/Robust/src/Analysis/SSJava/SSJavaLattice.java b/Robust/src/Analysis/SSJava/SSJavaLattice.java index ae875777..406b72ec 100644 --- a/Robust/src/Analysis/SSJava/SSJavaLattice.java +++ b/Robust/src/Analysis/SSJava/SSJavaLattice.java @@ -336,8 +336,6 @@ public class SSJavaLattice extends Lattice { } } - - public SSJavaLattice clone() { SSJavaLattice clone = new SSJavaLattice(getTopItem(), getBottomItem()); @@ -346,4 +344,39 @@ public class SSJavaLattice extends Lattice { return clone; } + public int countPaths() { + T bottom = getBottomItem(); + + Map> map = getIncomingElementMap(); + Map countMap = new HashMap(); + + Set visited = new HashSet(); + visited.add(bottom); + + countMap.put(bottom, new Integer(1)); + recur_countPaths(bottom, map, countMap, visited); + if (countMap.containsKey(getTopItem())) { + return countMap.get(getTopItem()); + } + return 0; + } + + private void recur_countPaths(T cur, Map> map, Map countMap, Set visited) { + int curCount = countMap.get(cur).intValue(); + Set inSet = map.get(cur); + + for (Iterator iterator = inSet.iterator(); iterator.hasNext();) { + T in = (T) iterator.next(); + int inCount = 0; + if (countMap.containsKey(in)) { + inCount = countMap.get(in).intValue(); + } + inCount += curCount; + countMap.put(in, inCount); + if (visited.containsAll(get(in))) { + visited.add(in); + recur_countPaths(in, map, countMap, visited); + } + } + } }