ClanLib  2.3.7
slot_container.h
Go to the documentation of this file.
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2011 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 
31 
32 #pragma once
33 
34 #include "../api_core.h"
35 #include "slot.h"
36 #include "signal_v0.h"
37 #include "signal_v1.h"
38 #include "signal_v2.h"
39 #include "signal_v3.h"
40 #include "signal_v4.h"
41 #include "signal_v5.h"
42 #include <vector>
43 
57 {
60 
61 public:
63  template<class SigClass>
64  void connect(SigClass &sig, void (*func)())
65  {
66  slots.push_back(sig.connect(func));
67  }
68 
70  template<class SigClass, class Class>
71  void connect(SigClass &sig, Class *self, void(Class::*func)())
72  {
73  slots.push_back(sig.connect(self, func));
74  }
75 
78  template<class SigClass, class UserData>
79  void connect(SigClass &sig, void(*func)(UserData), UserData user_data)
80  {
81  slots.push_back(sig.connect(func, user_data));
82  }
83 
86  template<class SigClass, class Class, class UserData>
87  void connect(SigClass &sig, Class *self, void(Class::*func)(UserData), UserData user_data)
88  {
89  slots.push_back(sig.connect(self, func, user_data));
90  }
91 
93  template<class SigClass, class Param1>
94  void connect(SigClass &sig, void(*func)(Param1))
95  {
96  slots.push_back(sig.connect(func));
97  }
98 
100  template<class SigClass, class Class, class Param1>
101  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1))
102  {
103  slots.push_back(sig.connect(self, func));
104  }
105 
108  template<class SigClass, class Param1, class UserData>
109  void connect(SigClass &sig, void(*func)(Param1, UserData), UserData user_data)
110  {
111  slots.push_back(sig.connect(func, user_data));
112  }
113 
116  template<class SigClass, class Class, class Param1, class UserData>
117  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, UserData), UserData user_data)
118  {
119  slots.push_back(sig.connect(self, func, user_data));
120  }
121 
123  template<class SigClass, class Param1, class Param2>
124  void connect(SigClass &sig, void(*func)(Param1, Param2))
125  {
126  slots.push_back(sig.connect(func));
127  }
128 
130  template<class SigClass, class Class, class Param1, class Param2>
131  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2))
132  {
133  slots.push_back(sig.connect(self, func));
134  }
135 
138  template<class SigClass, class Param1, class Param2, class UserData>
139  void connect(SigClass &sig, void(*func)(Param1, Param2, UserData), UserData user_data)
140  {
141  slots.push_back(sig.connect(func, user_data));
142  }
143 
146  template<class SigClass, class Class, class Param1, class Param2, class UserData>
147  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, UserData), UserData user_data)
148  {
149  slots.push_back(sig.connect(self, func, user_data));
150  }
151 
153  template<class SigClass, class Param1, class Param2, class Param3>
154  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3))
155  {
156  slots.push_back(sig.connect(func));
157  }
158 
160  template<class SigClass, class Class, class Param1, class Param2, class Param3>
161  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3))
162  {
163  slots.push_back(sig.connect(self, func));
164  }
165 
168  template<class SigClass, class Param1, class Param2, class Param3, class UserData>
169  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, UserData), UserData user_data)
170  {
171  slots.push_back(sig.connect(func, user_data));
172  }
173 
176  template<class SigClass, class Class, class Param1, class Param2, class Param3, class UserData>
177  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, UserData), UserData user_data)
178  {
179  slots.push_back(sig.connect(self, func, user_data));
180  }
181 
183  template<class SigClass, class Param1, class Param2, class Param3, class Param4>
184  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4))
185  {
186  slots.push_back(sig.connect(func));
187  }
188 
190  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4>
191  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4))
192  {
193  slots.push_back(sig.connect(self, func));
194  }
195 
198  template<class SigClass, class Param1, class Param2, class Param3, class Param4, class UserData>
199  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, UserData user_data), UserData user_data)
200  {
201  slots.push_back(sig.connect(func, user_data));
202  }
203 
206  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4, class UserData>
207  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, UserData user_data), UserData user_data)
208  {
209  slots.push_back(sig.connect(self, func, user_data));
210  }
211 
213  template<class SigClass, class Param1, class Param2, class Param3, class Param4, class Param5>
214  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, Param5))
215  {
216  slots.push_back(sig.connect(func));
217  }
218 
220  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4, class Param5>
221  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, Param5))
222  {
223  slots.push_back(sig.connect(self, func));
224  }
225 
228  template<class SigClass, class Param1, class Param2, class Param3, class Param4, class Param5, class UserData>
229  void connect(SigClass &sig, void(*func)(Param1, Param2, Param3, Param4, Param5, UserData user_data), UserData user_data)
230  {
231  slots.push_back(sig.connect(func, user_data));
232  }
233 
236  template<class SigClass, class Class, class Param1, class Param2, class Param3, class Param4, class Param5, class UserData>
237  void connect(SigClass &sig, Class *self, void(Class::*func)(Param1, Param2, Param3, Param4, Param5, UserData user_data), UserData user_data)
238  {
239  slots.push_back(sig.connect(self, func, user_data));
240  }
241 
243  template<class SigClass, class Functor>
244  void connect_functor(SigClass &sig, const Functor &functor)
245  {
246  slots.push_back(sig.connect_functor(functor));
247  }
248 
249 private:
250  std::vector<CL_Slot> slots;
252 };
253 
254