Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/util/executor/executor_functional.h @ 8035

Last change on this file since 8035 was 8035, checked in by bensch, 18 years ago

gui: merged the gui back to the trunk

File size: 19.9 KB
Line 
1/*!
2 * @file executor_functional.h
3 * Definition of an Executor
4 */
5
6/*
7   orxonox - the future of 3D-vertical-scrollers
8
9   Copyright (C) 2004 orx
10
11   This program is free software; you can redistribute it and/or modify
12   it under the terms of the GNU General Public License as published by
13   the Free Software Foundation; either version 2, or (at your option)
14   any later version.
15
16### File Specific:
17   main-programmer: Benjamin Grauer
18   co-programmer: ...
19*/
20
21
22#ifndef __EXECUTOR_FUNCTIONAL_H_
23#define __EXECUTOR_FUNCTIONAL_H_
24
25#include "executor.h"
26
27template<typename type> MT_Type ExecutorParamType() { return MT_EXT1; };
28template<> MT_Type ExecutorParamType<bool>();
29template<> MT_Type ExecutorParamType<int>();
30template<> MT_Type ExecutorParamType<unsigned int>();
31template<> MT_Type ExecutorParamType<float>();
32template<> MT_Type ExecutorParamType<char>();
33template<> MT_Type ExecutorParamType<const std::string&>();
34
35template<typename type> type fromString(const std::string& input, type defaultValue) { return defaultValue; };
36template<> bool fromString<bool>(const std::string& input, bool defaultValue);
37template<> int fromString<int>(const std::string& input, int defaultValue);
38template<> unsigned int fromString<unsigned int>(const std::string& input, unsigned int defaultValue);
39template<> float fromString<float>(const std::string& input, float defaultValue);
40template<> char fromString<char>(const std::string& input, char defaultValue);
41template<> const std::string& fromString<const std::string&>(const std::string& input, const std::string& defaultValue);
42
43template<typename type> type fromMulti(const MultiType& multi) { /* return defaultValue; */ };
44template<> bool fromMulti<bool>(const MultiType& multi);
45template<> int fromMulti<int>(const MultiType& multi);
46template<> unsigned int fromMulti<unsigned int>(const MultiType& multi);
47template<> float fromMulti<float>(const MultiType& multi);
48template<> char fromMulti<char>(const MultiType& multi);
49template<> const std::string& fromMulti<const std::string&>(const MultiType& multi);
50
51
52template<typename type> type getDefault(const MultiType* const defaultValues, unsigned int i) { return (type)0; };
53template<> bool getDefault<bool>(const MultiType* const defaultValues, unsigned int i);
54template<> int getDefault<int>(const MultiType* const defaultValues, unsigned int i);
55template<> unsigned int getDefault<unsigned int>(const MultiType* const defaultValues, unsigned int i);
56template<> float getDefault<float>(const MultiType* const defaultValues, unsigned int i);
57template<> char getDefault<char>(const MultiType* const defaultValues, unsigned int i);
58template<> const std::string& getDefault<const std::string&>(const MultiType* const defaultValues, unsigned int i);
59
60#endif /* __EXECUTOR_FUNCTIONAL_H_ */
61
62//! if Functional is constant calling
63#define __EXECUTOR_FUNCTIONAL_CONST
64//! The Name to be attached to the functional (for normal, static, and const modes)
65#define __EXECUTOR_FUNCTIONAL_NAME(ParamCount)   Executor##ParamCount##Params
66//! The Execution-mode (either static or objective)
67#define __EXECUTOR_FUNCTIONAL_FUNCTION_EXEC      dynamic_cast<T*>(object)->*(functionPointer)
68//! The Function-Pointer, and how to save it internally.
69#define __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER   T::*functionPointer
70
71#ifdef EXECUTOR_FUNCTIONAL_USE_CONST
72 #undef __EXECUTOR_FUNCTIONAL_CONST
73 #define __EXECUTOR_FUNCTIONAL_CONST const
74 #undef __EXECUTOR_FUNCTIONAL_NAME
75 #define __EXECUTOR_FUNCTIONAL_NAME(ParamCount) Executor##ParamCount##Params_const
76#endif
77
78#ifdef EXECUTOR_FUNCTIONAL_USE_STATIC
79 #ifdef EXECUTOR_FUNCTIONAL_USE_CONST
80  #error you obviously do not know what you are doing !! ask the bensch
81 #endif /* EXECUTOR_FUNCTIONAL_USE_CONST */
82
83#undef __EXECUTOR_FUNCTIONAL_FUNCTION_EXEC
84 #define __EXECUTOR_FUNCTIONAL_FUNCTION_EXEC       functionPointer
85 #undef __EXECUTOR_FUNCTIONAL_NAME
86 #define __EXECUTOR_FUNCTIONAL_NAME(ParamCount)    Executor##ParamCount##Params_static
87 #undef __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER
88 #define __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER    *functionPointer
89
90#endif /* EXECUTOR_FUNCTIONAL_USE_STATIC */
91
92///////////
93//// 0 ////
94///////////
95//! @brief ExecutorClass, that can execute Functions without any parameters.
96template<class T> class __EXECUTOR_FUNCTIONAL_NAME(0) : public Executor
97{
98private:
99  /** @brief the FunctioPointer. */
100  void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)() __EXECUTOR_FUNCTIONAL_CONST;
101
102public:
103  /**
104   * @brief constructs the Executor.
105   * @param __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER the FunctionPointer to the Calling Function.
106   */
107  __EXECUTOR_FUNCTIONAL_NAME(0) (void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)() __EXECUTOR_FUNCTIONAL_CONST )
108      : Executor()
109  {
110    this->functorType = Executor_Objective;
111    this->functionPointer = functionPointer;
112  };
113
114  /**
115   * @brief executes the Functional
116   * @param object the Object the action should be executed on.
117   * @param sub the SubString to get the Parameters from.
118   */
119  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const
120  {
121    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)();
122  };
123
124  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
125  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
126  {
127    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)();
128  }
129
130  /**
131   * @brief copies the Executor
132   * @returns a new Executor that's a copy of this one.
133   */
134  virtual Executor* clone() const
135  {
136    return new __EXECUTOR_FUNCTIONAL_NAME(0)<T>(this->functionPointer);
137  };
138};
139
140
141
142///////////
143//// 1 ////
144///////////
145//! @brief ExecutorClass, that can execute Functions with one parameter.
146template<class T, typename type0> class __EXECUTOR_FUNCTIONAL_NAME(1) : public Executor
147{
148private:
149  /** @brief the FunctioPointer. */
150  void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0) __EXECUTOR_FUNCTIONAL_CONST;
151
152public:
153  /**
154   * @brief constructs the Executor.
155   * @param __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER the FunctionPointer to the Calling Function.
156   */
157  __EXECUTOR_FUNCTIONAL_NAME(1) (void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0) __EXECUTOR_FUNCTIONAL_CONST)
158      : Executor(ExecutorParamType<type0>())
159  {
160    this->functorType = Executor_Objective;
161    this->functionPointer = functionPointer;
162  };
163
164  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
165  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
166  {
167    return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
168             fromMulti<type0>((count > 0)? values[0] : this->defaultValue[0]) );
169  }
170
171
172  /**
173   * @brief executes the Functional
174   * @param object the Object the action should be executed on.
175   * @param sub the SubString to get the Parameters from.
176   */
177  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const
178  {
179    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
180      fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)) );
181  };
182
183  /**
184   * @brief copies the Executor
185   * @returns a new Executor that's a copy of this one.
186   */
187  virtual Executor* clone() const
188  {
189    return  new __EXECUTOR_FUNCTIONAL_NAME(1)<T, type0>(this->functionPointer);
190  };
191};
192
193///////////
194//// 2 ////
195///////////
196//! @brief ExecutorClass, that can execute Functions with two parameters.
197template<class T, typename type0, typename type1> class __EXECUTOR_FUNCTIONAL_NAME(2) : public Executor
198{
199private:
200  /** @brief the FunctioPointer. */
201  void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1) __EXECUTOR_FUNCTIONAL_CONST;
202
203public:
204  /**
205   * @brief constructs the Executor.
206   * @param __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER the FunctionPointer to the Calling Function.
207   */
208  __EXECUTOR_FUNCTIONAL_NAME(2) (void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1) __EXECUTOR_FUNCTIONAL_CONST)
209      : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>())
210  {
211    this->functorType = Executor_Objective;
212    this->functionPointer = functionPointer;
213  };
214
215  /**
216   * @brief executes the Functional
217   * @param object the Object the action should be executed on.
218   * @param sub the SubString to get the Parameters from.
219   */
220  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const
221  {
222    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
223      fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)),
224      fromString<type1>(sub[1], getDefault<type1>(this->defaultValue, 1)));
225  };
226
227  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
228  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
229  {
230    return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
231             fromMulti<type0>((count > 0) ? values[0] : this->defaultValue[0]),
232             fromMulti<type1>((count > 1) ? values[1] : this->defaultValue[1]) );
233  }
234
235  /**
236   * @brief copies the Executor
237   * @returns a new Executor that's a copy of this one.
238   */
239  virtual Executor* clone() const
240  {
241    return new __EXECUTOR_FUNCTIONAL_NAME(2)<T, type0, type1>(this->functionPointer);
242  };
243};
244
245
246///////////
247//// 3 ////
248///////////
249//! @brief ExecutorClass, that can execute Functions with three parameters.
250template<class T, typename type0, typename type1, typename type2> class __EXECUTOR_FUNCTIONAL_NAME(3) : public Executor
251{
252private:
253  /** @brief the FunctioPointer. */
254  void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1, type2) __EXECUTOR_FUNCTIONAL_CONST;
255
256public:
257  /**
258   * @brief constructs the Executor.
259   * @param __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER the FunctionPointer to the Calling Function.
260   */
261  __EXECUTOR_FUNCTIONAL_NAME(3) (void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1, type2) __EXECUTOR_FUNCTIONAL_CONST)
262      : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>(), ExecutorParamType<type2>())
263  {
264    this->functorType = Executor_Objective;
265    this->functionPointer = functionPointer;
266  };
267
268  /**
269   * @brief executes the Functional
270   * @param object the Object the action should be executed on.
271   * @param sub the SubString to get the Parameters from.
272   */
273  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const
274  {
275    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
276      fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)),
277      fromString<type1>(sub[1], getDefault<type1>(this->defaultValue, 1)),
278      fromString<type2>(sub[2], getDefault<type2>(this->defaultValue, 2)));
279  };
280
281  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
282  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
283  {
284    return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
285             fromMulti<type0>((count > 0) ? values[0] : this->defaultValue[0]),
286             fromMulti<type1>((count > 1) ? values[1] : this->defaultValue[1]),
287             fromMulti<type2>((count > 2) ? values[2] : this->defaultValue[2]) );
288  }
289
290  /**
291   * @brief copies the Executor
292   * @returns a new Executor that's a copy of this one.
293   */
294  virtual Executor* clone() const
295  {
296    return new __EXECUTOR_FUNCTIONAL_NAME(3)<T, type0, type1, type2>(this->functionPointer);
297  };
298};
299
300
301
302///////////
303//// 4 ////
304///////////
305//! @brief ExecutorClass, that can execute Functions with four parameters.
306template<class T, typename type0, typename type1, typename type2, typename type3> class __EXECUTOR_FUNCTIONAL_NAME(4) : public Executor
307{
308private:
309  /** @brief the FunctioPointer. */
310  void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1, type2, type3) __EXECUTOR_FUNCTIONAL_CONST;
311
312public:
313  /**
314   * @brief constructs the Executor.
315   * @param __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER the FunctionPointer to the Calling Function.
316   */
317  __EXECUTOR_FUNCTIONAL_NAME(4) (void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1, type2, type3) __EXECUTOR_FUNCTIONAL_CONST)
318      : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>(), ExecutorParamType<type2>(), ExecutorParamType<type3>())
319  {
320    this->functorType = Executor_Objective;
321    this->functionPointer = functionPointer;
322  };
323
324  /**
325  * @brief executes the Functional
326  * @param object the Object the action should be executed on.
327  * @param sub the SubString to get the Parameters from.
328   */
329  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const
330  {
331    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
332      fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)),
333      fromString<type1>(sub[1], getDefault<type1>(this->defaultValue, 1)),
334      fromString<type2>(sub[2], getDefault<type2>(this->defaultValue, 2)),
335      fromString<type3>(sub[3], getDefault<type3>(this->defaultValue, 3)));
336  };
337
338  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
339  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
340  {
341    return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
342             fromMulti<type0>((count > 0) ? values[0] : this->defaultValue[0]),
343             fromMulti<type1>((count > 1) ? values[1] : this->defaultValue[1]),
344             fromMulti<type2>((count > 2) ? values[2] : this->defaultValue[2]),
345             fromMulti<type3>((count > 3) ? values[3] : this->defaultValue[3]) );
346  }
347
348  /**
349   * @brief copies the Executor
350   * @returns a new Executor that's a copy of this one.
351   */
352  virtual Executor* clone() const
353  {
354    return new __EXECUTOR_FUNCTIONAL_NAME(4)<T, type0, type1, type2, type3>(this->functionPointer);
355  };
356};
357
358
359
360///////////
361//// 5 ////
362///////////
363//! @brief ExecutorClass, that can execute Functions with five parameters.
364template<class T, typename type0, typename type1, typename type2, typename type3, typename type4> class __EXECUTOR_FUNCTIONAL_NAME(5) : public Executor
365{
366private:
367  /** @brief the FunctioPointer. */
368  void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1, type2, type3, type4) __EXECUTOR_FUNCTIONAL_CONST;
369
370public:
371  /**
372   * @brief constructs the Executor.
373   * @param __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER the FunctionPointer to the Calling Function.
374   */
375  __EXECUTOR_FUNCTIONAL_NAME(5) (void (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0, type1, type2, type3, type4) __EXECUTOR_FUNCTIONAL_CONST)
376      : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>(), ExecutorParamType<type2>(), ExecutorParamType<type3>(), ExecutorParamType<type4>())
377  {
378    this->functorType = Executor_Objective;
379    this->functionPointer = functionPointer;
380  };
381
382  /**
383  * @brief executes the Functional
384  * @param object the Object the action should be executed on.
385  * @param sub the SubString to get the Parameters from.
386   */
387  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const
388  {
389    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
390      fromString<type0>(sub[0], getDefault<type0>(this->defaultValue, 0)),
391      fromString<type1>(sub[1], getDefault<type1>(this->defaultValue, 1)),
392      fromString<type2>(sub[2], getDefault<type2>(this->defaultValue, 2)),
393      fromString<type3>(sub[3], getDefault<type3>(this->defaultValue, 3)),
394      fromString<type4>(sub[4], getDefault<type4>(this->defaultValue, 4)));
395  };
396
397  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
398  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
399  {
400    return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
401             fromMulti<type0>((count > 0) ? values[0] : this->defaultValue[0]),
402             fromMulti<type1>((count > 1) ? values[1] : this->defaultValue[1]),
403             fromMulti<type2>((count > 2) ? values[2] : this->defaultValue[2]),
404             fromMulti<type3>((count > 3) ? values[3] : this->defaultValue[3]),
405             fromMulti<type4>((count > 4) ? values[4] : this->defaultValue[4]) );
406  }
407
408  /**
409   * @brief copies the Executor
410   * @returns a new Executor that's a copy of this one.
411   */
412  virtual Executor* clone() const
413  {
414    return new __EXECUTOR_FUNCTIONAL_NAME(5)<T, type0, type1, type2, type3, type4>(this->functionPointer);
415  };
416};
417
418
419
420/**
421 * @brief enables us to easily retrieve an Executor of Class T with modular Argument-count, (without thinking about args at all)
422 */
423#define EXECUTOR_FUNCTIONAL_CREATOR0(ret) \
424template<class T> Executor* createExecutor(ret (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)() __EXECUTOR_FUNCTIONAL_CONST) \
425{ \
426  return new __EXECUTOR_FUNCTIONAL_NAME(0)<T>(functionPointer); \
427}
428
429/**
430 * @brief enables us to easily retrieve an Executor of Class T with modular Argument-count, (without thinking about args at all)
431 * @param type0 for internal usage: the first Argument
432 */
433#define EXECUTOR_FUNCTIONAL_CREATOR1(ret, type0) \
434template<class T> Executor* createExecutor(ret (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0##_TYPE) __EXECUTOR_FUNCTIONAL_CONST) \
435{ \
436  return new __EXECUTOR_FUNCTIONAL_NAME(1)<T, type0##_TYPE>(functionPointer); \
437}
438
439/**
440 * @brief enables us to easily retrieve an Executor of Class T with modular Argument-count, (without thinking about args at all)
441 * @param type0 for internal usage: the first Argument
442 * @param type1 for internal usage: the second Argument
443 */
444#define EXECUTOR_FUNCTIONAL_CREATOR2(ret, type0, type1) \
445template<class T> Executor* createExecutor(ret (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0##_TYPE, type1##_TYPE) __EXECUTOR_FUNCTIONAL_CONST) \
446{ \
447  return new __EXECUTOR_FUNCTIONAL_NAME(2)<T, type0##_TYPE, type1##_TYPE>(functionPointer); \
448}
449
450/**
451 * @brief enables us to easily retrieve an Executor of Class T with modular Argument-count, (without thinking about args at all)
452 * @param type0 for internal usage: the first Argument
453 * @param type1 for internal usage: the second Argument
454 * @param type2 for internal usage: the third Argument
455 */
456#define EXECUTOR_FUNCTIONAL_CREATOR3(ret, type0, type1, type2) \
457template<class T> Executor* createExecutor(ret (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0##_TYPE, type1##_TYPE, type2##_TYPE) __EXECUTOR_FUNCTIONAL_CONST) \
458{ \
459  return new __EXECUTOR_FUNCTIONAL_NAME(3)<T, type0##_TYPE, type1##_TYPE, type2##_TYPE>(functionPointer); \
460}
461
462/**
463 * @brief enables us to easily retrieve an Executor of Class T with modular Argument-count, (without thinking about args at all)
464 * @param type0 for internal usage: the first Argument
465 * @param type1 for internal usage: the second Argument
466 * @param type2 for internal usage: the third Argument
467 * @param type3 for internal usage: the fourth Argument
468 */
469#define EXECUTOR_FUNCTIONAL_CREATOR4(ret, type0, type1, type2, type3) \
470template<class T> Executor* createExecutor(ret (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0##_TYPE, type1##_TYPE, type2##_TYPE, type3##_TYPE) __EXECUTOR_FUNCTIONAL_CONST) \
471{ \
472  return new __EXECUTOR_FUNCTIONAL_NAME(4)<T, type0##_TYPE, type1##_TYPE, type2##_TYPE, type3##_TYPE>(functionPointer); \
473}
474
475/**
476 * @brief enables us to easily retrieve an Executor of Class T with modular Argument-count, (without thinking about args at all)
477 * @param type0 for internal usage: the first Argument
478 * @param type1 for internal usage: the second Argument
479 * @param type2 for internal usage: the third Argument
480 * @param type3 for internal usage: the fourth Argument
481 * @param type4 for internal usage: the fifth Argument
482 */
483#define EXECUTOR_FUNCTIONAL_CREATOR5(ret, type0, type1, type2, type3, type4) \
484template<class T> Executor* createExecutor(ret (__EXECUTOR_FUNCTIONAL_FUNCTION_POINTER)(type0##_TYPE, type1##_TYPE, type2##_TYPE, type3##_TYPE, type4##_TYPE) __EXECUTOR_FUNCTIONAL_CONST) \
485{ \
486    return new __EXECUTOR_FUNCTIONAL_NAME(5)<T, type0##_TYPE, type1##_TYPE, type2##_TYPE, type3##_TYPE, type4##_TYPE>(functionPointer); \
487}
488
489
490/**
491 * Creates the FunctionCallers
492 */
493#define FUNCTOR_LIST(x) EXECUTOR_FUNCTIONAL_CREATOR ## x
494#include "functor_list.h"
495#undef FUNCTOR_LIST
496
497
498
499#undef __EXECUTOR_FUNCTIONAL_CONST
500#undef __EXECUTOR_FUNCTIONAL_NAME
501#undef __EXECUTOR_FUNCTIONAL_FUNCTION_EXEC
502#undef __EXECUTOR_FUNCTIONAL_FUNCTION_POINTER
503
504#ifdef EXECUTOR_FUNCTIONAL_USE_CONST
505 #undef EXECUTOR_FUNCTIONAL_USE_CONST
506#endif
507#ifdef EXECUTOR_FUNCTIONAL_USE_STATIC
508 #undef EXECUTOR_FUNCTIONAL_USE_STATIC
509#endif
Note: See TracBrowser for help on using the repository browser.