5#ifndef NXOpen_Callback_HXX_INCLUDED
6#define NXOpen_Callback_HXX_INCLUDED
28 template <
class Result>
42 template <
class Result>
67 return typeid(*this) ==
typeid(other) &&
68 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
73#if defined(_WIN32) && !defined(_WIN64)
76 template <
class Result>
77 class Callback0StdCallFunction :
public Callback0<Result>
81 typedef Callback0StdCallFunction<Result> MyClass;
83 typedef Result (__stdcall *FunctionType)();
85 Callback0StdCallFunction(FunctionType fn)
91 virtual Result operator()()
const
95 virtual BaseCallback *Clone()
const
97 return new MyClass(*
this);
99 virtual bool Equals(
const BaseCallback& other)
const
101 return typeid(*this) ==
typeid(other) &&
102 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
109 template <
class T,
class Result>
124 return (m_object->*m_fn)();
132 return typeid(*this) ==
typeid(other) &&
133 m_object ==
static_cast<const MyClass &
>(other).m_object &&
134 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
141 template <
class Result>
147 typedef std::vector<BaseClass *> FunctionVector;
148 typedef typename FunctionVector::iterator iterator;
157 FunctionVector copy = m_functions;
158 if (copy.size() == 0)
160 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
162 return (*copy.back())();
165 void Add(
const BaseClass &fn)
167 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
172 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
173 if ((*it)->Equals(fn))
175 m_functions.erase(it);
183 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
188 return new MyClass(*
this);
195 FunctionVector m_functions;
198 template <
class T,
class Result>
204 template <
class Result>
209#if defined(_WIN32) && !defined(_WIN64)
211 template <
class Result>
212 Callback0StdCallFunction<Result>
make_callback(Result (__stdcall *fn)())
214 return Callback0StdCallFunction<Result>(fn);
218 template <
class Result,
class Arg1>
233 template <
class Result,
class Arg1>
258 return typeid(*this) ==
typeid(other) &&
259 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
264#if defined(_WIN32) && !defined(_WIN64)
266 template <
class Result,
class Arg1>
267 class Callback1StdCallFunction :
public Callback1<Result, Arg1>
271 typedef Callback1StdCallFunction<Result, Arg1> MyClass;
273 typedef Result (__stdcall *FunctionType)(Arg1);
275 Callback1StdCallFunction(FunctionType fn)
281 virtual Result operator()(Arg1 a1)
const
285 virtual BaseCallback *Clone()
const
287 return new MyClass(*
this);
289 virtual bool Equals(
const BaseCallback& other)
const
291 return typeid(*this) ==
typeid(other) &&
292 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
299 template <
class T,
class Result,
class Arg1>
314 return (m_object->*m_fn)(a1);
322 return typeid(*this) ==
typeid(other) &&
323 m_object ==
static_cast<const MyClass &
>(other).m_object &&
324 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
331 template <
class Result,
class Arg1>
337 typedef std::vector<BaseClass *> FunctionVector;
338 typedef typename FunctionVector::iterator iterator;
347 FunctionVector copy = m_functions;
348 if (copy.size() == 0)
350 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
352 return (*copy.back())(a1);
355 void Add(
const BaseClass &fn)
357 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
362 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
363 if ((*it)->Equals(fn))
365 m_functions.erase(it);
373 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
378 return new MyClass(*
this);
385 FunctionVector m_functions;
439 template <
class T,
class Result,
class Arg1>
445 template <
class Result,
class Arg1>
455#if defined(_WIN32) && !defined(_WIN64)
456 template <
class Result,
class Arg1>
457 Callback1StdCallFunction<Result, Arg1>
make_callback(Result (__stdcall *fn)(Arg1))
459 return Callback1StdCallFunction<Result, Arg1>(fn);
463 template <
class Result,
class Arg1,
class Arg2>
480 template <
class Result,
class Arg1,
class Arg2>
505 return typeid(*this) ==
typeid(other) &&
506 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
511#if defined(_WIN32) && !defined(_WIN64)
513 template <
class Result,
class Arg1,
class Arg2>
514 class Callback2StdCallFunction :
public Callback2<Result, Arg1, Arg2>
518 typedef Callback2StdCallFunction<Result, Arg1, Arg2> MyClass;
520 typedef Result (__stdcall *FunctionType)(Arg1, Arg2);
522 Callback2StdCallFunction(FunctionType fn)
528 virtual Result operator()(Arg1 a1, Arg2 a2)
const
532 virtual BaseCallback *Clone()
const
534 return new MyClass(*
this);
536 virtual bool Equals(
const BaseCallback& other)
const
538 return typeid(*this) ==
typeid(other) &&
539 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
546 template <
class T,
class Result,
class Arg1,
class Arg2>
561 return (m_object->*m_fn)(a1, a2);
569 return typeid(*this) ==
typeid(other) &&
570 m_object ==
static_cast<const MyClass &
>(other).m_object &&
571 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
579 template <
class Result,
class Arg1,
class Arg2>
585 typedef std::vector<BaseClass *> FunctionVector;
586 typedef typename FunctionVector::iterator iterator;
595 FunctionVector copy = m_functions;
596 if (copy.size() == 0)
598 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
600 return (*copy.back())(a1, a2);
603 void Add(
const BaseClass &fn)
605 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
611 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
612 if ((*it)->Equals(fn))
614 m_functions.erase(it);
622 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
627 return new MyClass(*
this);
634 FunctionVector m_functions;
638 template <
class T,
class Result,
class Arg1,
class Arg2>
644 template <
class Result,
class Arg1,
class Arg2>
649#if defined(_WIN32) && !defined(_WIN64)
650 template <
class Result,
class Arg1,
class Arg2>
651 Callback2StdCallFunction<Result, Arg1, Arg2>
make_callback(Result (__stdcall *fn)(Arg1, Arg2))
653 return Callback2StdCallFunction<Result, Arg1, Arg2>(fn);
657 template <
class Result,
class Arg1,
class Arg2,
class Arg3>
673 virtual Result
operator() (Arg1 a1, Arg2 a2, Arg3 a3)
const = 0;
676 template <
class Result,
class Arg1,
class Arg2,
class Arg3>
693 return m_fn(a1, a2, a3);
701 return typeid(*this) ==
typeid(other) &&
702 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
707#if defined(_WIN32) && !defined(_WIN64)
708 template <
class Result,
class Arg1,
class Arg2,
class Arg3>
709 class Callback3StdCallFunction :
public Callback3<Result, Arg1, Arg2, Arg3>
713 typedef Callback3StdCallFunction<Result, Arg1, Arg2, Arg3> MyClass;
715 typedef Result (__stdcall *FunctionType)(Arg1, Arg2, Arg3);
717 Callback3StdCallFunction(FunctionType fn)
723 virtual Result operator()(Arg1 a1, Arg2 a2, Arg3 a3)
const
725 return m_fn(a1, a2, a3);
727 virtual BaseCallback *Clone()
const
729 return new MyClass(*
this);
731 virtual bool Equals(
const BaseCallback& other)
const
733 return typeid(*this) ==
typeid(other) &&
734 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
741 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3>
756 return (m_object->*m_fn)(a1, a2, a3);
764 return typeid(*this) ==
typeid(other) &&
765 m_object ==
static_cast<const MyClass &
>(other).m_object &&
766 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
774 template <
class Result,
class Arg1,
class Arg2,
class Arg3>
780 typedef std::vector<BaseClass *> FunctionVector;
781 typedef typename FunctionVector::iterator iterator;
790 FunctionVector copy = m_functions;
791 if (copy.size() == 0)
793 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
794 (*(*it))(a1, a2, a3);
795 return (*copy.back())(a1, a2, a3);
798 void Add(
const BaseClass &fn)
800 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
806 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
807 if ((*it)->Equals(fn))
809 m_functions.erase(it);
817 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
822 return new MyClass(*
this);
829 FunctionVector m_functions;
833 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3>
839 template <
class Result,
class Arg1,
class Arg2,
class Arg3>
844#if defined(_WIN32) && !defined(_WIN64)
845 template <
class Result,
class Arg1,
class Arg2,
class Arg3>
846 Callback3StdCallFunction<Result, Arg1, Arg2, Arg3>
make_callback(Result (__stdcall *fn)(Arg1, Arg2, Arg3))
848 return Callback3StdCallFunction<Result, Arg1, Arg2, Arg3>(fn);
852 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
870 virtual Result
operator() (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4)
const = 0;
873 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
888 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4)
const
890 return m_fn(a1, a2, a3, a4);
898 return typeid(*this) ==
typeid(other) &&
899 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
904#if defined(_WIN32) && !defined(_WIN64)
905 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
906 class Callback4StdCallFunction :
public Callback4<Result, Arg1, Arg2, Arg3, Arg4>
910 typedef Callback4StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4> MyClass;
912 typedef Result (__stdcall *FunctionType)(Arg1, Arg2, Arg3, Arg4);
914 Callback4StdCallFunction(FunctionType fn)
920 virtual Result operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4)
const
922 return m_fn(a1, a2, a3, a4);
924 virtual BaseCallback *Clone()
const
926 return new MyClass(*
this);
928 virtual bool Equals(
const BaseCallback& other)
const
930 return typeid(*this) ==
typeid(other) &&
931 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
938 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
951 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4)
const
953 return (m_object->*m_fn)(a1, a2, a3, a4);
961 return typeid(*this) ==
typeid(other) &&
962 m_object ==
static_cast<const MyClass &
>(other).m_object &&
963 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
971 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
977 typedef std::vector<BaseClass *> FunctionVector;
978 typedef typename FunctionVector::iterator iterator;
985 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4)
const
987 FunctionVector copy = m_functions;
988 if (copy.size() == 0)
990 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
991 (*(*it))(a1, a2, a3, a4);
992 return (*copy.back())(a1, a2, a3, a4);
995 void Add(
const BaseClass &fn)
997 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
1003 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1004 if ((*it)->Equals(fn))
1006 m_functions.erase(it);
1014 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1019 return new MyClass(*
this);
1026 FunctionVector m_functions;
1030 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1036 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1041#if defined(_WIN32) && !defined(_WIN64)
1042 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1043 Callback4StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4>
make_callback(Result (__stdcall *fn)(Arg1, Arg2, Arg3, Arg4))
1045 return Callback4StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4>(fn);
1049 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1069 virtual Result
operator() (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5)
const = 0;
1072 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1087 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5)
const
1089 return m_fn(a1, a2, a3, a4, a5);
1097 return typeid(*this) ==
typeid(other) &&
1098 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1103#if defined(_WIN32) && !defined(_WIN64)
1104 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1105 class Callback5StdCallFunction :
public Callback5<Result, Arg1, Arg2, Arg3, Arg4, Arg5>
1109 typedef Callback5StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5> MyClass;
1111 typedef Result (__stdcall *FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5);
1113 Callback5StdCallFunction(FunctionType fn)
1119 virtual Result operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5)
const
1121 return m_fn(a1, a2, a3, a4, a5);
1123 virtual BaseCallback *Clone()
const
1125 return new MyClass(*
this);
1127 virtual bool Equals(
const BaseCallback& other)
const
1129 return typeid(*this) ==
typeid(other) &&
1130 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1137 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1150 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5)
const
1152 return (m_object->*m_fn)(a1, a2, a3, a4, a5);
1160 return typeid(*this) ==
typeid(other) &&
1161 m_object ==
static_cast<const MyClass &
>(other).m_object &&
1162 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1170 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1176 typedef std::vector<BaseClass *> FunctionVector;
1177 typedef typename FunctionVector::iterator iterator;
1184 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5)
const
1186 FunctionVector copy = m_functions;
1187 if (copy.size() == 0)
1189 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
1190 (*(*it))(a1, a2, a3, a4, a5);
1191 return (*copy.back())(a1, a2, a3, a4);
1196 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
1202 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1203 if ((*it)->Equals(fn))
1205 m_functions.erase(it);
1213 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1218 return new MyClass(*
this);
1225 FunctionVector m_functions;
1229 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1230 Callback5MemberFunction<T, Result, Arg1, Arg2, Arg3, Arg4, Arg5> make_callback(T *
object, Result (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5))
1235 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1240#if defined(_WIN32) && !defined(_WIN64)
1241 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1242 Callback5StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5>
make_callback(Result (__stdcall *fn)(Arg1, Arg2, Arg3, Arg4, Arg5))
1244 return Callback5StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5>(fn);
1249 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1271 virtual Result
operator() (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6)
const = 0;
1274 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1289 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6)
const
1291 return m_fn(a1, a2, a3, a4, a5, a6);
1299 return typeid(*this) ==
typeid(other) &&
1300 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1305#if defined(_WIN32) && !defined(_WIN64)
1306 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1307 class Callback6StdCallFunction :
public Callback6<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
1311 typedef Callback6StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> MyClass;
1313 typedef Result (__stdcall *FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
1315 Callback6StdCallFunction(FunctionType fn)
1321 virtual Result operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6)
const
1323 return m_fn(a1, a2, a3, a4, a5, a6);
1325 virtual BaseCallback *Clone()
const
1327 return new MyClass(*
this);
1329 virtual bool Equals(
const BaseCallback& other)
const
1331 return typeid(*this) ==
typeid(other) &&
1332 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1339 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1352 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6)
const
1354 return (m_object->*m_fn)(a1, a2, a3, a4, a5, a6);
1362 return typeid(*this) ==
typeid(other) &&
1363 m_object ==
static_cast<const MyClass &
>(other).m_object &&
1364 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1371 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1377 typedef std::vector<BaseClass *> FunctionVector;
1378 typedef typename FunctionVector::iterator iterator;
1385 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6)
const
1387 FunctionVector copy = m_functions;
1388 if (copy.size() == 0)
1390 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
1391 (*(*it))(a1, a2, a3, a4, a5, a6);
1392 return (*copy.back())(a1, a2, a3, a4, a5, a6);
1397 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
1402 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1403 if ((*it)->Equals(fn))
1405 m_functions.erase(it);
1413 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1418 return new MyClass(*
this);
1425 FunctionVector m_functions;
1428 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1429 Callback6MemberFunction<T, Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> make_callback(T *
object, Result (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6))
1434 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1435 Callback6Function<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> make_callback(Result (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6))
1439#if defined(_WIN32) && !defined(_WIN64)
1440 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6>
1441 Callback6StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
make_callback(Result (__stdcall *fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6))
1443 return Callback6StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>(fn);
1448 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1472 virtual Result
operator() (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7)
const = 0;
1475 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1490 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7)
const
1492 return m_fn(a1, a2, a3, a4, a5, a6, a7);
1500 return typeid(*this) ==
typeid(other) &&
1501 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1506#if defined(_WIN32) && !defined(_WIN64)
1507 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1508 class Callback7StdCallFunction :
public Callback7<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
1512 typedef Callback7StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> MyClass;
1514 typedef Result (__stdcall *FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
1516 Callback7StdCallFunction(FunctionType fn)
1522 virtual Result operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7)
const
1524 return m_fn(a1, a2, a3, a4, a5, a6, a7);
1526 virtual BaseCallback *Clone()
const
1528 return new MyClass(*
this);
1530 virtual bool Equals(
const BaseCallback& other)
const
1532 return typeid(*this) ==
typeid(other) &&
1533 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1540 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1547 typedef Result (T::*
FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
1553 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7)
const
1555 return (m_object->*m_fn)(a1, a2, a3, a4, a5, a6, a7);
1563 return typeid(*this) ==
typeid(other) &&
1564 m_object ==
static_cast<const MyClass &
>(other).m_object &&
1565 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1572 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1578 typedef std::vector<BaseClass *> FunctionVector;
1579 typedef typename FunctionVector::iterator iterator;
1586 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7)
const
1588 FunctionVector copy = m_functions;
1589 if (copy.size() == 0)
1591 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
1592 (*(*it))(a1, a2, a3, a4, a5, a6, a7);
1593 return (*copy.back())(a1, a2, a3, a4, a5, a6, a7);
1598 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
1603 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1604 if ((*it)->Equals(fn))
1606 m_functions.erase(it);
1614 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1619 return new MyClass(*
this);
1626 FunctionVector m_functions;
1629 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1630 Callback7MemberFunction<T, Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> make_callback(T *
object, Result (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7))
1635 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1636 Callback7Function<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> make_callback(Result (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7))
1640#if defined(_WIN32) && !defined(_WIN64)
1641 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7>
1642 Callback7StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
make_callback(Result (__stdcall *fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7))
1644 return Callback7StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>(fn);
1649 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1675 virtual Result
operator() (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7, Arg8 a8)
const = 0;
1678 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1685 typedef Result (*
FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
1693 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7, Arg8 a8)
const
1695 return m_fn(a1, a2, a3, a4, a5, a6, a7, a8);
1703 return typeid(*this) ==
typeid(other) &&
1704 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1709#if defined(_WIN32) && !defined(_WIN64)
1710template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1711class Callback8StdCallFunction :
public Callback8<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
1715 typedef Callback8StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> MyClass;
1717 typedef Result (__stdcall *FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
1719 Callback8StdCallFunction(FunctionType fn)
1725 virtual Result operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7, Arg8 a8)
const
1727 return m_fn(a1, a2, a3, a4, a5, a6, a7, a8);
1729 virtual BaseCallback *Clone()
const
1731 return new MyClass(*
this);
1733 virtual bool Equals(
const BaseCallback& other)
const
1735 return typeid(*this) ==
typeid(other) &&
1736 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1743template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1750 typedef Result (T::*
FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
1756 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7, Arg8 a8)
const
1758 return (m_object->*m_fn)(a1, a2, a3, a4, a5, a6, a7, a8);
1766 return typeid(*this) ==
typeid(other) &&
1767 m_object ==
static_cast<const MyClass &
>(other).m_object &&
1768 m_fn ==
static_cast<const MyClass &
>(other).m_fn;
1775template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1781 typedef std::vector<BaseClass *> FunctionVector;
1782 typedef typename FunctionVector::iterator iterator;
1789 virtual Result
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7, Arg8 a8)
const
1791 FunctionVector copy = m_functions;
1792 if (copy.size() == 0)
1794 for (
typename FunctionVector::iterator it = copy.begin(); it != copy.end() - 1; ++it)
1795 (*(*it))(a1, a2, a3, a4, a5, a6, a7, a8);
1796 return (*copy.back())(a1, a2, a3, a4, a5, a6, a7, a8);
1801 m_functions.push_back(
static_cast<BaseClass *
>(fn.
Clone()));
1806 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1807 if ((*it)->Equals(fn))
1809 m_functions.erase(it);
1817 for (
typename FunctionVector::iterator it = m_functions.begin(); it != m_functions.end(); ++it)
1822 return new MyClass(*
this);
1829 FunctionVector m_functions;
1832 template <
class T,
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1833 Callback8MemberFunction<T, Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> make_callback(T *
object, Result (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8))
1835 return Callback8MemberFunction<T, Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>(
object, fn);
1838 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1839 Callback8Function<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> make_callback(Result (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8))
1843#if defined(_WIN32) && !defined(_WIN64)
1844 template <
class Result,
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class Arg6,
class Arg7,
class Arg8>
1845 Callback8StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>
make_callback(Result (__stdcall *fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8))
1847 return Callback8StdCallFunction<Result, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8>(fn);