summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Young <consult.awy@gmail.com>2016-04-18 16:37:46 (GMT)
committerAlan Young <consult.awy@gmail.com>2016-04-20 16:29:51 (GMT)
commit9d50093bee736d2b7b43756e9a41cfafbd568ee2 (patch)
tree50923023315027b6a099f7349506868d58b4d736
parent82f43f69b1cdb1d2f6cd11c64a71dc99c8533d5a (diff)
downloadstroke-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
-rw-r--r--src/com/isode/stroke/muc/MUCImpl.java2
-rw-r--r--src/com/isode/stroke/signals/BaseSignal.java62
-rw-r--r--src/com/isode/stroke/signals/BaseSlot.java9
-rw-r--r--src/com/isode/stroke/signals/Signal.java35
-rw-r--r--src/com/isode/stroke/signals/Signal1.java31
-rw-r--r--src/com/isode/stroke/signals/Signal2.java31
-rw-r--r--src/com/isode/stroke/signals/Signal3.java39
-rw-r--r--src/com/isode/stroke/signals/Signal4.java40
-rw-r--r--src/com/isode/stroke/signals/Signal7.java38
-rw-r--r--src/com/isode/stroke/signals/SignalConnection.java17
-rw-r--r--src/com/isode/stroke/signals/Slot.java2
-rw-r--r--src/com/isode/stroke/signals/Slot1.java2
-rw-r--r--src/com/isode/stroke/signals/Slot2.java2
-rw-r--r--src/com/isode/stroke/signals/Slot3.java2
-rw-r--r--src/com/isode/stroke/signals/Slot4.java2
-rw-r--r--src/com/isode/stroke/signals/Slot7.java2
16 files changed, 137 insertions, 179 deletions
diff --git a/src/com/isode/stroke/muc/MUCImpl.java b/src/com/isode/stroke/muc/MUCImpl.java
index 444b331..26be309 100644
--- a/src/com/isode/stroke/muc/MUCImpl.java
+++ b/src/com/isode/stroke/muc/MUCImpl.java
@@ -724,7 +724,7 @@ public class MUCImpl extends MUC {
724 @Override 724 @Override
725 public void disconnect() { 725 public void disconnect() {
726 if (scopedConnection_ != null) { 726 if (scopedConnection_ != null) {
727 scopedConnection_.onDestroyed.emit(); 727 scopedConnection_.disconnect();
728 scopedConnection_ = null; 728 scopedConnection_ = null;
729 } 729 }
730 } 730 }
diff --git a/src/com/isode/stroke/signals/BaseSignal.java b/src/com/isode/stroke/signals/BaseSignal.java
new file mode 100644
index 0000000..de1bd6e
--- /dev/null
+++ b/src/com/isode/stroke/signals/BaseSignal.java
@@ -0,0 +1,62 @@
1/*
2 * Copyright (c) 2015, Isode Limited, London, England.
3 * All rights reserved.
4 */
5package com.isode.stroke.signals;
6
7import java.util.HashMap;
8import java.util.Map;
9
10/* package */ abstract class BaseSignal implements SignalConnection.DisconnectListener {
11
12 // Optimized for the case of 0 or 1 bind
13 private SignalConnection connection_;
14 private BaseSlot bind_;
15 private Map<SignalConnection, BaseSlot> binds_;
16
17 protected final synchronized SignalConnection addBind(final BaseSlot bind) {
18 final SignalConnection connection = new SignalConnection(this);
19 if (binds_ != null) {
20 binds_.put(connection, bind);
21 } else if (connection_ != null) {
22 binds_ = new HashMap<SignalConnection, BaseSlot>();
23 binds_.put(connection_, bind_);
24 connection_ = null;
25 bind_ = null;
26 binds_.put(connection, bind);
27 } else {
28 connection_ = connection;
29 bind_ = bind;
30 }
31 return connection;
32 }
33
34 protected final synchronized BaseSlot[] getBinds() {
35 if (binds_ != null) {
36 return binds_.values().toArray(new BaseSlot[binds_.size()]);
37 } else if (connection_ != null) {
38 return new BaseSlot[]{bind_};
39 } else {
40 return null; // return null rather than allocate an empty array
41 }
42 }
43
44 @Override
45 public final synchronized void onSignalConnectionDisconnect(final SignalConnection connection) {
46 if (binds_ != null) {
47 binds_.remove(connection);
48 } else if (connection_ == connection) {
49 connection_ = null;
50 bind_ = null;
51 }
52 }
53
54 public final synchronized void disconnectAll() {
55 if (binds_ != null) {
56 binds_.clear();
57 } else {
58 connection_ = null;
59 bind_ = null;
60 }
61 }
62}
diff --git a/src/com/isode/stroke/signals/BaseSlot.java b/src/com/isode/stroke/signals/BaseSlot.java
new file mode 100644
index 0000000..9b8ac13
--- /dev/null
+++ b/src/com/isode/stroke/signals/BaseSlot.java
@@ -0,0 +1,9 @@
1/*
2 * Copyright (c) 2015, Isode Limited, London, England.
3 * All rights reserved.
4 */
5package com.isode.stroke.signals;
6
7/* package */ interface BaseSlot {
8
9}
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 @@
1/* 1/*
2 * Copyright (c) 2010, Isode Limited, London, England. 2 * Copyright (c) 2010-2015, Isode Limited, London, England.
3 * All rights reserved. 3 * All rights reserved.
4 */ 4 */
5package com.isode.stroke.signals; 5package com.isode.stroke.signals;
6 6
7import java.util.ArrayList;
8import java.util.Collections;
9import java.util.HashMap;
10import java.util.Map;
11 7
12/** 8/**
13 * An approximation of the boost::signals system, although a little more warty. 9 * An approximation of the boost::signals system, although a little more warty.
14 */ 10 */
15public class Signal { 11public final class Signal extends BaseSignal {
16
17 private final Map<SignalConnection, Slot> binds_ = Collections.synchronizedMap(new HashMap<SignalConnection, Slot>());
18 12
19 public SignalConnection connect(Slot bind) { 13 public SignalConnection connect(Slot bind) {
20 final SignalConnection connection = new SignalConnection(); 14 return addBind(bind);
21 binds_.put(connection, bind);
22 connection.onDestroyed.connectWithoutReturn(new Slot() {
23
24 public void call() {
25 binds_.remove(connection);
26 }
27 });
28 return connection;
29 } 15 }
30 16
31 public SignalConnection connect(final Signal target) { 17 public SignalConnection connect(final Signal target) {
@@ -36,19 +22,12 @@ public class Signal {
36 }); 22 });
37 } 23 }
38 24
39 void connectWithoutReturn(Slot bind) {
40 binds_.put(null, bind);
41 }
42
43 public void emit() { 25 public void emit() {
44 ArrayList<Slot> binds = new ArrayList<Slot>(); 26 final BaseSlot[] binds = getBinds();
45 binds.addAll(binds_.values()); 27 if (binds == null) {return;}
46 for (Slot bind : binds) { 28 for (BaseSlot bind : binds) {
47 bind.call(); 29 ((Slot)bind).call();
48 } 30 }
49 } 31 }
50 32
51 public void disconnectAll() {
52 binds_.clear();
53 }
54} 33}
diff --git a/src/com/isode/stroke/signals/Signal1.java b/src/com/isode/stroke/signals/Signal1.java
index c799d4c..9787096 100644
--- a/src/com/isode/stroke/signals/Signal1.java
+++ b/src/com/isode/stroke/signals/Signal1.java
@@ -1,36 +1,25 @@
1/* 1/*
2 * Copyright (c) 2010, Isode Limited, London, England. 2 * Copyright (c) 2010-2015, Isode Limited, London, England.
3 * All rights reserved. 3 * All rights reserved.
4 */ 4 */
5 5
6package com.isode.stroke.signals; 6package com.isode.stroke.signals;
7 7
8import java.util.ArrayList;
9import java.util.Collections;
10import java.util.HashMap;
11import java.util.Map;
12 8
13/** 9/**
14 * An approximation of the boost::signals system, although a little more warty. 10 * An approximation of the boost::signals system, although a little more warty.
15 */ 11 */
16public class Signal1<T1> { 12public final class Signal1<T1> extends BaseSignal {
17 private final Map<SignalConnection, Slot1<T1> > binds_ = Collections.synchronizedMap(new HashMap<SignalConnection, Slot1<T1> >());
18 public SignalConnection connect(Slot1<T1> bind) { 13 public SignalConnection connect(Slot1<T1> bind) {
19 final SignalConnection connection = new SignalConnection(); 14 return addBind(bind);
20 binds_.put(connection, bind);
21 connection.onDestroyed.connect(new Slot() {
22 public void call() {
23 binds_.remove(connection);
24 }
25 });
26 return connection;
27 } 15 }
28 16
17 @SuppressWarnings("unchecked")
29 public void emit(T1 p1) { 18 public void emit(T1 p1) {
30 ArrayList<Slot1<T1>> binds = new ArrayList<Slot1<T1>>(); 19 final BaseSlot[] binds = getBinds();
31 binds.addAll(binds_.values()); 20 if (binds == null) {return;}
32 for (Slot1<T1> bind : binds) { 21 for (BaseSlot bind : binds) {
33 bind.call(p1); 22 ((Slot1<T1>)bind).call(p1);
34 } 23 }
35 } 24 }
36 25
@@ -41,8 +30,4 @@ public class Signal1<T1> {
41 } 30 }
42 }); 31 });
43 } 32 }
44
45 public void disconnectAll() {
46 binds_.clear();
47 }
48} 33}
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 @@
1/* 1/*
2 * Copyright (c) 2010, Isode Limited, London, England. 2 * Copyright (c) 2010-2015, Isode Limited, London, England.
3 * All rights reserved. 3 * All rights reserved.
4 */ 4 */
5 5
6package com.isode.stroke.signals; 6package com.isode.stroke.signals;
7 7
8import java.util.ArrayList;
9import java.util.Collections;
10import java.util.HashMap;
11import java.util.Map;
12 8
13/** 9/**
14 * An approximation of the boost::signals system, although a little more warty. 10 * An approximation of the boost::signals system, although a little more warty.
15 */ 11 */
16public class Signal2<T1, T2> { 12public class Signal2<T1, T2> extends BaseSignal {
17 private final Map<SignalConnection, Slot2<T1, T2> > binds_ = Collections.synchronizedMap(new HashMap<SignalConnection, Slot2<T1, T2> >());
18 public SignalConnection connect(Slot2<T1, T2> bind) { 13 public SignalConnection connect(Slot2<T1, T2> bind) {
19 final SignalConnection connection = new SignalConnection(); 14 return addBind(bind);
20 binds_.put(connection, bind);
21 connection.onDestroyed.connect(new Slot() {
22 public void call() {
23 binds_.remove(connection);
24 }
25 });
26 return connection;
27 } 15 }
28 16
17 @SuppressWarnings("unchecked")
29 public void emit(T1 p1, T2 p2) { 18 public void emit(T1 p1, T2 p2) {
30 ArrayList<Slot2<T1,T2>> binds = new ArrayList<Slot2<T1, T2>>(); 19 final BaseSlot[] binds = getBinds();
31 binds.addAll(binds_.values()); 20 if (binds == null) {return;}
32 for (Slot2<T1, T2> bind : binds) { 21 for (BaseSlot bind : binds) {
33 bind.call(p1, p2); 22 ((Slot2<T1, T2>)bind).call(p1, p2);
34 } 23 }
35 } 24 }
36
37 public void disconnectAll() {
38 binds_.clear();
39 }
40} 25}
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 @@
1/* 1/*
2 * Copyright (c) 2012, Isode Limited, London, England. 2 * Copyright (c) 2010-2015, Isode Limited, London, England.
3 * All rights reserved. 3 * All rights reserved.
4 */ 4 */
5 5
6package com.isode.stroke.signals; 6package com.isode.stroke.signals;
7 7
8import java.util.ArrayList;
9import java.util.Collections;
10import java.util.HashMap;
11import java.util.List;
12import java.util.Map;
13 8
14/** 9/**
15 * An approximation of the boost::signals system with 3 parameters 10 * An approximation of the boost::signals system with 3 parameters
@@ -17,24 +12,14 @@ import java.util.Map;
17 * @param <T2> Type 2 12 * @param <T2> Type 2
18 * @param <T3> Type 3 13 * @param <T3> Type 3
19 */ 14 */
20public class Signal3<T1, T2, T3> { 15public class Signal3<T1, T2, T3> extends BaseSignal {
21 private final Map<SignalConnection, Slot3<T1, T2,T3> > binds_ = Collections.synchronizedMap(
22 new HashMap<SignalConnection, Slot3<T1, T2,T3> >());
23
24 /** 16 /**
25 * Add a slot which will be notified 17 * Add a slot which will be notified
26 * @param bind slot, not null 18 * @param bind slot, not null
27 * @return signal connection 19 * @return signal connection
28 */ 20 */
29 public SignalConnection connect(Slot3<T1, T2,T3> bind) { 21 public SignalConnection connect(Slot3<T1, T2,T3> bind) {
30 final SignalConnection connection = new SignalConnection(); 22 return addBind(bind);
31 binds_.put(connection, bind);
32 connection.onDestroyed.connect(new Slot() {
33 public void call() {
34 binds_.remove(connection);
35 }
36 });
37 return connection;
38 } 23 }
39 24
40 /** 25 /**
@@ -43,18 +28,12 @@ public class Signal3<T1, T2, T3> {
43 * @param p2 parameter value 2 28 * @param p2 parameter value 2
44 * @param p3 parameter value 3 29 * @param p3 parameter value 3
45 */ 30 */
46 public void emit(T1 p1, T2 p2,T3 p3) { 31 @SuppressWarnings("unchecked")
47 List<Slot3<T1,T2, T3>> binds = new ArrayList<Slot3<T1, T2, T3>>(); 32 public void emit(T1 p1, T2 p2, T3 p3) {
48 binds.addAll(binds_.values()); 33 final BaseSlot[] binds = getBinds();
49 for (Slot3<T1, T2, T3> bind : binds) { 34 if (binds == null) {return;}
50 bind.call(p1, p2, p3); 35 for (BaseSlot bind : binds) {
36 ((Slot3<T1, T2, T3>)bind).call(p1, p2, p3);
51 } 37 }
52 } 38 }
53
54 /**
55 * Remove all slots(listeners)
56 */
57 public void disconnectAll() {
58 binds_.clear();
59 }
60} 39}
diff --git a/src/com/isode/stroke/signals/Signal4.java b/src/com/isode/stroke/signals/Signal4.java
index 6a29641..edf30ed 100644
--- a/src/com/isode/stroke/signals/Signal4.java
+++ b/src/com/isode/stroke/signals/Signal4.java
@@ -1,18 +1,10 @@
1/* 1/*
2 * Copyright (c) 2012-2013, Isode Limited, London, England. 2 * Copyright (c) 2012-2015, Isode Limited, London, England.
3 * All rights reserved. 3 * All rights reserved.
4 */ 4 */
5 5
6package com.isode.stroke.signals; 6package com.isode.stroke.signals;
7 7
8import java.util.ArrayList;
9import java.util.Collections;
10import java.util.HashMap;
11import java.util.List;
12import java.util.Map;
13
14import com.isode.stroke.signals.SignalConnection;
15import com.isode.stroke.signals.Slot;
16 8
17 9
18/** 10/**
@@ -22,24 +14,14 @@ import com.isode.stroke.signals.Slot;
22 * @param <T3> Type 3 14 * @param <T3> Type 3
23 * @param <T4> Type 4 15 * @param <T4> Type 4
24 */ 16 */
25public class Signal4<T1, T2, T3, T4> { 17public class Signal4<T1, T2, T3, T4> extends BaseSignal {
26 private final Map<SignalConnection, Slot4<T1, T2, T3, T4> > binds_ = Collections.synchronizedMap(
27 new HashMap<SignalConnection, Slot4<T1, T2, T3, T4> >());
28
29 /** 18 /**
30 * Add a slot which will be notified 19 * Add a slot which will be notified
31 * @param bind slot, not null 20 * @param bind slot, not null
32 * @return signal connection 21 * @return signal connection
33 */ 22 */
34 public SignalConnection connect(Slot4<T1, T2, T3, T4> bind) { 23 public SignalConnection connect(Slot4<T1, T2, T3, T4> bind) {
35 final SignalConnection connection = new SignalConnection(); 24 return addBind(bind);
36 binds_.put(connection, bind);
37 connection.onDestroyed.connect(new Slot() {
38 public void call() {
39 binds_.remove(connection);
40 }
41 });
42 return connection;
43 } 25 }
44 26
45 /** 27 /**
@@ -49,18 +31,12 @@ public class Signal4<T1, T2, T3, T4> {
49 * @param p3 parameter value 3 31 * @param p3 parameter value 3
50 * @param p4 parameter value 4 32 * @param p4 parameter value 4
51 */ 33 */
34 @SuppressWarnings("unchecked")
52 public void emit(T1 p1, T2 p2, T3 p3, T4 p4) { 35 public void emit(T1 p1, T2 p2, T3 p3, T4 p4) {
53 List<Slot4<T1, T2, T3, T4>> binds = new ArrayList<Slot4<T1, T2, T3, T4>>(); 36 final BaseSlot[] binds = getBinds();
54 binds.addAll(binds_.values()); 37 if (binds == null) {return;}
55 for (Slot4<T1, T2, T3, T4> bind : binds) { 38 for (BaseSlot bind : binds) {
56 bind.call(p1, p2, p3, p4); 39 ((Slot4<T1, T2, T3, T4>)bind).call(p1, p2, p3, p4);
57 } 40 }
58 } 41 }
59
60 /**
61 * Remove all slots(listeners)
62 */
63 public void disconnectAll() {
64 binds_.clear();
65 }
66} 42}
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 @@
5 5
6package com.isode.stroke.signals; 6package com.isode.stroke.signals;
7 7
8import java.util.ArrayList;
9import java.util.Collections;
10import java.util.HashMap;
11import java.util.List;
12import java.util.Map;
13
14import com.isode.stroke.signals.SignalConnection;
15import com.isode.stroke.signals.Slot;
16 8
17 9
18/** 10/**
@@ -22,24 +14,14 @@ import com.isode.stroke.signals.Slot;
22 * @param <T3> Type 3 14 * @param <T3> Type 3
23 * @param <T4> Type 4 15 * @param <T4> Type 4
24 */ 16 */
25public class Signal7<T1, T2, T3, T4, T5, T6, T7> { 17public class Signal7<T1, T2, T3, T4, T5, T6, T7> extends BaseSignal {
26 private final Map<SignalConnection, Slot7<T1, T2, T3, T4, T5, T6, T7> > binds_ = Collections.synchronizedMap(
27 new HashMap<SignalConnection, Slot7<T1, T2, T3, T4, T5, T6, T7> >());
28
29 /** 18 /**
30 * Add a slot which will be notified 19 * Add a slot which will be notified
31 * @param bind slot, not null 20 * @param bind slot, not null
32 * @return signal connection 21 * @return signal connection
33 */ 22 */
34 public SignalConnection connect(Slot7<T1, T2, T3, T4, T5, T6, T7> bind) { 23 public SignalConnection connect(Slot7<T1, T2, T3, T4, T5, T6, T7> bind) {
35 final SignalConnection connection = new SignalConnection(); 24 return addBind(bind);
36 binds_.put(connection, bind);
37 connection.onDestroyed.connect(new Slot() {
38 public void call() {
39 binds_.remove(connection);
40 }
41 });
42 return connection;
43 } 25 }
44 26
45 /** 27 /**
@@ -49,18 +31,12 @@ public class Signal7<T1, T2, T3, T4, T5, T6, T7> {
49 * @param p3 parameter value 3 31 * @param p3 parameter value 3
50 * @param p4 parameter value 4 32 * @param p4 parameter value 4
51 */ 33 */
34 @SuppressWarnings("unchecked")
52 public void emit(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7) { 35 public void emit(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7) {
53 List<Slot7<T1, T2, T3, T4, T5, T6, T7>> binds = new ArrayList<Slot7<T1, T2, T3, T4, T5, T6, T7>>(); 36 final BaseSlot[] binds = getBinds();
54 binds.addAll(binds_.values()); 37 if (binds == null) {return;}
55 for (Slot7<T1, T2, T3, T4, T5, T6, T7> bind : binds) { 38 for (BaseSlot bind : binds) {
56 bind.call(p1, p2, p3, p4, p5, p6, p7); 39 ((Slot7<T1, T2, T3, T4, T5, T6, T7>)bind).call(p1, p2, p3, p4, p5, p6, p7);
57 } 40 }
58 } 41 }
59
60 /**
61 * Remove all slots(listeners)
62 */
63 public void disconnectAll() {
64 binds_.clear();
65 }
66} 42}
diff --git a/src/com/isode/stroke/signals/SignalConnection.java b/src/com/isode/stroke/signals/SignalConnection.java
index 452c80b..30bbf82 100644
--- a/src/com/isode/stroke/signals/SignalConnection.java
+++ b/src/com/isode/stroke/signals/SignalConnection.java
@@ -1,15 +1,22 @@
1/* 1/*
2 * Copyright (c) 2010, Isode Limited, London, England. 2 * Copyright (c) 2010-2015, Isode Limited, London, England.
3 * All rights reserved. 3 * All rights reserved.
4 */ 4 */
5 5
6package com.isode.stroke.signals; 6package com.isode.stroke.signals;
7 7
8
9public class SignalConnection { 8public class SignalConnection {
10 public final Signal onDestroyed = new Signal(); 9 interface DisconnectListener {
11 10 void onSignalConnectionDisconnect(SignalConnection connection);
11 }
12
13 private final DisconnectListener listener;
14
15 SignalConnection(DisconnectListener listener) {
16 this.listener = listener;
17 }
18
12 public void disconnect() { 19 public void disconnect() {
13 onDestroyed.emit(); 20 listener.onSignalConnectionDisconnect(this);
14 } 21 }
15} 22}
diff --git a/src/com/isode/stroke/signals/Slot.java b/src/com/isode/stroke/signals/Slot.java
index 35b8c70..780892d 100644
--- a/src/com/isode/stroke/signals/Slot.java
+++ b/src/com/isode/stroke/signals/Slot.java
@@ -8,6 +8,6 @@ package com.isode.stroke.signals;
8/** 8/**
9 * Bind class for connecting to a signal. 9 * Bind class for connecting to a signal.
10 */ 10 */
11public interface Slot { 11public interface Slot extends BaseSlot {
12 void call(); 12 void call();
13} 13}
diff --git a/src/com/isode/stroke/signals/Slot1.java b/src/com/isode/stroke/signals/Slot1.java
index a8f0179..001dca7 100644
--- a/src/com/isode/stroke/signals/Slot1.java
+++ b/src/com/isode/stroke/signals/Slot1.java
@@ -8,6 +8,6 @@ package com.isode.stroke.signals;
8/** 8/**
9 * Bind class for connecting to a signal. 9 * Bind class for connecting to a signal.
10 */ 10 */
11public interface Slot1<T1> { 11public interface Slot1<T1> extends BaseSlot {
12 void call(T1 p1); 12 void call(T1 p1);
13} 13}
diff --git a/src/com/isode/stroke/signals/Slot2.java b/src/com/isode/stroke/signals/Slot2.java
index b3b9330..03eb9a6 100644
--- a/src/com/isode/stroke/signals/Slot2.java
+++ b/src/com/isode/stroke/signals/Slot2.java
@@ -8,6 +8,6 @@ package com.isode.stroke.signals;
8/** 8/**
9 * Bind class for connecting to a signal. 9 * Bind class for connecting to a signal.
10 */ 10 */
11public interface Slot2<T1, T2> { 11public interface Slot2<T1, T2> extends BaseSlot {
12 void call(T1 p1, T2 p2); 12 void call(T1 p1, T2 p2);
13} 13}
diff --git a/src/com/isode/stroke/signals/Slot3.java b/src/com/isode/stroke/signals/Slot3.java
index ee5ccbc..63c371c 100644
--- a/src/com/isode/stroke/signals/Slot3.java
+++ b/src/com/isode/stroke/signals/Slot3.java
@@ -11,7 +11,7 @@ package com.isode.stroke.signals;
11 * @param <T2> Type 2 11 * @param <T2> Type 2
12 * @param <T3> Type 3 12 * @param <T3> Type 3
13 */ 13 */
14public interface Slot3<T1, T2,T3> { 14public interface Slot3<T1, T2,T3> extends BaseSlot {
15 /** 15 /**
16 * This method will be called on notification from a signal 16 * This method will be called on notification from a signal
17 * @param p1 parameter value 1 17 * @param p1 parameter value 1
diff --git a/src/com/isode/stroke/signals/Slot4.java b/src/com/isode/stroke/signals/Slot4.java
index 02e6fd9..93401db 100644
--- a/src/com/isode/stroke/signals/Slot4.java
+++ b/src/com/isode/stroke/signals/Slot4.java
@@ -12,7 +12,7 @@ package com.isode.stroke.signals;
12 * @param <T3> Type 3 12 * @param <T3> Type 3
13 * @param <T4> Type 4 13 * @param <T4> Type 4
14 */ 14 */
15public interface Slot4<T1, T2, T3, T4> { 15public interface Slot4<T1, T2, T3, T4> extends BaseSlot {
16 /** 16 /**
17 * This method will be called on notification from a signal 17 * This method will be called on notification from a signal
18 * @param p1 parameter value 1 18 * @param p1 parameter value 1
diff --git a/src/com/isode/stroke/signals/Slot7.java b/src/com/isode/stroke/signals/Slot7.java
index 7df6973..752d9a8 100644
--- a/src/com/isode/stroke/signals/Slot7.java
+++ b/src/com/isode/stroke/signals/Slot7.java
@@ -15,7 +15,7 @@ package com.isode.stroke.signals;
15 * @param <T6> Type 6 15 * @param <T6> Type 6
16 * @param <T7> Type 7 16 * @param <T7> Type 7
17 */ 17 */
18public interface Slot7<T1, T2, T3, T4, T5, T6, T7> { 18public interface Slot7<T1, T2, T3, T4, T5, T6, T7> extends BaseSlot {
19 /** 19 /**
20 * This method will be called on notification from a signal 20 * This method will be called on notification from a signal
21 * @param p1 parameter value 1 21 * @param p1 parameter value 1