00001 00005 package edu.mit.csail.sdg.squander.absstate; 00006 00007 import java.util.HashMap; 00008 import java.util.Iterator; 00009 import java.util.Map; 00010 00011 import edu.mit.csail.sdg.squander.spec.JField; 00012 00013 00019 public class ObjAbsState implements Iterable<FieldValue> { 00020 00021 private final Object obj; 00022 00024 private Map<String, FieldValue> specFields = new HashMap<String, FieldValue>(); 00025 00026 public ObjAbsState(Object obj) { 00027 this.obj = obj; 00028 } 00029 00030 public Object getObj() { 00031 return obj; 00032 } 00033 00034 @Override 00035 public Iterator<FieldValue> iterator() { 00036 return specFields.values().iterator(); 00037 } 00038 00039 public void add(FieldValue e) { 00040 specFields.put(e.jfield().name(), e); 00041 } 00042 00043 public FieldValue getSpecField(String name) { 00044 return specFields.get(name); 00045 } 00046 00047 public FieldValue getOrAddSpecField(JField jf, int arity) { 00048 String name = jf.name(); 00049 FieldValue sf = getSpecField(name); 00050 if (sf == null) { 00051 sf = new FieldValue(jf, arity); 00052 specFields.put(name, sf); 00053 } 00054 return sf; 00055 } 00056 00057 @Override 00058 public String toString() { 00059 StringBuilder sb = new StringBuilder("obj: " + obj + "\n"); 00060 for (String name : specFields.keySet()) { 00061 sb.append(specFields.get(name)).append("\n"); 00062 } 00063 return sb.toString(); 00064 } 00065 00066 }