lcsim/src/org/lcsim/util/event
diff -u -r1.19 -r1.20
--- BaseLCSimEvent.java 22 May 2006 18:59:23 -0000 1.19
+++ BaseLCSimEvent.java 22 May 2006 20:53:01 -0000 1.20
@@ -4,9 +4,9 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.lcsim.conditions.ConditionsManager;
import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
import org.lcsim.event.CalorimeterHit;
@@ -26,7 +26,7 @@
public class BaseLCSimEvent extends BaseEvent implements EventHeader
{
private String detectorName;
- private final Map<ListHolder,LCMetaData> metaDataMap = new HashMap<ListHolder,LCMetaData>();
+ private final Map<List,LCMetaData> metaDataMap = new IdentityHashMap<List,LCMetaData>();
private ConditionsManager conditionsManager;
private static final int NANO_SECONDS = 1000000;
private static final String READOUT_NAME = "ReadoutName";
@@ -93,11 +93,11 @@
public <T> List<List<T>> get(Class<T> type)
{
List<List<T>> result = new ArrayList<List<T>>();
- for (Map.Entry<ListHolder,LCMetaData> entry : metaDataMap.entrySet())
+ for (Map.Entry<List,LCMetaData> entry : metaDataMap.entrySet())
{
if (type.isAssignableFrom(entry.getValue().getType()))
{
- result.add(entry.getKey().getList());
+ result.add(entry.getKey());
}
}
return result;
@@ -105,7 +105,7 @@
public LCMetaData getMetaData(List x)
{
- return metaDataMap.get(new ListHolder(x));
+ return metaDataMap.get(x);
}
public void put(String name, Object component)
@@ -119,7 +119,7 @@
{
if (!type.isAssignableFrom(o.getClass())) type = Object.class;
}
- metaDataMap.put(new ListHolder(list),new MetaData(name,type,0,null));
+ metaDataMap.put(list,new MetaData(name,type,0,null));
}
}
public void put(String name, List collection, Class type, int flags)
@@ -160,7 +160,7 @@
if(!isValid && !isOriginal) readoutName = null;
LCMetaData meta = new MetaData(name, type, flags, readoutName);
- metaDataMap.put(new ListHolder(collection),meta);
+ metaDataMap.put(collection,meta);
// Fixme: This needs to be generalized
if (CalorimeterHit.class.isAssignableFrom(type))
{
@@ -174,7 +174,7 @@
{
super.put(name,collection);
LCMetaData meta = new MetaData(name, type, flags, intMap, floatMap, stringMap);
- metaDataMap.put(new ListHolder(collection),meta);
+ metaDataMap.put(collection,meta);
}
/**
@@ -183,7 +183,7 @@
public void remove(String name)
{
Object collection = get(name);
- if (collection instanceof List) metaDataMap.remove(new ListHolder((List) collection));
+ if (collection instanceof List) metaDataMap.remove((List) collection);
super.keys().remove(name);
}
@@ -271,33 +271,4 @@
return BaseLCSimEvent.this;
}
}
- // All empty lists are considered equal, but we need to put several different possibly empty lists
- // into the metadata map. ListHolder is a workaround for this.
- private class ListHolder
- {
- private final List list;
- ListHolder(List list)
- {
- this.list = list;
- }
- List getList()
- {
- return list;
- }
- public boolean equals(Object obj)
- {
- if (obj instanceof ListHolder)
- {
- ListHolder that= (ListHolder) obj;
- return this.list == that.list;
- }
- return false;
- }
-
- public int hashCode()
- {
- // Fixme: This doesn't work if the list is changed after it is added to the event
- return list.hashCode();
- }
- }
}