8 template <
typename MEM,
typename OBJ>
9 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj);
11 template <
typename MEM,
typename OBJ,
13 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1);
15 template <
typename MEM,
typename OBJ,
16 typename T1,
typename T2>
17 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
19 template <
typename MEM,
typename OBJ,
20 typename T1,
typename T2,
typename T3>
21 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
23 template <
typename MEM,
typename OBJ,
24 typename T1,
typename T2,
typename T3,
typename T4>
25 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
27 template <
typename MEM,
typename OBJ,
28 typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
29 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj,
30 T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
32 EventImpl * MakeEvent (
void (*f)(
void));
33 template <
typename U1,
35 EventImpl * MakeEvent (
void (*f)(U1), T1 a1);
37 template <
typename U1,
typename U2,
38 typename T1,
typename T2>
39 EventImpl * MakeEvent (
void (*f)(U1,U2), T1 a1, T2 a2);
41 template <
typename U1,
typename U2,
typename U3,
42 typename T1,
typename T2,
typename T3>
43 EventImpl * MakeEvent (
void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
45 template <
typename U1,
typename U2,
typename U3,
typename U4,
46 typename T1,
typename T2,
typename T3,
typename T4>
47 EventImpl * MakeEvent (
void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
49 template <
typename U1,
typename U2,
typename U3,
typename U4,
typename U5,
50 typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
51 EventImpl * MakeEvent (
void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
59 #include "event-impl.h"
60 #include "type-traits.h"
70 static T &GetReference (T *p)
76 template <
typename MEM,
typename OBJ>
77 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj)
83 EventMemberImpl0 (OBJ obj, MEM
function)
88 virtual ~EventMemberImpl0 ()
92 virtual void Notify (
void)
94 (EventMemberImplObjTraits<OBJ>::GetReference (m_obj).*m_function)();
98 } *ev =
new EventMemberImpl0 (obj, mem_ptr);
103 template <
typename MEM,
typename OBJ,
105 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1)
108 class EventMemberImpl1 :
public EventImpl
111 EventMemberImpl1 (OBJ obj, MEM
function, T1 a1)
113 m_function (function),
118 virtual ~EventMemberImpl1 ()
122 virtual void Notify (
void)
124 (EventMemberImplObjTraits<OBJ>::GetReference (m_obj).*m_function)(m_a1);
128 typename TypeTraits<T1>::ReferencedType m_a1;
129 } *ev =
new EventMemberImpl1 (obj, mem_ptr, a1);
133 template <
typename MEM,
typename OBJ,
134 typename T1,
typename T2>
135 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
138 class EventMemberImpl2 :
public EventImpl
141 EventMemberImpl2 (OBJ obj, MEM
function, T1 a1, T2 a2)
143 m_function (function),
149 virtual ~EventMemberImpl2 ()
153 virtual void Notify (
void)
155 (EventMemberImplObjTraits<OBJ>::GetReference (m_obj).*m_function)(m_a1, m_a2);
159 typename TypeTraits<T1>::ReferencedType m_a1;
160 typename TypeTraits<T2>::ReferencedType m_a2;
161 } *ev =
new EventMemberImpl2 (obj, mem_ptr, a1, a2);
165 template <
typename MEM,
typename OBJ,
166 typename T1,
typename T2,
typename T3>
167 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
170 class EventMemberImpl3 :
public EventImpl
173 EventMemberImpl3 (OBJ obj, MEM
function, T1 a1, T2 a2, T3 a3)
175 m_function (function),
182 virtual ~EventMemberImpl3 ()
186 virtual void Notify (
void)
188 (EventMemberImplObjTraits<OBJ>::GetReference (m_obj).*m_function)(m_a1, m_a2, m_a3);
192 typename TypeTraits<T1>::ReferencedType m_a1;
193 typename TypeTraits<T2>::ReferencedType m_a2;
194 typename TypeTraits<T3>::ReferencedType m_a3;
195 } *ev =
new EventMemberImpl3 (obj, mem_ptr, a1, a2, a3);
199 template <
typename MEM,
typename OBJ,
200 typename T1,
typename T2,
typename T3,
typename T4>
201 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
204 class EventMemberImpl4 :
public EventImpl
207 EventMemberImpl4 (OBJ obj, MEM
function, T1 a1, T2 a2, T3 a3, T4 a4)
209 m_function (function),
217 virtual ~EventMemberImpl4 ()
221 virtual void Notify (
void)
223 (EventMemberImplObjTraits<OBJ>::GetReference (m_obj).*m_function)(m_a1, m_a2, m_a3, m_a4);
227 typename TypeTraits<T1>::ReferencedType m_a1;
228 typename TypeTraits<T2>::ReferencedType m_a2;
229 typename TypeTraits<T3>::ReferencedType m_a3;
230 typename TypeTraits<T4>::ReferencedType m_a4;
231 } *ev =
new EventMemberImpl4 (obj, mem_ptr, a1, a2, a3, a4);
235 template <
typename MEM,
typename OBJ,
236 typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
237 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj,
238 T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
241 class EventMemberImpl5 :
public EventImpl
244 EventMemberImpl5 (OBJ obj, MEM
function, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
246 m_function (function),
255 virtual ~EventMemberImpl5 ()
259 virtual void Notify (
void)
261 (EventMemberImplObjTraits<OBJ>::GetReference (m_obj).*m_function)(m_a1, m_a2, m_a3, m_a4, m_a5);
265 typename TypeTraits<T1>::ReferencedType m_a1;
266 typename TypeTraits<T2>::ReferencedType m_a2;
267 typename TypeTraits<T3>::ReferencedType m_a3;
268 typename TypeTraits<T4>::ReferencedType m_a4;
269 typename TypeTraits<T5>::ReferencedType m_a5;
270 } *ev =
new EventMemberImpl5 (obj, mem_ptr, a1, a2, a3, a4, a5);
274 template <
typename U1,
typename T1>
275 EventImpl * MakeEvent (
void (*f)(U1), T1 a1)
278 class EventFunctionImpl1 :
public EventImpl
281 typedef void (*F)(U1);
283 EventFunctionImpl1 (F
function, T1 a1)
284 : m_function (function),
289 virtual ~EventFunctionImpl1 ()
293 virtual void Notify (
void)
298 typename TypeTraits<T1>::ReferencedType m_a1;
299 } *ev =
new EventFunctionImpl1 (f, a1);
303 template <
typename U1,
typename U2,
typename T1,
typename T2>
304 EventImpl * MakeEvent (
void (*f)(U1,U2), T1 a1, T2 a2)
307 class EventFunctionImpl2 :
public EventImpl
310 typedef void (*F)(U1, U2);
312 EventFunctionImpl2 (F
function, T1 a1, T2 a2)
313 : m_function (function),
319 virtual ~EventFunctionImpl2 ()
323 virtual void Notify (
void)
325 (*m_function)(m_a1, m_a2);
328 typename TypeTraits<T1>::ReferencedType m_a1;
329 typename TypeTraits<T2>::ReferencedType m_a2;
330 } *ev =
new EventFunctionImpl2 (f, a1, a2);
334 template <
typename U1,
typename U2,
typename U3,
335 typename T1,
typename T2,
typename T3>
336 EventImpl * MakeEvent (
void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
339 class EventFunctionImpl3 :
public EventImpl
342 typedef void (*F)(U1, U2, U3);
344 EventFunctionImpl3 (F
function, T1 a1, T2 a2, T3 a3)
345 : m_function (function),
352 virtual ~EventFunctionImpl3 ()
356 virtual void Notify (
void)
358 (*m_function)(m_a1, m_a2, m_a3);
361 typename TypeTraits<T1>::ReferencedType m_a1;
362 typename TypeTraits<T2>::ReferencedType m_a2;
363 typename TypeTraits<T3>::ReferencedType m_a3;
364 } *ev =
new EventFunctionImpl3 (f, a1, a2, a3);
368 template <
typename U1,
typename U2,
typename U3,
typename U4,
369 typename T1,
typename T2,
typename T3,
typename T4>
370 EventImpl * MakeEvent (
void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
373 class EventFunctionImpl4 :
public EventImpl
376 typedef void (*F)(U1, U2, U3, U4);
378 EventFunctionImpl4 (F
function, T1 a1, T2 a2, T3 a3, T4 a4)
379 : m_function (function),
387 virtual ~EventFunctionImpl4 ()
391 virtual void Notify (
void)
393 (*m_function)(m_a1, m_a2, m_a3, m_a4);
396 typename TypeTraits<T1>::ReferencedType m_a1;
397 typename TypeTraits<T2>::ReferencedType m_a2;
398 typename TypeTraits<T3>::ReferencedType m_a3;
399 typename TypeTraits<T4>::ReferencedType m_a4;
400 } *ev =
new EventFunctionImpl4 (f, a1, a2, a3, a4);
404 template <
typename U1,
typename U2,
typename U3,
typename U4,
typename U5,
405 typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
406 EventImpl * MakeEvent (
void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
409 class EventFunctionImpl5 :
public EventImpl
412 typedef void (*F)(U1,U2,U3,U4,U5);
414 EventFunctionImpl5 (F
function, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
415 : m_function (function),
424 virtual ~EventFunctionImpl5 ()
428 virtual void Notify (
void)
430 (*m_function)(m_a1, m_a2, m_a3, m_a4, m_a5);
433 typename TypeTraits<T1>::ReferencedType m_a1;
434 typename TypeTraits<T2>::ReferencedType m_a2;
435 typename TypeTraits<T3>::ReferencedType m_a3;
436 typename TypeTraits<T4>::ReferencedType m_a4;
437 typename TypeTraits<T5>::ReferencedType m_a5;
438 } *ev =
new EventFunctionImpl5 (f, a1, a2, a3, a4, a5);