slot_container.h
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2013 The ClanLib Team
4 **
5 ** This software is provided 'as-is', without any express or implied
6 ** warranty. In no event will the authors be held liable for any damages
7 ** arising from the use of this software.
8 **
9 ** Permission is granted to anyone to use this software for any purpose,
10 ** including commercial applications, and to alter it and redistribute it
11 ** freely, subject to the following restrictions:
12 **
13 ** 1. The origin of this software must not be misrepresented; you must not
14 ** claim that you wrote the original software. If you use this software
15 ** in a product, an acknowledgment in the product documentation would be
16 ** appreciated but is not required.
17 ** 2. Altered source versions must be plainly marked as such, and must not be
18 ** misrepresented as being the original software.
19 ** 3. This notice may not be removed or altered from any source distribution.
20 **
21 ** Note: Some of the libraries ClanLib may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 */
28 
29 
30 #pragma once
31 
32 #include "../api_core.h"
33 #include "slot.h"
34 #include "signal_v0.h"
35 #include "signal_v1.h"
36 #include "signal_v2.h"
37 #include "signal_v3.h"
38 #include "signal_v4.h"
39 #include "signal_v5.h"
40 #include <vector>
41 
42 namespace clan
43 {
46 
58 class CL_API_CORE SlotContainer
59 {
62 
63 public:
65  template<class SigClass>
66  void connect(SigClass &sig, void (*func)())
67  {
68  slots.push_back(sig.connect(func));
69  }
70 
72  template<class SigClass, class Class>
73  void connect(SigClass &sig, Class *self, void(Class::*func)())
74  {
75  slots.push_back(sig.connect(self, func));
76  }
77 
80  template<class SigClass, class UserData>
81  void connect(SigClass &sig, void(*func)(UserData), UserData user_data)
82  {
83  slots.push_back(sig.connect(func, user_data));
84  }
85 
88  template<class SigClass, class Class, class UserData>
89  void connect(SigClass &sig, Class *self, void(Class::*func)(UserData), UserData user_data)
90  {
91  slots.push_back(sig.connect(self, func, user_data));
92  }
93 
95  template<class SigClass, class Param1>
96  void connect(SigClass &sig, void(*func)(Param1))
97  {
98  slots.push_back(sig.connect(func));
99  }
100 
102  template<class SigClass, class Class, class Param1>
103  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1))
104  {
105  slots.push_back(sig.connect(self, func));
106  }
107 
110  template<class SigClass, class Param1, class UserData>
111  void connect(SigClass &sig, void(*func)(Param1, UserData), UserData user_data)
112  {
113  slots.push_back(sig.connect(func, user_data));
114  }
115 
118  template<class SigClass, class Class, class Param1, class UserData>
119  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, UserData), UserData user_data)
120  {
121  slots.push_back(sig.connect(self, func, user_data));
122  }
123 
125  template<class SigClass, class Param1, class Param2>
126  void connect(SigClass &sig, void(*func)(Param1, Param2))
127  {
128  slots.push_back(sig.connect(func));
129  }
130 
132  template<class SigClass, class Class, class Param1, class Param2>
133  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2))
134  {
135  slots.push_back(sig.connect(self, func));
136  }
137 
140  template<class SigClass, class Param1, class Param2, class UserData>
141  void connect(SigClass &sig, void(*func)(Param1, Param2, UserData), UserData user_data)
142  {
143  slots.push_back(sig.connect(func, user_data));
144  }
145 
148  template<class SigClass, class Class, class Param1, class Param2, class UserData>
149  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, UserData), UserData user_data)
150  {
151  slots.push_back(sig.connect(self, func, user_data));
152  }
153 
155  template<class SigClass, class Param1, class Param2, class Param3>
156  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3))
157  {
158  slots.push_back(sig.connect(func));
159  }
160 
162  template<class SigClass, class Class, class Param1, class Param2, class Param3>
163  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3))
164  {
165  slots.push_back(sig.connect(self, func));
166  }
167 
170  template<class SigClass, class Param1, class Param2, class Param3, class UserData>
171  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, UserData), UserData user_data)
172  {
173  slots.push_back(sig.connect(func, user_data));
174  }
175 
178  template<class SigClass, class Class, class Param1, class Param2, class Param3, class UserData>
179  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, UserData), UserData user_data)
180  {
181  slots.push_back(sig.connect(self, func, user_data));
182  }
183 
185  template<class SigClass, class Param1, class Param2, class Param3, class Param4>
186  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4))
187  {
188  slots.push_back(sig.connect(func));
189  }
190 
192  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4>
193  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4))
194  {
195  slots.push_back(sig.connect(self, func));
196  }
197 
200  template<class SigClass, class Param1, class Param2, class Param3, class Param4, class UserData>
201  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, UserData user_data), UserData user_data)
202  {
203  slots.push_back(sig.connect(func, user_data));
204  }
205 
208  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4, class UserData>
209  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, UserData user_data), UserData user_data)
210  {
211  slots.push_back(sig.connect(self, func, user_data));
212  }
213 
215  template<class SigClass, class Param1, class Param2, class Param3, class Param4, class Param5>
216  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, Param5))
217  {
218  slots.push_back(sig.connect(func));
219  }
220 
222  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4, class Param5>
223  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, Param5))
224  {
225  slots.push_back(sig.connect(self, func));
226  }
227 
230  template<class SigClass, class Param1, class Param2, class Param3, class Param4, class Param5, class UserData>
231  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, Param5, UserData user_data), UserData user_data)
232  {
233  slots.push_back(sig.connect(func, user_data));
234  }
235 
238  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4, class Param5, class UserData>
239  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, Param5, UserData user_data), UserData user_data)
240  {
241  slots.push_back(sig.connect(self, func, user_data));
242  }
243 
245  template<class SigClass, class Functor>
246  void connect_functor(SigClass &sig, const Functor &functor)
247  {
248  slots.push_back(sig.connect_functor(functor));
249  }
250 
251 private:
252  std::vector<Slot> slots;
254 };
255 
256 }
257 
void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4))
Connect a slot to a Signal_v4 signal.
Definition: slot_container.h:186
void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, UserData user_data), UserData user_data)
Connect a slot to a Signal_v4 signal with an user data parameter.
Definition: slot_container.h:201
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1))
Connect a slot to a Signal_v1 signal.
Definition: slot_container.h:103
void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, Param5, UserData user_data), UserData user_data)
Connect a slot to a Signal_v5 signal with an user data parameter.
Definition: slot_container.h:231
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, Param5))
Connect a slot to a Signal_v5 signal.
Definition: slot_container.h:223
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3))
Connect a slot to a Signal_v3 signal.
Definition: slot_container.h:163
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, UserData), UserData user_data)
Connect a slot to a Signal_v3 signal with an user data parameter.
Definition: slot_container.h:179
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2))
Connect a slot to a Signal_v2 signal.
Definition: slot_container.h:133
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, UserData user_data), UserData user_data)
Connect a slot to a Signal_v4 signal with an user data parameter.
Definition: slot_container.h:209
void connect(SigClass &sig, void(*func)(Param1, Param2, Param3))
Connect a slot to a Signal_v3 signal.
Definition: slot_container.h:156
void connect(SigClass &sig, void(*func)(UserData), UserData user_data)
Connect a slot to a Signal_v0 signal with an user data parameter.
Definition: slot_container.h:81
void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, UserData), UserData user_data)
Connect a slot to a Signal_v3 signal with an user data parameter.
Definition: slot_container.h:171
void connect(SigClass &sig, Class *self, void(Class::*func)(UserData), UserData user_data)
Connect a slot to a Signal_v0 signal with an user data parameter.
Definition: slot_container.h:89
void connect_functor(SigClass &sig, const Functor &functor)
Connect a functor slot to a signal.
Definition: slot_container.h:246
Definition: userdata.h:47
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, UserData), UserData user_data)
Connect a slot to a Signal_v2 signal with an user data parameter.
Definition: slot_container.h:149
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4))
Connect a slot to a Signal_v4 signal.
Definition: slot_container.h:193
void connect(SigClass &sig, void(*func)(Param1))
Connect a slot to a Signal_v1 signal.
Definition: slot_container.h:96
void connect(SigClass &sig, void(*func)(Param1, Param2))
Connect a slot to a Signal_v2 signal.
Definition: slot_container.h:126
Slot Generic Container.
Definition: slot_container.h:58
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, UserData), UserData user_data)
Connect a slot to a Signal_v1 signal with an user data parameter.
Definition: slot_container.h:119
void connect(SigClass &sig, void(*func)(Param1, UserData), UserData user_data)
Connect a slot to a Signal_v1 signal with an user data parameter.
Definition: slot_container.h:111
void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, Param5, UserData user_data), UserData user_data)
Connect a slot to a Signal_v5 signal with an user data parameter.
Definition: slot_container.h:239
void connect(SigClass &sig, Class *self, void(Class::*func)())
Connect a slot to a Signal_v0 signal.
Definition: slot_container.h:73
void connect(SigClass &sig, void(*func)())
Connect a slot to a Signal_v0 signal.
Definition: slot_container.h:66
void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, Param5))
Connect a slot to a Signal_v5 signal.
Definition: slot_container.h:216
void connect(SigClass &sig, void(*func)(Param1, Param2, UserData), UserData user_data)
Connect a slot to a Signal_v2 signal with an user data parameter.
Definition: slot_container.h:141