summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/signals/Signal.java')
-rw-r--r--src/com/isode/stroke/signals/Signal.java35
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();
- }
}