diff options
Diffstat (limited to 'src/com/isode/stroke/signals/Signal.java')
-rw-r--r-- | src/com/isode/stroke/signals/Signal.java | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/src/com/isode/stroke/signals/Signal.java b/src/com/isode/stroke/signals/Signal.java index cfa8665..1821cb0 100644 --- a/src/com/isode/stroke/signals/Signal.java +++ b/src/com/isode/stroke/signals/Signal.java @@ -1,31 +1,17 @@ /* - * 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 Signal { - - private final Map<SignalConnection, Slot> binds_ = Collections.synchronizedMap(new HashMap<SignalConnection, Slot>()); +public final class Signal extends BaseSignal { public SignalConnection connect(Slot bind) { - final SignalConnection connection = new SignalConnection(); - binds_.put(connection, bind); - connection.onDestroyed.connectWithoutReturn(new Slot() { - - public void call() { - binds_.remove(connection); - } - }); - return connection; + return addBind(bind); } public SignalConnection connect(final Signal target) { @@ -36,19 +22,12 @@ public class Signal { }); } - void connectWithoutReturn(Slot bind) { - binds_.put(null, bind); - } - public void emit() { - ArrayList<Slot> binds = new ArrayList<Slot>(); - binds.addAll(binds_.values()); - for (Slot bind : binds) { - bind.call(); + final BaseSlot[] binds = getBinds(); + if (binds == null) {return;} + for (BaseSlot bind : binds) { + ((Slot)bind).call(); } } - public void disconnectAll() { - binds_.clear(); - } } |