00001 00005 package edu.mit.csail.sdg.squander.engine; 00006 00007 import java.util.ArrayList; 00008 import java.util.Collections; 00009 import java.util.LinkedHashMap; 00010 import java.util.List; 00011 00012 import edu.mit.csail.sdg.squander.serializer.AbstractHeap; 00013 00014 00022 public class Heap extends AbstractHeap { 00023 00029 private final LinkedHashMap<Integer, Object> heapObjects; 00030 00031 public Heap(Object[] objects) { 00032 heapObjects = new LinkedHashMap<Integer, Object>(); 00033 for (Object obj : objects) 00034 if (obj != null) 00035 addObject(obj); 00036 } 00037 00038 public void addObjects(Iterable<Object> objects) { 00039 for (Object obj : objects) 00040 if (obj != null) 00041 addObject(obj); 00042 } 00043 00044 public void addObject(Object obj) { 00045 if (obj == null) 00046 return; 00047 if (obj instanceof String) 00048 heapObjects.put(obj.hashCode(), obj); 00049 else 00050 heapObjects.put(System.identityHashCode(obj), obj); 00051 } 00052 00053 @Override 00054 protected List<Object> getHeapObjects() { 00055 return Collections.unmodifiableList(new ArrayList<Object>(heapObjects.values())); 00056 } 00057 }