diff options
Diffstat (limited to 'src/com/isode/stroke/signals/Signal3.java')
-rw-r--r-- | src/com/isode/stroke/signals/Signal3.java | 39 |
1 files changed, 9 insertions, 30 deletions
diff --git a/src/com/isode/stroke/signals/Signal3.java b/src/com/isode/stroke/signals/Signal3.java index b9151dc..014f047 100644 --- a/src/com/isode/stroke/signals/Signal3.java +++ b/src/com/isode/stroke/signals/Signal3.java @@ -1,15 +1,10 @@ /* - * Copyright (c) 2012, 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.List; -import java.util.Map; /** * An approximation of the boost::signals system with 3 parameters @@ -17,24 +12,14 @@ import java.util.Map; * @param <T2> Type 2 * @param <T3> Type 3 */ -public class Signal3<T1, T2, T3> { - private final Map<SignalConnection, Slot3<T1, T2,T3> > binds_ = Collections.synchronizedMap( - new HashMap<SignalConnection, Slot3<T1, T2,T3> >()); - +public class Signal3<T1, T2, T3> extends BaseSignal { /** * Add a slot which will be notified * @param bind slot, not null * @return signal connection */ public SignalConnection connect(Slot3<T1, T2,T3> 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); } /** @@ -43,18 +28,12 @@ public class Signal3<T1, T2, T3> { * @param p2 parameter value 2 * @param p3 parameter value 3 */ - public void emit(T1 p1, T2 p2,T3 p3) { - List<Slot3<T1,T2, T3>> binds = new ArrayList<Slot3<T1, T2, T3>>(); - binds.addAll(binds_.values()); - for (Slot3<T1, T2, T3> bind : binds) { - bind.call(p1, p2, p3); + @SuppressWarnings("unchecked") + public void emit(T1 p1, T2 p2, T3 p3) { + final BaseSlot[] binds = getBinds(); + if (binds == null) {return;} + for (BaseSlot bind : binds) { + ((Slot3<T1, T2, T3>)bind).call(p1, p2, p3); } } - - /** - * Remove all slots(listeners) - */ - public void disconnectAll() { - binds_.clear(); - } } |