changes.
[IRC.git] / Robust / src / Analysis / SSJava / SSJavaLattice.java
index c7b89709142052a64b51db96a750558a38ca59eb..2611d9f796faaceb35e3ea6264bd87ffe57552e1 100644 (file)
@@ -27,6 +27,21 @@ public class SSJavaLattice<T> extends Lattice<T> {
   public boolean isSharedLoc(T loc) {
     return sharedLocSet.contains(loc);
   }
+  
+  public Set<T> getElementSet(){
+    Set<T> set=new HashSet<T>();
+    
+    Set<T> keySet=getKeySet();
+    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
+      T key = (T) iterator.next();
+      set.add(key);
+      set.addAll(getTable().get(key));
+    }
+    
+    set.remove(getTopItem());
+    set.remove(getBottomItem());
+    return set;
+  }
 
   public boolean addRelationHigherToLower(T higher, T lower) {
 
@@ -149,6 +164,34 @@ public class SSJavaLattice<T> extends Lattice<T> {
 
   }
 
+  public void remove(T loc) {
+
+    Set<T> keySet = getKeySet();
+
+    Set<T> inSet = new HashSet<T>();
+    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
+      T keyElement = (T) iterator.next();
+      Set<T> connectedSet = get(keyElement);
+      if (connectedSet.contains(loc)) {
+        inSet.add(loc);
+        connectedSet.remove(loc);
+      }
+    }
+
+    Set<T> outSet = get(loc);
+
+    for (Iterator iterator = inSet.iterator(); iterator.hasNext();) {
+      T in = (T) iterator.next();
+      for (Iterator iterator2 = outSet.iterator(); iterator2.hasNext();) {
+        T out = (T) iterator2.next();
+        put(in, out);
+      }
+    }
+
+    getTable().remove(loc);
+
+  }
+
   public void substituteLocation(T oldLoc, T newLoc) {
     // the new location is going to take all relations of the old location
     if (!getKeySet().contains(newLoc)) {