Kochol Game Engine  0.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mem_fun.h
Go to the documentation of this file.
1 // File name: mem_fun.h
2 // Des: This class is for keeping pointer to member functions and creating them.
3 // Date: 10/5/1386
4 // Programmer: Ali Akbar Mohamadi(Kochol)
5 
6 #ifndef MEM_FUN_H
7 #define MEM_FUN_H
8 
9 #include "Functor.h"
10 
11 namespace kge
12 {
13 namespace core
14 {
15 //----------------------------------------------------------------------------
17 //----------------------------------------------------------------------------
18 template <class Tclass, class Treturn>
19 class MFunctor0 : public Functor0<Treturn>
20 {
21 public:
22 
24  MFunctor0(Tclass* obj, Treturn(Tclass::*_fun)()):
25  m_pObj(obj), m_pFun(_fun)
26  {
27  } // Constructor.
28 
30  Treturn Call()
31  {
32  return (*m_pObj.*m_pFun)();
33  } // Call
34 
35 protected:
36  Tclass* m_pObj;
37  Treturn(Tclass::*m_pFun)();
39 }; // MFunctor0
40 
41 //------------------------------------------
43 //------------------------------------------
44 template <class Tclass, class Treturn>
45 MFunctor0<Tclass, Treturn>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)() )
46 {
48  return zFunc;
49 
50 } // MFunctor0 mem_fun
51 
52 //----------------------------------------------------------------------------
54 //----------------------------------------------------------------------------
55 template <class Tclass, class Treturn , class Targ1>
56 class ZFunctor1 : public Functor1<Treturn , Targ1>
57 {
58 public:
59 
61  ZFunctor1(Tclass* obj, Treturn(Tclass::*_fun)(Targ1)):
62  m_pObj(obj), m_pFun(_fun)
63  {
64  } // Constructor.
65 
67  Treturn Call(Targ1 arg1)
68  {
69  return (*m_pObj.*m_pFun)(arg1);
70  } // Call
71 
72 protected:
73  Tclass* m_pObj;
74  Treturn(Tclass::*m_pFun)(Targ1);
76 }; // ZFunctor1
77 
78 //------------------------------------------
80 //------------------------------------------
81 template <class Tclass, class Treturn , class Targ1>
82 ZFunctor1<Tclass, Treturn , Targ1>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1) )
83 {
85  return zFunc;
86 
87 } // ZFunctor1 mem_fun
88 
89 //----------------------------------------------------------------------------
91 //----------------------------------------------------------------------------
92 template <class Tclass, class Treturn , class Targ1 , class Targ2>
93 class ZFunctor2 : public Functor2<Treturn , Targ1 , Targ2>
94 {
95 public:
96 
98  ZFunctor2(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2)):
99  m_pObj(obj), m_pFun(_fun)
100  {
101  } // Constructor.
102 
104  Treturn Call(Targ1 arg1 , Targ2 arg2)
105  {
106  return (*m_pObj.*m_pFun)(arg1 , arg2);
107  } // Call
108 
109 protected:
110  Tclass* m_pObj;
111  Treturn(Tclass::*m_pFun)(Targ1 , Targ2);
113 }; // ZFunctor2
114 
115 //------------------------------------------
117 //------------------------------------------
118 template <class Tclass, class Treturn , class Targ1 , class Targ2>
119 ZFunctor2<Tclass, Treturn , Targ1 , Targ2>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2) )
120 {
122  return zFunc;
123 
124 } // ZFunctor2 mem_fun
125 
126 //----------------------------------------------------------------------------
128 //----------------------------------------------------------------------------
129 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3>
130 class ZFunctor3 : public Functor3<Treturn , Targ1 , Targ2 , Targ3>
131 {
132 public:
133 
135  ZFunctor3(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3)):
136  m_pObj(obj), m_pFun(_fun)
137  {
138  } // Constructor.
139 
141  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3)
142  {
143  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3);
144  } // Call
145 
146 protected:
147  Tclass* m_pObj;
148  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3);
150 }; // ZFunctor3
151 
152 //------------------------------------------
154 //------------------------------------------
155 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3>
156 ZFunctor3<Tclass, Treturn , Targ1 , Targ2 , Targ3>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3) )
157 {
159  return zFunc;
160 
161 } // ZFunctor3 mem_fun
162 
163 //----------------------------------------------------------------------------
165 //----------------------------------------------------------------------------
166 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4>
167 class ZFunctor4 : public Functor4<Treturn , Targ1 , Targ2 , Targ3 , Targ4>
168 {
169 public:
170 
172  ZFunctor4(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4)):
173  m_pObj(obj), m_pFun(_fun)
174  {
175  } // Constructor.
176 
178  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4)
179  {
180  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4);
181  } // Call
182 
183 protected:
184  Tclass* m_pObj;
185  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4);
187 }; // ZFunctor4
188 
189 //------------------------------------------
191 //------------------------------------------
192 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4>
193 ZFunctor4<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4) )
194 {
196  return zFunc;
197 
198 } // ZFunctor4 mem_fun
199 
200 //----------------------------------------------------------------------------
202 //----------------------------------------------------------------------------
203 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5>
204 class ZFunctor5 : public Functor5<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5>
205 {
206 public:
207 
209  ZFunctor5(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5)):
210  m_pObj(obj), m_pFun(_fun)
211  {
212  } // Constructor.
213 
215  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5)
216  {
217  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5);
218  } // Call
219 
220 protected:
221  Tclass* m_pObj;
222  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5);
224 }; // ZFunctor5
225 
226 //------------------------------------------
228 //------------------------------------------
229 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5>
230 ZFunctor5<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5) )
231 {
233  return zFunc;
234 
235 } // ZFunctor5 mem_fun
236 
237 //------------------------------------------
239 //------------------------------------------
240 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5>
241 ZFunctor5<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5>* mem_fun5 ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5) )
242 {
244  return zFunc;
245 
246 } // ZFunctor5 mem_fun
247 
248 //----------------------------------------------------------------------------
250 //----------------------------------------------------------------------------
251 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6>
252 class ZFunctor6 : public Functor6<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6>
253 {
254 public:
255 
257  ZFunctor6(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6)):
258  m_pObj(obj), m_pFun(_fun)
259  {
260  } // Constructor.
261 
263  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6)
264  {
265  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6);
266  } // Call
267 
268 protected:
269  Tclass* m_pObj;
270  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6);
272 }; // ZFunctor6
273 
274 //------------------------------------------
276 //------------------------------------------
277 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6>
278 ZFunctor6<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6) )
279 {
281  return zFunc;
282 
283 } // ZFunctor6 mem_fun
284 
285 //----------------------------------------------------------------------------
287 //----------------------------------------------------------------------------
288 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7>
289 class ZFunctor7 : public Functor7<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7>
290 {
291 public:
292 
294  ZFunctor7(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7)):
295  m_pObj(obj), m_pFun(_fun)
296  {
297  } // Constructor.
298 
300  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7)
301  {
302  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7);
303  } // Call
304 
305 protected:
306  Tclass* m_pObj;
307  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7);
309 }; // ZFunctor7
310 
311 //------------------------------------------
313 //------------------------------------------
314 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7>
315 ZFunctor7<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7) )
316 {
318  return zFunc;
319 
320 } // ZFunctor7 mem_fun
321 
322 //----------------------------------------------------------------------------
324 //----------------------------------------------------------------------------
325 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8>
326 class ZFunctor8 : public Functor8<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8>
327 {
328 public:
329 
331  ZFunctor8(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8)):
332  m_pObj(obj), m_pFun(_fun)
333  {
334  } // Constructor.
335 
337  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8)
338  {
339  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8);
340  } // Call
341 
342 protected:
343  Tclass* m_pObj;
344  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8);
346 }; // ZFunctor8
347 
348 //------------------------------------------
350 //------------------------------------------
351 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8>
352 ZFunctor8<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8) )
353 {
355  return zFunc;
356 
357 } // ZFunctor8 mem_fun
358 
359 //----------------------------------------------------------------------------
361 //----------------------------------------------------------------------------
362 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9>
363 class ZFunctor9 : public Functor9<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9>
364 {
365 public:
366 
368  ZFunctor9(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9)):
369  m_pObj(obj), m_pFun(_fun)
370  {
371  } // Constructor.
372 
374  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9)
375  {
376  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9);
377  } // Call
378 
379 protected:
380  Tclass* m_pObj;
381  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9);
383 }; // ZFunctor9
384 
385 //------------------------------------------
387 //------------------------------------------
388 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9>
389 ZFunctor9<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9) )
390 {
392  return zFunc;
393 
394 } // ZFunctor9 mem_fun
395 
396 //----------------------------------------------------------------------------
398 //----------------------------------------------------------------------------
399 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9 , class Targ10>
400 class ZFunctor10 : public Functor10<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10>
401 {
402 public:
403 
405  ZFunctor10(Tclass* obj, Treturn(Tclass::*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10)):
406  m_pObj(obj), m_pFun(_fun)
407  {
408  } // Constructor.
409 
411  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9 , Targ10 arg10)
412  {
413  return (*m_pObj.*m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10);
414  } // Call
415 
416 protected:
417  Tclass* m_pObj;
418  Treturn(Tclass::*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10);
420 }; // ZFunctor10
421 
422 //------------------------------------------
424 //------------------------------------------
425 template <class Tclass, class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9 , class Targ10>
426 ZFunctor10<Tclass, Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10>* mem_fun ( Tclass *obj, Treturn(Tclass::*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9 , Targ10 arg10) )
427 {
429  return zFunc;
430 
431 } // ZFunctor10 mem_fun
432 
433 
434 } // core
435 
436 } // kge
437 
438 #endif // MEM_FUN_H