summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/signals/Signal2.java')
-rw-r--r--src/com/isode/stroke/signals/Signal2.java31
1 files changed, 8 insertions, 23 deletions
diff --git a/src/com/isode/stroke/signals/Signal2.java b/src/com/isode/stroke/signals/Signal2.java
index fa3c4b5..72c9de0 100644
--- a/src/com/isode/stroke/signals/Signal2.java
+++ b/src/com/isode/stroke/signals/Signal2.java
@@ -1,40 +1,25 @@
/*
- * Copyright (c) 2010, Isode Limited, London, England.
+ * Copyright (c) 2010-2015, Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.signals;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
/**
* An approximation of the boost::signals system, although a little more warty.
*/
-public class Signal2<T1, T2> {
- private final Map<SignalConnection, Slot2<T1, T2> > binds_ = Collections.synchronizedMap(new HashMap<SignalConnection, Slot2<T1, T2> >());
+public class Signal2<T1, T2> extends BaseSignal {
public SignalConnection connect(Slot2<T1, T2> bind) {
- final SignalConnection connection = new SignalConnection();
- binds_.put(connection, bind);
- connection.onDestroyed.connect(new Slot() {
- public void call() {
- binds_.remove(connection);
- }
- });
- return connection;
+ return addBind(bind);
}
+ @SuppressWarnings("unchecked")
public void emit(T1 p1, T2 p2) {
- ArrayList<Slot2<T1,T2>> binds = new ArrayList<Slot2<T1, T2>>();
- binds.addAll(binds_.values());
- for (Slot2<T1, T2> bind : binds) {
- bind.call(p1, p2);
+ final BaseSlot[] binds = getBinds();
+ if (binds == null) {return;}
+ for (BaseSlot bind : binds) {
+ ((Slot2<T1, T2>)bind).call(p1, p2);
}
}
-
- public void disconnectAll() {
- binds_.clear();
- }
}