lcsim/sandbox/onoprien/org/lcsim/util
diff -u -r1.1 -r1.2
--- Driver.java 24 Feb 2007 19:19:26 -0000 1.1
+++ Driver.java 7 Mar 2007 21:10:03 -0000 1.2
@@ -19,13 +19,14 @@
/**
*
* @author D. Onoprienko
- * @version $Id: Driver.java,v 1.1 2007/02/24 19:19:26 onoprien Exp $
+ * @version $Id: Driver.java,v 1.2 2007/03/07 21:10:03 onoprien Exp $
*/
public class Driver implements Iterable<Driver>, DetectorChangeListener {
// -- Fields: -----------------------------------------------------------------
- static private List<DetectorChangeListener> _dcListeners = new ArrayList<DetectorChangeListener>();
+ static private WeakHashMap<DetectorChangeListener, Object> _dcListeners
+ = new WeakHashMap<DetectorChangeListener, Object>();
static private Detector _detector;
// static private Driver _defDriver = new Driver();
@@ -247,7 +248,7 @@
/** Add detector change listener. */
static public void addDetectorChangeListener(DetectorChangeListener listener) {
- _dcListeners.add(listener);
+ _dcListeners.put(listener, null);
if (_detector != null) listener.detectorChanged(_detector);
}
@@ -260,8 +261,7 @@
static void fireDetectorChanged(Detector detector) {
if (_detector != detector) {
_detector = detector;
- List<DetectorChangeListener> changeListeners = new ArrayList<DetectorChangeListener>(_dcListeners.size());
- changeListeners.addAll(_dcListeners);
+ Set<DetectorChangeListener> changeListeners = _dcListeners.keySet();
for (DetectorChangeListener listener : changeListeners) {
listener.detectorChanged(detector);
}