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 }