Kochol Game Engine  0.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ptr_fun.h
Go to the documentation of this file.
1 // File name: ptr_fun.h
2 // Des: This class is for keeping pointer to functions and creating them.
3 // Date: 12/5/1386
4 // Programmer: Ali Akbar Mohamadi(Kochol)
5 
6 #ifndef PTR_FUN_H
7 #define PTR_FUN_H
8 
9 #include "Functor.h"
10 
11 namespace kge
12 {
13 namespace core
14 {
15 //---------------------------------------------------------------------
17 //---------------------------------------------------------------------
18 template <class Treturn>
19 class PFunctor0 : public Functor0<Treturn>
20 {
21 public:
22 
24  PFunctor0(Treturn(*_fun)()):
25  m_pFun(_fun)
26  {
27  } // Constructor.
28 
30  Treturn Call()
31  {
32  return (m_pFun)();
33  } // Call
34 
35 protected:
36  Treturn(*m_pFun)();
38 }; // ZFunctor0
39 
40 //------------------------------------------
42 //------------------------------------------
43 template <class Treturn>
44 PFunctor0<Treturn>* ptr_fun ( Treturn(*_fun)() )
45 {
46  PFunctor0<Treturn>* xFunc = new PFunctor0<Treturn>(_fun);
47 
48  return xFunc;
49 
50 } // PFunctor0 ptr_fun
51 
52 //---------------------------------------------------------------------
54 //---------------------------------------------------------------------
55 template <class Treturn , class Targ1>
56 class PFunctor1 : public Functor1<Treturn , Targ1>
57 {
58 public:
59 
61  PFunctor1(Treturn(*_fun)(Targ1)):
62  m_pFun(_fun)
63  {
64  } // Constructor.
65 
67  Treturn Call(Targ1 arg1)
68  {
69  return (m_pFun)(arg1);
70  } // Call
71 
72 protected:
73  Treturn(*m_pFun)(Targ1);
75 }; // PFunctor1
76 
77 //------------------------------------------
79 //------------------------------------------
80 template <class Treturn , class Targ1>
81 PFunctor1<Treturn , Targ1>* ptr_fun ( Treturn(*_fun)(Targ1 arg1) )
82 {
84  return xFunc;
85 
86 } // PFuctor1 ptr_fun
87 
88 //---------------------------------------------------------------------
90 //---------------------------------------------------------------------
91 template <class Treturn , class Targ1 , class Targ2>
92 class PFunctor2 : public Functor2<Treturn , Targ1 , Targ2>
93 {
94 public:
95 
97  PFunctor2(Treturn(*_fun)(Targ1 , Targ2)):
98  m_pFun(_fun)
99  {
100  } // Constructor.
101 
103  Treturn Call(Targ1 arg1 , Targ2 arg2)
104  {
105  return (m_pFun)(arg1 , arg2);
106  } // Call
107 
108 protected:
109  Treturn(*m_pFun)(Targ1 , Targ2);
111 }; // PFunctor2
112 
113 //------------------------------------------
115 //------------------------------------------
116 template <class Treturn , class Targ1 , class Targ2>
117 PFunctor2<Treturn , Targ1 , Targ2>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2) )
118 {
120  return xFunc;
121 
122 } // PFuctor2 ptr_fun
123 
124 //---------------------------------------------------------------------
126 //---------------------------------------------------------------------
127 template <class Treturn , class Targ1 , class Targ2 , class Targ3>
128 class PFunctor3 : public Functor3<Treturn , Targ1 , Targ2 , Targ3>
129 {
130 public:
131 
133  PFunctor3(Treturn(*_fun)(Targ1 , Targ2 , Targ3)):
134  m_pFun(_fun)
135  {
136  } // Constructor.
137 
139  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3)
140  {
141  return (m_pFun)(arg1 , arg2 , arg3);
142  } // Call
143 
144 protected:
145  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3);
147 }; // PFunctor3
148 
149 //------------------------------------------
151 //------------------------------------------
152 template <class Treturn , class Targ1 , class Targ2 , class Targ3>
153 PFunctor3<Treturn , Targ1 , Targ2 , Targ3>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3) )
154 {
156  return xFunc;
157 
158 } // PFuctor3 ptr_fun
159 
160 //---------------------------------------------------------------------
162 //---------------------------------------------------------------------
163 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4>
164 class PFunctor4 : public Functor4<Treturn , Targ1 , Targ2 , Targ3 , Targ4>
165 {
166 public:
167 
169  PFunctor4(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4)):
170  m_pFun(_fun)
171  {
172  } // Constructor.
173 
175  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4)
176  {
177  return (m_pFun)(arg1 , arg2 , arg3 , arg4);
178  } // Call
179 
180 protected:
181  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4);
183 }; // PFunctor4
184 
185 //------------------------------------------
187 //------------------------------------------
188 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4>
189 PFunctor4<Treturn , Targ1 , Targ2 , Targ3 , Targ4>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4) )
190 {
192  return xFunc;
193 
194 } // PFuctor4 ptr_fun
195 
196 //---------------------------------------------------------------------
198 //---------------------------------------------------------------------
199 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5>
200 class PFunctor5 : public Functor5<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5>
201 {
202 public:
203 
205  PFunctor5(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5)):
206  m_pFun(_fun)
207  {
208  } // Constructor.
209 
211  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5)
212  {
213  return (m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5);
214  } // Call
215 
216 protected:
217  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5);
219 }; // PFunctor5
220 
221 //------------------------------------------
223 //------------------------------------------
224 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5>
225 PFunctor5<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5) )
226 {
228  return xFunc;
229 
230 } // PFuctor5 ptr_fun
231 
232 //---------------------------------------------------------------------
234 //---------------------------------------------------------------------
235 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6>
236 class PFunctor6 : public Functor6<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6>
237 {
238 public:
239 
241  PFunctor6(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6)):
242  m_pFun(_fun)
243  {
244  } // Constructor.
245 
247  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6)
248  {
249  return (m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6);
250  } // Call
251 
252 protected:
253  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6);
255 }; // PFunctor6
256 
257 //------------------------------------------
259 //------------------------------------------
260 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6>
261 PFunctor6<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6) )
262 {
264  return xFunc;
265 
266 } // PFuctor6 ptr_fun
267 
268 //---------------------------------------------------------------------
270 //---------------------------------------------------------------------
271 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7>
272 class PFunctor7 : public Functor7<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7>
273 {
274 public:
275 
277  PFunctor7(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7)):
278  m_pFun(_fun)
279  {
280  } // Constructor.
281 
283  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7)
284  {
285  return (m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7);
286  } // Call
287 
288 protected:
289  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7);
291 }; // PFunctor7
292 
293 //------------------------------------------
295 //------------------------------------------
296 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7>
297 PFunctor7<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7) )
298 {
300  return xFunc;
301 
302 } // PFuctor7 ptr_fun
303 
304 //---------------------------------------------------------------------
306 //---------------------------------------------------------------------
307 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8>
308 class PFunctor8 : public Functor8<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8>
309 {
310 public:
311 
313  PFunctor8(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8)):
314  m_pFun(_fun)
315  {
316  } // Constructor.
317 
319  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8)
320  {
321  return (m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8);
322  } // Call
323 
324 protected:
325  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8);
327 }; // PFunctor8
328 
329 //------------------------------------------
331 //------------------------------------------
332 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8>
333 PFunctor8<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8) )
334 {
336  return xFunc;
337 
338 } // PFuctor8 ptr_fun
339 
340 //---------------------------------------------------------------------
342 //---------------------------------------------------------------------
343 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9>
344 class PFunctor9 : public Functor9<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9>
345 {
346 public:
347 
349  PFunctor9(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9)):
350  m_pFun(_fun)
351  {
352  } // Constructor.
353 
355  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9)
356  {
357  return (m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9);
358  } // Call
359 
360 protected:
361  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9);
363 }; // PFunctor9
364 
365 //------------------------------------------
367 //------------------------------------------
368 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9>
369 PFunctor9<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9) )
370 {
372  return xFunc;
373 
374 } // PFuctor9 ptr_fun
375 
376 //---------------------------------------------------------------------
378 //---------------------------------------------------------------------
379 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9 , class Targ10>
380 class PFunctor10 : public Functor10<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10>
381 {
382 public:
383 
385  PFunctor10(Treturn(*_fun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10)):
386  m_pFun(_fun)
387  {
388  } // Constructor.
389 
391  Treturn Call(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9 , Targ10 arg10)
392  {
393  return (m_pFun)(arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10);
394  } // Call
395 
396 protected:
397  Treturn(*m_pFun)(Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10);
399 }; // PFunctor10
400 
401 //------------------------------------------
403 //------------------------------------------
404 template <class Treturn , class Targ1 , class Targ2 , class Targ3 , class Targ4 , class Targ5 , class Targ6 , class Targ7 , class Targ8 , class Targ9 , class Targ10>
405 PFunctor10<Treturn , Targ1 , Targ2 , Targ3 , Targ4 , Targ5 , Targ6 , Targ7 , Targ8 , Targ9 , Targ10>* ptr_fun ( Treturn(*_fun)(Targ1 arg1 , Targ2 arg2 , Targ3 arg3 , Targ4 arg4 , Targ5 arg5 , Targ6 arg6 , Targ7 arg7 , Targ8 arg8 , Targ9 arg9 , Targ10 arg10) )
406 {
408  return xFunc;
409 
410 } // PFuctor10 ptr_fun
411 
412 } // core
413 
414 } // kge
415 
416 #endif // PTR_FUN_H