changes: generated annotated code but it still causes type errors + re-formatting...
[IRC.git] / Robust / src / Analysis / SSJava / NodeTupleSet.java
index 30fb1fb852adbb4e2ec55d50976fafdb4c4be14f..52384828de15df06bbe46a614b647041a1675a73 100644 (file)
 package Analysis.SSJava;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import IR.Descriptor;
 
 public class NodeTupleSet {
 
-  private Set<NTuple<Descriptor>> set;
+  private ArrayList<NTuple<Descriptor>> list;
+
+  private ArrayList<NTuple<Location>> globalLocTupleList;
+
+  private NTuple<Descriptor> baseDescTuple;
 
   public NodeTupleSet() {
-    set = new HashSet<NTuple<Descriptor>>();
+    list = new ArrayList<NTuple<Descriptor>>();
+    globalLocTupleList = new ArrayList<NTuple<Location>>();
   }
 
   public void addTuple(NTuple<Descriptor> tuple) {
 
-    // need to add additional elements because we need to create edges even from
-    // the base
-    // for example, if we have input <a,b,c>, we need to add additional element
-    // <a,b> and <a> to the set
+    for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+      NTuple<Descriptor> t = (NTuple<Descriptor>) iterator.next();
+      if (t.equals(tuple)) {
+        return;
+      }
+    }
+
+    list.add(tuple);
+  }
+
+  public void setMethodInvokeBaseDescTuple(NTuple<Descriptor> in) {
+    baseDescTuple = in;
+  }
 
-    // NTuple<Descriptor> cur = new NTuple<Descriptor>();
-    // for (int i = 0; i < tuple.size(); i++) {
-    // Descriptor d = tuple.get(i);
-    // cur.add(d);
-    // set.add(new NTuple<Descriptor>(cur));
-    // }
+  public NTuple<Descriptor> getBaseDesc() {
+    return baseDescTuple;
+  }
 
-    set.add(tuple);
+  public void addGlobalFlowTuple(NTuple<Location> tuple) {
+    System.out.println("-----add global value flow tuple=" + tuple);
+    globalLocTupleList.add(tuple);
+  }
+
+  public void addGlobalFlowTupleSet(ArrayList<NTuple<Location>> in) {
+    System.out.println("-----add global value flow in=" + in);
+    globalLocTupleList.addAll(in);
+  }
+
+  public Iterator<NTuple<Location>> globalIterator() {
+    return globalLocTupleList.iterator();
+  }
+
+  public void removeTuple(NTuple<Descriptor> tuple) {
+    list.remove(tuple);
   }
 
   public Iterator<NTuple<Descriptor>> iterator() {
-    return set.iterator();
+    return list.iterator();
   }
 
   public String toString() {
-    return set.toString();
+    String str = list.toString();
+
+    if (globalLocTupleList.size() > 0) {
+      str += " GlobalFlow=" + globalLocTupleList.toString();
+    }
+
+    return str;
   }
 
   public Set<NTuple<Descriptor>> getSet() {
+    Set<NTuple<Descriptor>> set = new HashSet<NTuple<Descriptor>>();
+    set.addAll(list);
     return set;
   }
 
   public void addTupleSet(NodeTupleSet in) {
-    set.addAll(in.getSet());
+    if (in != null) {
+      for (Iterator iterator = in.iterator(); iterator.hasNext();) {
+        NTuple<Descriptor> inTuple = (NTuple<Descriptor>) iterator.next();
+        addTuple(inTuple);
+      }
+    }
+  }
+
+  public int size() {
+    return list.size();
+  }
+
+  public void clear() {
+    list.clear();
+  }
+
+  public int globalLocTupleSize() {
+    return globalLocTupleList.size();
+  }
+
+  private void setGlobalLocTupleList(ArrayList<NTuple<Location>> in) {
+    globalLocTupleList = in;
+  }
+
+  public ArrayList<NTuple<Location>> getGlobalLocTupleSet() {
+    return globalLocTupleList;
+  }
+
+  private void setDescTupleList(ArrayList<NTuple<Descriptor>> in) {
+    list = in;
+  }
+
+  public NodeTupleSet clone() {
+    NodeTupleSet set = new NodeTupleSet();
+    set.setDescTupleList((ArrayList<NTuple<Descriptor>>) list.clone());
+    set.setGlobalLocTupleList((ArrayList<NTuple<Location>>) globalLocTupleList.clone());
+    return set;
   }
 }