65 struct CallbackTraits;
68 struct CallbackTraits<T *>
70 static T & GetReference (T *
const p)
84 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
94 template <
typename R,
typename T1>
101 template <
typename R,
typename T1,
typename T2>
108 template <
typename R,
typename T1,
typename T2,
typename T3>
115 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
122 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
126 virtual R
operator() (T1, T2, T3, T4, T5) = 0;
129 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
133 virtual R
operator() (T1, T2, T3, T4, T5, T6) = 0;
136 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
140 virtual R
operator() (T1, T2, T3, T4, T5, T6, T7) = 0;
143 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
147 virtual R
operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;
150 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
154 virtual R
operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;
159 template <
typename T,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
189 R
operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
190 return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
192 R
operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
193 return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9);
196 FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived =
197 dynamic_cast<FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *
> (
PeekPointer (other));
198 if (otherDerived == 0)
213 template <
typename OBJ_PTR,
typename MEM_PTR,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
226 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2);
229 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3);
232 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3, a4);
235 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3, a4, a5);
238 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3, a4, a5, a6);
241 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3, a4, a5, a6, a7);
243 R
operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
244 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8);
246 R
operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
247 return ((CallbackTraits<OBJ_PTR>::GetReference (
m_objPtr)).*
m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
250 MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived =
251 dynamic_cast<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *
> (
PeekPointer (other));
252 if (otherDerived == 0)
269 template <
typename T,
typename R,
typename TX,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
272 template <
typename FUNCTOR,
typename ARG>
300 R
operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
304 BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *otherDerived =
305 dynamic_cast<BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *
> (
PeekPointer (other));
306 if (otherDerived == 0)
331 static std::string
Demangle (
const std::string& mangled);
375 template <
typename FUNCTOR>
377 :
CallbackBase (
Create<
FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (functor))
380 template <
typename OBJ_PTR,
typename MEM_PTR>
382 :
CallbackBase (
Create<
MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, mem_ptr))
389 template <
typename T>
394 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>,
395 R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*
this, a),
false);
424 R
operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6)
const {
427 R
operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7)
const {
428 return (*(
DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7);
430 R
operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8)
const {
431 return (*(
DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8);
433 R
operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9)
const {
434 return (*(
DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8,a9);
468 NS_FATAL_ERROR (
"Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
469 "got=" <<
Demangle (
typeid (*other).name () ) << std::endl <<
477 template <
typename R,
typename T1,
typename T2,
478 typename T3,
typename T4,
479 typename T5,
typename T6,
480 typename T7,
typename T8,
482 bool operator != (
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> a,
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> b)
501 template <
typename T,
typename OBJ,
typename R>
505 template <
typename T,
typename OBJ,
typename R>
517 template <
typename T,
typename OBJ,
typename R,
typename T1>
521 template <
typename T,
typename OBJ,
typename R,
typename T1>
522 Callback<R,T1>
MakeCallback (R (T::*mem_ptr)(T1)
const, OBJ objPtr) {
523 return Callback<R,T1> (objPtr, mem_ptr);
533 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2>
537 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2>
538 Callback<R,T1,T2>
MakeCallback (R (T::*mem_ptr)(T1,T2)
const, OBJ objPtr) {
539 return Callback<R,T1,T2> (objPtr, mem_ptr);
549 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3>
553 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3>
554 Callback<R,T1,T2,T3>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3)
const, OBJ objPtr) {
555 return Callback<R,T1,T2,T3> (objPtr, mem_ptr);
565 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
569 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
570 Callback<R,T1,T2,T3,T4>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4)
const, OBJ objPtr) {
571 return Callback<R,T1,T2,T3,T4> (objPtr, mem_ptr);
581 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
582 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5), OBJ objPtr) {
585 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
586 Callback<R,T1,T2,T3,T4,T5>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5)
const, OBJ objPtr) {
587 return Callback<R,T1,T2,T3,T4,T5> (objPtr, mem_ptr);
597 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
598 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6), OBJ objPtr) {
601 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
602 Callback<R,T1,T2,T3,T4,T5,T6>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6)
const, OBJ objPtr) {
603 return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, mem_ptr);
614 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
615 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
618 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
619 Callback<R,T1,T2,T3,T4,T5,T6,T7>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7)
const, OBJ objPtr) {
620 return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, mem_ptr);
632 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
633 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) {
636 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
637 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8)
const, OBJ objPtr) {
638 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, mem_ptr);
649 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
650 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8,T9), OBJ objPtr) {
651 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
653 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
654 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7,T8,T9)
const, OBJ objPtr) {
655 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
665 template <
typename R>
676 template <
typename R,
typename T1>
687 template <
typename R,
typename T1,
typename T2>
698 template <
typename R,
typename T1,
typename T2,
typename T3>
709 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
720 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
731 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
732 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6)) {
743 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
744 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7)) {
755 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
756 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8)) {
757 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (fnPtr,
true,
true);
767 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
768 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9)) {
769 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (fnPtr,
true,
true);
780 template <
typename R>
791 template <
typename R,
typename T1>
802 template <
typename R,
typename T1,
typename T2>
813 template <
typename R,
typename T1,
typename T2,
typename T3>
824 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
835 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
846 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
858 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
870 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
882 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
894 template <
typename R,
typename TX,
typename ARG>
897 Create<BoundFunctorCallbackImpl<R (*)(TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a);
901 template <
typename R,
typename TX,
typename ARG,
905 Create<BoundFunctorCallbackImpl<R (*)(TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
908 template <
typename R,
typename TX,
typename ARG,
909 typename T1,
typename T2>
912 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
915 template <
typename R,
typename TX,
typename ARG,
916 typename T1,
typename T2,
typename T3>
919 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a);
922 template <
typename R,
typename TX,
typename ARG,
923 typename T1,
typename T2,
typename T3,
typename T4>
926 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a);
929 template <
typename R,
typename TX,
typename ARG,
930 typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
931 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5), ARG a) {
933 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a);
936 template <
typename R,
typename TX,
typename ARG,
937 typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
938 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6), ARG a) {
940 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a);
943 template <
typename R,
typename TX,
typename ARG,
944 typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
945 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7), ARG a) {
947 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a);
950 template <
typename R,
typename TX,
typename ARG,
951 typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
952 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a) {
954 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a);
968 template <
typename T>
984 template <
typename T>