diff options
author | Alan Young <consult.awy@gmail.com> | 2016-04-18 16:37:46 (GMT) |
---|---|---|
committer | Alan Young <consult.awy@gmail.com> | 2016-04-20 16:29:51 (GMT) |
commit | 9d50093bee736d2b7b43756e9a41cfafbd568ee2 (patch) | |
tree | 50923023315027b6a099f7349506868d58b4d736 /src/com/isode/stroke/signals/Signal7.java | |
parent | 82f43f69b1cdb1d2f6cd11c64a71dc99c8533d5a (diff) | |
download | stroke-9d50093bee736d2b7b43756e9a41cfafbd568ee2.zip stroke-9d50093bee736d2b7b43756e9a41cfafbd568ee2.tar.bz2 |
Rework Signals for time and space optimizations
Each Signal* class extends BaseSignal. Each Slot* class extends
BaseSlot.
BaseSignal manages the set of binds associated with it via addBind() and
getBinds() which are called from Signal*. It is optimized for the cases
of zero or one bind, only allocating a HashMap to hold a larger set when
needed.
The interaction with SignalConnection to handle disconnection is
effected via a callback interface rather than another Signal.
Change-Id: Ifa44c1eb40b778c303db947a6e74fe20d1b41a90
Diffstat (limited to 'src/com/isode/stroke/signals/Signal7.java')
-rw-r--r-- | src/com/isode/stroke/signals/Signal7.java | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/src/com/isode/stroke/signals/Signal7.java b/src/com/isode/stroke/signals/Signal7.java index 296cc02..bbf6559 100644 --- a/src/com/isode/stroke/signals/Signal7.java +++ b/src/com/isode/stroke/signals/Signal7.java @@ -5,14 +5,6 @@ package com.isode.stroke.signals; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.isode.stroke.signals.SignalConnection; -import com.isode.stroke.signals.Slot; /** @@ -22,24 +14,14 @@ import com.isode.stroke.signals.Slot; * @param <T3> Type 3 * @param <T4> Type 4 */ -public class Signal7<T1, T2, T3, T4, T5, T6, T7> { - private final Map<SignalConnection, Slot7<T1, T2, T3, T4, T5, T6, T7> > binds_ = Collections.synchronizedMap( - new HashMap<SignalConnection, Slot7<T1, T2, T3, T4, T5, T6, T7> >()); - +public class Signal7<T1, T2, T3, T4, T5, T6, T7> extends BaseSignal { /** * Add a slot which will be notified * @param bind slot, not null * @return signal connection */ public SignalConnection connect(Slot7<T1, T2, T3, T4, T5, T6, T7> 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); } /** @@ -49,18 +31,12 @@ public class Signal7<T1, T2, T3, T4, T5, T6, T7> { * @param p3 parameter value 3 * @param p4 parameter value 4 */ + @SuppressWarnings("unchecked") public void emit(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7) { - List<Slot7<T1, T2, T3, T4, T5, T6, T7>> binds = new ArrayList<Slot7<T1, T2, T3, T4, T5, T6, T7>>(); - binds.addAll(binds_.values()); - for (Slot7<T1, T2, T3, T4, T5, T6, T7> bind : binds) { - bind.call(p1, p2, p3, p4, p5, p6, p7); + final BaseSlot[] binds = getBinds(); + if (binds == null) {return;} + for (BaseSlot bind : binds) { + ((Slot7<T1, T2, T3, T4, T5, T6, T7>)bind).call(p1, p2, p3, p4, p5, p6, p7); } } - - /** - * Remove all slots(listeners) - */ - public void disconnectAll() { - binds_.clear(); - } } |