From 9c3b9c4bb2f247b26995488469d1904ba8703bc6 Mon Sep 17 00:00:00 2001 From: Pavol Marko Date: Sat, 13 May 2006 17:57:35 +0000 Subject: [PATCH] rewritten sh's template files to use new shworker syntax, fixed sh_call. tbh, i'm good --HG-- extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40197 --- sourcehook/generate/generate.bat | 6 +- sourcehook/generate/sh_memfuncinfo.h | 24 +- sourcehook/generate/sh_memfuncinfo.hxx | 33 +- sourcehook/generate/shworker.exe | Bin 196608 -> 352256 bytes sourcehook/generate/shworker/shworker.cpp | 2 +- sourcehook/generate/sourcehook.h | 1418 +++++++++++++++++---- sourcehook/generate/sourcehook.hxx | 180 +-- sourcehook/sh_memfuncinfo.h | 24 +- sourcehook/sourcehook.h | 1418 +++++++++++++++++---- sourcehook/test/main.cpp | 3 +- sourcehook/test/test.vcproj | 9 + sourcehook/test/testref.cpp | 163 +++ 12 files changed, 2647 insertions(+), 633 deletions(-) create mode 100644 sourcehook/test/testref.cpp diff --git a/sourcehook/generate/generate.bat b/sourcehook/generate/generate.bat index f463c99..53c863a 100644 --- a/sourcehook/generate/generate.bat +++ b/sourcehook/generate/generate.bat @@ -3,8 +3,8 @@ :: generate.bat -shworker iter %1 sourcehook.hxx sourcehook.h -shworker iter %1 sh_memfuncinfo.hxx sh_memfuncinfo.h -shworker hopter %1 FastDelegate.hxx FastDelegate.h +shworker iter sourcehook.hxx sourcehook.h %1 +shworker iter sh_memfuncinfo.hxx sh_memfuncinfo.h %1 +shworker hopter FastDelegate.hxx FastDelegate.h %1 copy *.h .. \ No newline at end of file diff --git a/sourcehook/generate/sh_memfuncinfo.h b/sourcehook/generate/sh_memfuncinfo.h index 987671b..98d5553 100644 --- a/sourcehook/generate/sh_memfuncinfo.h +++ b/sourcehook/generate/sh_memfuncinfo.h @@ -289,6 +289,7 @@ namespace SourceHook } // Versions which do take a this + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(), MemFuncInfo &out) { @@ -587,6 +588,7 @@ namespace SourceHook // GCC & MSVC 7.1 need this, MSVC 7.0 doesn't like it #if SH_COMP != SH_COMP_MSVC || _MSC_VER > 1300 + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(...), MemFuncInfo &out) { @@ -601,6 +603,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, ...), MemFuncInfo &out) { @@ -615,6 +618,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, ...), MemFuncInfo &out) { @@ -629,6 +633,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, ...), MemFuncInfo &out) { @@ -643,6 +648,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, ...), MemFuncInfo &out) { @@ -657,6 +663,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, ...), MemFuncInfo &out) { @@ -671,6 +678,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, ...), MemFuncInfo &out) { @@ -685,6 +693,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, ...), MemFuncInfo &out) { @@ -699,6 +708,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, ...), MemFuncInfo &out) { @@ -713,6 +723,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, ...), MemFuncInfo &out) { @@ -727,6 +738,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, ...), MemFuncInfo &out) { @@ -741,6 +753,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, ...), MemFuncInfo &out) { @@ -755,6 +768,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, ...), MemFuncInfo &out) { @@ -769,6 +783,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, ...), MemFuncInfo &out) { @@ -783,6 +798,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, ...), MemFuncInfo &out) { @@ -797,6 +813,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, ...), MemFuncInfo &out) { @@ -811,6 +828,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, ...), MemFuncInfo &out) { @@ -825,6 +843,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, ...), MemFuncInfo &out) { @@ -839,6 +858,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, ...), MemFuncInfo &out) { @@ -853,6 +873,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, ...), MemFuncInfo &out) { @@ -867,6 +888,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20, ...), MemFuncInfo &out) { @@ -882,10 +904,10 @@ namespace SourceHook } + #endif } #endif - diff --git a/sourcehook/generate/sh_memfuncinfo.hxx b/sourcehook/generate/sh_memfuncinfo.hxx index 050637f..5a9e570 100644 --- a/sourcehook/generate/sh_memfuncinfo.hxx +++ b/sourcehook/generate/sh_memfuncinfo.hxx @@ -289,42 +289,41 @@ namespace SourceHook } // Versions which do take a this -@VARARGS@ - template - inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@Param%%|, @), MemFuncInfo &out) +@[$1,0,$a: + template + inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@[$2,1,$1|, :Param$2@]), MemFuncInfo &out) { - RetType(Y::*mfp2)(@Param%%|, @) = mfp; + RetType(Y::*mfp2)(@[$2,1,$1|, :Param$2@]) = mfp; MFI_Impl::GetFuncInfo(mfp2, out); } - template - inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@Param%%|, @) const, MemFuncInfo &out) + template + inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@[$2,1,$1|, :Param$2@]) const, MemFuncInfo &out) { - RetType(Y::*mfp2)(@Param%%|, @) const = mfp; + RetType(Y::*mfp2)(@[$2,1,$1|, :Param$2@]) const = mfp; MFI_Impl::GetFuncInfo(mfp2, out); } - -@ENDARGS@ +@] // GCC & MSVC 7.1 need this, MSVC 7.0 doesn't like it #if SH_COMP != SH_COMP_MSVC || _MSC_VER > 1300 -@VARARGS@ - template - inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@Param%%|, @@, @...), MemFuncInfo &out) +@[$1,0,$a: + template + inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@[$2,1,$1|, :Param$2@]@[$1!=0:, @]...), MemFuncInfo &out) { - RetType(Y::*mfp2)(@Param%%|, @@, @...) = mfp; + RetType(Y::*mfp2)(@[$2,1,$1|, :Param$2@]@[$1!=0:, @]...) = mfp; MFI_Impl::GetFuncInfo(mfp2, out); } - template - inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@Param%%|, @@, @...) const, MemFuncInfo &out) + template + inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(@[$2,1,$1|, :Param$2@]@[$1!=0:, @]...) const, MemFuncInfo &out) { - RetType(Y::*mfp2)(@Param%%|, @@, @...) const = mfp; + RetType(Y::*mfp2)(@[$2,1,$1|, :Param$2@]@[$1!=0:, @]...) const = mfp; MFI_Impl::GetFuncInfo(mfp2, out); } -@ENDARGS@ +@] #endif diff --git a/sourcehook/generate/shworker.exe b/sourcehook/generate/shworker.exe index fac42a0d7c4db6b88e775efd972133ecd84f2220..a251da14479b56dd75dd15f925de69e066c036c2 100644 GIT binary patch literal 352256 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%0DRK ziwCroHO}0}2sj_78Hdq*@P&E|;}?qkfnTre^uyqxIO~r~9{L>e;=}Jtm`Ik2VH>f$ zt3do|P=zrl+&6%aLmO2wLBZ4+Z&?4h)b0%-na2dg=tq@5L;T|vy!?p1CT5OQ-eQtE zC&7b1Qn;`@TRD0k5*|ju!eEz?yEJk=VwiMN9thJ>{u=;53Z1Q4=h66dW9fYJvliqV zJW>z>rPyF?Y-rC*hPqsLbpIeZ%NpkXjQnrsFwI}<*^egm7fFU2aEP9prq_ zwA)z=Hl>?36*WDWYPzqj^+CBJM@$iYFcrN=r1~BOq+|D_Vh?sl9|4Z)q%$r^<0BhX z&${S?k<4c`ppWTmY(u~OoxFy!c~=HNu^DN4ga+WCO|5d_$t^W0OP~_gCAY!^tV>59 zNtc>MMl=@H@|aq#meTU*x^Ac87+cphpO)|F`!Fl2f5?~RM&v_Q&4<#_O@^48(y{w& z^}CO#x~2zPKa`H%$Hjv9HR;$UEvg)!zMI72te+3d!0mnMLb@_eSF*mGmySJT2GJfG zHHele-JOc9qe4JRo9%U;Ho<~iUfj20Ol4@1Um4EaiXxe3=_=0R5TDR|Q@|nLI_eT> zH;JTLRNSWXISG*0>Zp-3DPX)%AUS7p>wl!0)~2Itsa+MdOGVcwTi1`oKah^CXIiMj zoV_Jm9}eLWLzP>vrT^i!=XFS$e5p{!XX~U=g9&I52(7&=rXU`6_DYj4V`r7x=(e7j z(pyJsbRy=5%pw}^VhRV3Rw?TXn87rPX6SN7@GCs>r%GSYl2l%sjmn-_$Z zY#?8#eo1PYev|#BS6_Qw>Z9IM*MwnFe=w3t9B6y>rb*oMIgd@PlB6f-P-A3ws&zQo zRh<2)sWg2%{ZUV;TZb_NsNilW^O97VGTivV54?V@^7@1Nt$MxsHBTO`U%c#(P`_(0 zyI|&fFPk~j=x>-_VlZxi{|z6US3H4cM%w?LZwWPFiKD~po>G?$r0g z%S))j zD^+gG$kpCcMo+^xSnv)0XfCcfX(LsLe``4(RJVsXyngX6IKB zKfyi7I?UYJIJqfEyro$<=RIw$E>6zfEH*4YVWd(I&7wQrMi)1pXwOOpep~-ksJw6g zxBprnk@IKUiOW#Z*HK_y#rGaWMuS2{Au1FIUSi?8((fpU5e5vxLe(k$RvuIV9Wyd5 z|Mx?rFxCs^sla>j+Zr_A4(DO*TM)GGV(ie`Sws$k_oDT*P9=uZ72gxo#=!X~)KAuE z`_vl08j;mfVe5(>@Ewx1_rmT|jYA!hWfb1v4Y^^=+^bhpWq|ov?Mh@dOAgJseMZJl z`*9bH=0j#-;dfxl0*7J}yKJx>KN~)b#Vqs_4yd42b+g`bppnY_f&3v^-rN#QaX$1UEDagg{?F4G_NqrZ@PsN!Y5Bv5nLUz*|wx0ugg(cX)R*d(& z#Z0%K1CJBK1)KWj9$e?Sji~6K&A_VUP(h+#R~HvrO*WaiS1NbhZ$FegwJW^dd*2pA zicChY+@J8%d;5L7>YVH-l%M>&E*L#W#L_=N8#16!(Vlv5WQWlJA~B-nCu}+ZDJ%8q z(a*mtdh~=!`ly#~w+C!3WYk26(7r}*r)3NKL}*{V_x-1>e$CZ19UU~Rg1G>0DX@bA$Nt~l^pLwx3|4^xFv1`16-ZwV=mk&!xVX8d6S zM87r&(_ng7D^q29evKI{{MHJ2kzvSK%`8_x;_YzlmyfDXiVs`YRUY`usz)jAxNfAf z$7v2T`TQwxWCAj7eqZzWnDfi!###shEb)=@s=VafeVU??)f}sZTB6NW%n6dOpdfY2O3ZKn`DY@1BmJh%;IJQ1P3F&p`h8=^RoeS@ zQXq;kxwMrEX!PFaud}360EbKO=q^!?wPSKkIW*VVE?0Mn^62jk+^gioZsf6& z6U=edP~@?)3O%s{lIc`CtvXM)%}~tRTHM%jzDc?Yy!I!BCgqcja)W=!H5ytjkR*zp zZO)67-dAaT%PdHL1Cj5^ixgOtBQEs8o|hLXuoVq0Z}-7Y$%_=&s`{39_+SU07+WD3 zGQ7x#`CML%VAeFWyw!*KWL~6TPOWdL^MQ6KG-|+A_ew}hL(5xU_X=> zDX{hREtmUX7v@C@>@|%o@A1K&lNTwl?`>$g!UsDkFH&HyuWyO@VE^@B4()`S8e6XP z!S2qB6xbyVEgVZ4(ta~9Qed0wTW0%UznB-P+TPOG!X0QEvQOnj3hb>7EtmLUug{AV z*m!+Qoe%cXyhwq)qp@X<5B99QNP%6^&@$HtTap(U4VSEfJk+<~Slb5e7q+qm(-Y@4 zTctM8*m9{4yDKj~7H-?pL3~3C;vnmcujR!9UP9jbmia#T&*nu7yeMpA%K{(#U*yFL z{5=L9{R9L5uDp1_-)G>b`{1YNMGO2o1OFBud^j&&;MW`YGhlv2f4t3OkpS?U41A5~ zIMF-uq6J>k@y6yN?k7OW<+tZ+c}Y~l!z!WqI3-abAupMiL|UoCsg8$81xI?U%;z75 zMffibRqK~lsFJ={khW`^qdVmd-oM!*5!N#8+=>1)7ohvv=ox-57oaTV4c-&E0A;DD z_x?T?pe$7!Y2*UPg8IUm+`Dqr)O(-G1t`bVMt=!ZHB`v-2JgCD3T2s5?=8v&D9g-7 z@9nt&Ww{Uo$GHGysm4)FEb>4vfU+#afq5=KSr(&V zn+s4WSHMi?0+gk`(OZ`bP?l>NymT%=S>9XkeL5GQEY~-BAIk+O%S{d5dvgKGvZUU7 zS1v$Vnj5`$3@^onu;%5q18=a#^r`77$Z=WVS}09n4U zO4Ho?UM`GW9iod3-s8D2%KD6GVZHa&T$u8T05*DG$b~7dh+c!&nhR525jxBb=fad% z)UDBL%7rPfC>pA$xiIBjZ+Xwng(Qb^Zx( za&C`!-UKI@d-V`mJ(I0R%g39i8xP+y6Czz~n>rZyLFoc;;Yyp6zU%l-zkMol%*RW4 zPqz;K=Bqxm$Z9m^I7llw-k4qXO@j?B$NP)MH~-0BG&m7Pn2c&)aea#%8*0h;VqT=Q zmSid0Uo1W~HWJZ{L}5R*!Li)}Vzu|%f@RFKWWrh@7DGm+Q&qMYS)@6G8wMA`c7vyb z>B=EJ>gM%ex@=g_7#yfniyFPV0=OHt(Jl2}$U!Dss!Sp2N`0p+b#~SUWvcfYf=p>k z)8Os2wJY3RqIebDU7~FIa|NXfIrg&4AKfJvq8z85oz;2cf1)f;`#ET-)1bN;;%;g! zGgnMyX6v}`<%?HximLczAMCR3goxR)3nyr!yEJtPG`P`#X5`1ck6`L>iT%js#BS*( zO*Va$Yk9C96=pv`5$GS5sbA$uT?-MHe6D>=_ywB)?JBObF^*61*9X?Ei~ML3b9b&p z!*0<^jyiOei$40v9?U0y{%9iEjEb!OlGe+cnlBukNZ&I2ICLWYPtxUP-z#7M6DRB@ zPN2xdm5(i@4K0=a6uR{rhfX29>PY)mQ|RivNKK)N#uhnP62JA1yhwqqYG^sx2YX6h zq-JJyeM^-OcK9F0mMO3`jV<*)*q`M^3hdN|7KBX3C2q}&6xiwYE%*bVwjuAUd65G9 zmc|wkjM|30j=V^LeQQI@H3l~1-JBOGu(kCqO+MHw^CAUyMq|shKG^f~A_ex`h89eU z7`s`K7b&pk)weYIU=M!%&`x+;W6RY(*yqMZ#+fgWr}r8<1?1^lj~Hq?`YA@&2vl{0 z_ZL2aiWn(Po^vw1`|qqc_WsR_dy{veF=0$vF(I7z4bzuChFcR&tQ_KmO6M z*!cdMx{`_@TEJ@>y&w6}NGm#dfSg1eH}UY&k6 z9iLipuuI24c%CUwOy1I0=*-k-&sj4e*;UXn5jQa07?0QDPv&hdW#a#)pCw)5L&={P z;gu$rj1(6ovjvHN#p6r)2R?Y?w-0s;aQvhINMyBmP#2nb!2yZ8NV2{7fe$)YG3IMV zWq!puoS6_foH+^Q0_Wgn9}Z_`;Be-2-{DNDb2yXOmO43Gh0Y0QvpgN|v`=^{p7o4D z#VY`COJ{YaXjd`Mi5F=^qyF+UVCw0b;Lysu( z_r+7QzfLE@>5(-P2rH$(BO8mSF8g(65sP%q2X`E1!5(;=57m!wI^xr8Kg+Nq}3b<@r~M7H7Z2u zvfU(3#ZZy0(raa}UeTkCvPC@3$Ru}T_9a{QIV-DAQyixzb+M}W1v)6oX00`$$h})KrQcIGSq(=j2TZGS z7e;qo{jvtkKXlk7uhDka{n>xyZ0Vz&I#`N!nn{gad!CoEmZoiuUe`u76Op$&maDeq zP8u}c2mY7tYHU;0{8%hvpmy3U^{wW4#wcN2puVNhTWd53R%x3h(KV3|J0qMaSrp&J zanm+*2%K|UbVaz971Un#+e2~e8>vHg`w7EncnLYMT!=Av*O{v9bX&CP%)L5b&V2Nd z(Q~Ok&GV?&o1Dxa`8S$74-PVvI6Lq$GHJsmYyFT;aEI3aRn$(1%aqE*JCnTMOlDK} zQw9RUo~oQfgfaH>HeSdhXESB`We0%PYDKf2TTW`;{=%Y=ce(gi#=E43K>a1>Dt9Qp zY=eH?PU0_;bCo9)uSi!qKwOB4PxPK7GqwPJF;UqJK;n{SWowz&+}RKGexdj_IS4vy z6vUXiO!PkOKx_m=_RJv7i5pxgx(71RdkhDZlu}L;gHoiBYxm3~ms~}y8@=-tJ?hXs z5_t?Zbfj{<(G;7mJ4gqzl})9BAk@0im~W`vx-~Ej61a4O5-hcw154AD)9s~!*;|U5 z!SGUS+?kF(8VIG4#|r0Ggc+$5o4w!Y)Rooy0-HeL>=_ahmp3*SAPhB#R7L}ag0kkr zr9?}OeqKX!p~R(D4m4v-lIj+AXXPboo)m5xyz&h;H*HED<%a9^5bh0*H~iIknW$2* z|A`LOMN3zH*xZ3$k8m27fA`mJ-Gc{1r1Yt;r-ilYHEA4H+R=D`24SGrTPSmACJ?ihMo0S_?+Sk@E;oTVj^7Y<}{#0p~ zzHZAMnb;~!>#9vsv~Am8f>oKet-{L2v?UqE+=|i4xP8#8RMzF!jBWHr9#T(XS|ieK zqNqDE(N);cQU@J;_Ou;s&ld{#7EKD=tE>D`oIecs1_8JHqA6%f1i%yL`JJ`17!EFF z9p|dLQPVYDrtg$Z^gcNjbg7g3;T^xkD++GJhvM(wpkItmsQoGeVX3Y15Uj*pHv-!W zH>&&78PzpqfP=JsUpB0$D-jef{#aja6jo#}aziVlq%-_xdbdtAWPlc);)5<22egj^ zG^_395Z{s2p94D>q~D_--v@-T{rLXB&kd3|ji4`uc&;x4jDCw%v`qMERpp)@t-}v& z&>ed1`^=awZ3;SP*WZrqoOeQZ9V&S{&_^{4!ETqs{~dyl9z3u{3ozVZTddxkdNkF@ ze$20R;-+AHuS-{IXt*pW9CSEz)>l<84KV7B!O*-tSEr*Y$_-y{u@MR=v-goNnlYR= zUjH;Vk^e*<#?Z^`12({U^l~f-^!xj*ERQ}3M3>FR0~&Z!CZK^qU;b`%ZhZQ7lACF% zJo;uN$mpAqpsgZ7uTS4}DR?Y>IO9Qo>Lj88x>b(i_P;V=9d1txW{A-vTihKoyY_A` zw)r$J&Xx&h8!}C+8vT{&fBap5vX_9eMu-}`&x|R`pDQYAgT9Og`4nhJv71>zKj(1v z8-M*rz*)w}Sh;%diTm@>Mazv4;qw6^1QfG)EGE33py3GPk1CFEE^qvgYJHn>$oiJO ze(d6Q*4Ki;pB+%M2OwP(1yMh`5kG7grvKINGYslq(akblt~Qh!seA~|;;?1#2pvg& z^qT_a!0a%c!N$RH{gutdgD|zSGxGNPf|gHj3CjpmbFr9KTMl8R=TQZpue~CJG_xt3 zo!uN#W?7;b`kNs0*<{vf5_h|Wr=v^1IN}q4>+DuFcq=v;wurV){DO7RVWNhkqKMYM z@KUO=l=CY1Gp4g$G4t=}a+77!vQr|DnJIzDW2MoD*b~+5F%ErVw&!&@?ZfczTDBeG zX(L*=AKTuxL)IuGkL^j>40Ve*)WS{Syl%Tp^WD3F6&P%~7}E;p+J595p9CCm5$Sk4 zE$o|j%m6RyzHk$}{z&^Ex!4|Yo0%(jlb4^V@5t&Dp*$7D&*Qr&emUP0<4gPGWU7r| z@FzZv2l1Klck&>NiZ^HD4t(2|CBR0DS$4gLZhmG)`ZKpEfE%XB^HqViEw}n9<_9U_ zeu|kviaY!i=)4F<+tw8dz$^*(Er)LIoKdpc<*>a8Mq(-oS_=ig0?`}the6~I<(v!} zqlb{EyeL+oE9!<9S@w5UF&tQZMjf$?Z3$My*_I4zTjFd~4D@|d`m%=@!x^d6h8})? zYkBCX5cv&C#Ux)|x)R%A(N~h* zIUUhgvehnj{)!V_?4p&ET{sMW3EehzcE zM+ACkAC!Fl*U2qYBHxfdx%Fmwtsgt7%OuwLmZpvQmMw_4rladq(M>_&oAL|SOycTg zQS=eg$Wrk0vK<@Wlh)1FP3hUj5a_E9F z5ft)Xnt>IKxrMt&vaz<36OH#S4ONsZ9|4j@oCA{%>{`wGEJN5 zQu*BT!?BD(I6}XDbUV~^AI2uI?L5Mb4)fuFr~w(1cjH=H4QvJ@Zr&G4OgC{c;&sWS zSaMjz0|_e$dYpXt%K**Mf}Wgw_%9w1;y+^YVNh!~w-kK&@a{(MYZ(4}gxSJtH5M zD!ZiHGQ+dSdZH>6f19;2R!yoZx~+#CyG@KO`&P0r09OVQOJv`-&hNg&G-Yxbd&syO zB}Lcc&Ln|#PW+S28%Q5in@buTzCU669je`H^870ehFz`brQjpNN}No?W4*96wqkSN zr5Dhl?D76EVw6MM;wW#&^`|HHK3 zpE&3wg*p6a*7!&1+o4S6R>@hoINZL32X$3Y9i9QHGnd_F>xSn= zX%{Qi1_Gr~x&2<7e90%RZ|qEoNbk&h6dY#pkj!mtEacfMaYJiy^g$!-+Anms zUqk6y>tJ|Nnd^B`4=b>-`3m@RF+Vc7=l$C1R{>cy?W~>3a<9^N6$0fZ9tbh>_j(o? zvcTk%dM%D*WciluvQ(t*JU5+D=$eX{is-oa1H7~pM;>k0L%r9Rwzj0&>v_%AzINhO z*1_1sSK{Q8`qp8GHHE{Do1cL-F}Rs43U|92cTD2yY)M}uNm&SsWR5L1=>6U5qgf4( z3dR4ZiEKSAWvfsu6NjZmAg1_r#<(zk65o~aa=uTBV+AT4iL}dHg~gFLT$#8C8X3JHa-FW(zl-w=rMda{g&)2ghPjUuD};p(_rM$ z&-|aS0A*_X4t~;Q?*#%=nS+v4rJl31H(akEt-z(JGCgDJr1B<(aaA;0x>1j;X=O_k zM;-oM!T6)%ja8sQb#j`Kk>O}gU*I%C*^>xYPcuHUfuitAwM%47 zyx{3P6<{DNFdj!wHDcnM&1JCrJqEF+)rT{7@WX?hH2jbWor>k3#GDQIk^Vcwk7fL@ z>$Lh}OA>!x!&#JC2dtve0c${Z5dlI7xNfU?_U!}+8(0!umZ^pT|5F$*vznATkc%@) zm31wJg@QQhc+{Fbk-LmfiF633m_1;VCPZ!D}}x4v1D8LxHitJ<1FjnX$%q3Gg9B=yljOp#%U;eZCnbc90Q z0@A04K(qFd$m&a>Iq9p4H*6O&URPE7>-NsniKG{~jI{Ugz2R1(bP85MQtzJ;g12{W zR9Iwnp)$WoM)jLF!DG~q{E(tX1fFK8$N}Fz!+C$v%w5IT-g5oInRD^HFq}%{)qXiCU`GrQcOP z>zSqL`U$gsvb6mfj5I{fz?}dalD{(*$L_EDvGwIe^gsv zT326w8>Zm~E?Zjn+-=XMqX$NTyF9h=Eu~l=NhNwCt9vPFvp5uQ-{%;hZ5cME8L`?; zgPGXghV)fc^_=PKu5bPUx4PLxsq@fB(&pf+V1Jy2}J7Hk2_{R*F!++Obh&^=VcF*7GB)%Xu_= z7M+YH1uf(!%|bJjfi1hPKGiyqm-Bg{$72&`{RDKmVKDN!E$YyPUn!0}Rx!J%I}=}9 zoGJYgE^%h$plcE2# z@}NI${pC=DblD^HL;DU$QF=?fE{zAeM7Zup%O}_Vd)=+!$X(yiq?!jRCJv-OSewgM930HR_hp?ExoZV-5WH+k_rcqaamsFdl(ska!6hv;2OFa|x$^nj*AAcA0^pN7??@3=< ztzxgNP_frmxnePjHMU?Y5^0=)NjyP|X3{kqR1x}YAhKGgAlW7P;qiAGy;)q&u!eW*5v`y(4jO-k7Q|E~!OT zk<}O2o{nBwQ$0IVI=iE~e9aWmtba}4Ufup8QU>CKUf3R4eL1gOGI8^6BJ=K(;oD2o z@2bpx6!7K@hZbaG( zd2AjKarjYssC^{f=#!RSg052%c8&45&AZ%dx~Kgo@wYWUF&fz)uaUv2mI9XU)dV+# z7^_B_SgPVDg00&qQ(Q@JKss2T?b?SXE?Jt%V$4wj1_KMTWs=r7mDhXj0@K*@VLN)b z@!I_K+VG@%Mw}AwRJV*)@Qoih#)B#YX9s6z^fQKjCG?K9ZI}~lgrY%66D;8(S2=y->O(llHWiXYnnrPG8D!UpkW6J6CcueQZC|bp7G4MrfsF0=p<_BNxcXYO;HxHg zCaSn8P$7-@S*=F&i8HW)}{RHx3HrA+_NXd?RPS2u5)| zB>x9p1sM3q8G#NT?6Fh*VL6S6hUuUL4q;%D{YMTSTZfLjoy`FUrq?lXF;O0z;bki< zbY_02+Oqr+ia`3PiEc*3HDmDxc8~xTWge;3z?#@WIRzUw^V*1mMy>VM#fER&bxf$2 z*Y4nj_BU7uN34U#^L&K_)d{LiR)JY3$&u-?aSI3DA!G5ST!!(+!j)e!DRHvY1y)X3 zAvs29*%9iIe@DSPgJEXe$E}Fpz+ilx;F~j-v&I`=nONV0ekbE>cGj_3#!y$x+R;#t z><{5JV!E@E!y~#f9IKf1Oe1$xeP1RQe@4Lw>kz{nD;AW7mfwGyHF)_K-WY7yTJd|H z#{1)Ui07L}O#@&&e=*j-Gc(b>tc)3i@G>Y=9!i|v9Dc&=mEF)BdQnGb-etE*EFPF_ z6#YKEdA3XQ!63~UW78ndlibzrM|aOFU7)d6P}rQcBfJgE!+=f}L=d>_c>5hHfr$*g z#vR*xBrh}ix~LT~D3z$uT_z`4DlEBkiH?`K}j?_Bctfx`XNl z!!^|C-MZZG1qOm%xLj37;lGcz4e8=0#oj?LVC-rrJq7wRt8{uFtf?)h=K+rrD7SVAvS%owxu zq4Gd4se^w1u{s=k4-a8Hp@m^PTJhN`U8^6}PCIwm+00Us)D{2lTj9JhV+|Wx@x3_D zsY-Ea*#+6}gR3Xrb^_m1mveBVP`W0RosJz=oo3!v$%78<`lp)3~*fy9q{>>1Qz}z`%MJ3h|gS8IQmZ74e?HuE9Wb+M{juDP{?^0z}Hn;QB+z$d` z#74`HvV@rh3|S24NNO-uVV0@Qa(A+`W}{f@*RC6v(gv|n&XgGJE>s6lzpi;$ zVc!Wv>ZjV2^!=L=`(tBk4@Zn6g!uU4HUN=ioAvZz8-V1T-6M(Sz>Mz#(RwW`@ZTJu zaoEGj;BaC5bb0S6ZESfFMxE)M#XB0@`+xXvOet&@U~W`#(8(8n=s2p7gAZxn{eT*GgL4HNoaYPTE5@l1-0UT|7g*E=v>{&=-f~La&=NdkV=b+iq@Rp$xDv*5sjC6(B z?blql{oS&+zgE+$#%X%Gc*_xoV?6FLD0TGL&F`-02ZOL_& zDX_{6+At1|4x^j`FWkv;{stQ%v;M0Y9l|%g#tWf|A6kqdmi> z%~nU@%P)`z!8Cl_xRz&m5x?Ml+Q!=u>N^T+@`|K_jt1sov)8(7n$Rw?`ill^FciNO z3`SXmPDo&2bNoEX?QoD|=xnL29UTkz6lXE#d05-jt1MyCsvRXD#YR9nt`R5{5c*+4 zoYq58)Wg|cBq{4LtRz;KQxn(ZWp>oZAMSaH3-W5?d@Mws5>?zGOFE;(y26Nc#}!+P z`_>7(dCE$@RECxeK2ZX{Prj!s-feV;`););d7#FDvZm>k4rWX? zMpACICQgNNp(`z5P5oVkT-fznovlTT32{Vgt73@=5<9D2r>;B+Z&&#R^}UFLD*)88 zsG92VQ8Q$tr2GGgC!?=iK!KUlH3V~Qg9E>z^nziqF}QHdA&@R#`;vz*ec0H)al6#u zEk-?x8d5 zFBDQo%3JjMelCiy&Uhjndm`Cap5nXpiJ8l>1^ficHXqz>$~Kqt<8K+W7xBQ{4ylxW zC?E=0JOCziufL z)NX)OiHkGRFx`a~t)a~>>`(+~vx|g?tvlgf5AHb|=d;GpNblNH(KclB;*bYV`>JAF z{|2?;ETBII11k;O`RGsXx#{G*U?er>EC!()RTcwB9 z|H8NRQDJ2DKk(dA2vrsAr>s^`RoNIBNu1R-SDTL{Nw88OODhvUo@=V^RAiTRMZe3H z!%XbEu5vfNPw~15{5Hz_ZgS{UcAVVeFzCH4R&$(1K-mTD@mm6D*<0BmP$zV{FUhY1 zYXBAd{AkKWw$$`4PGDP)VGhTk7rnMP_m1wQ+`_c8hGL9a=oOnfhFOUAigcy6MMHnZ z=K(&O_|nFJ}14>)NV;7?3OWGw$YMU0Lys z2x-KP?|}wMhM1V*eGNk9&4+do{4YkDhCoP38v;kh?0HHe$vHM7xtBIG-7)=2{LEpH zvHdIpeO^f!28cy#%I+T($OJ4Gd)?w?e@QVnKQj}iEpzwQ z*}&DUIzVApuTUyMQ51J&Y2`|SB9AU8K=y_XEsv;W4v=v4*o3f#f{U95mY)f*$Wt9P z0HaDQHF769c??xiIuExK@K2bEN(JqwhU( zrfm37{-jR&lxg~Ds%ft}W3O?(h#QGU@iaIhn>u3-E zC~f`P=sifrTu0`5S>iqQxc)}FH(>C=iwVnQwsmQDaZJ4_^zpvTkRaJOH95E65tY`}k;4$Xf`GMJHYLI~-fu5E|0JR=Anr zuC{>KlxQC7Zw#X4X3i*(V817nYh~jjl(Pv;Gxm?mln0$P&M)z@uK^-1t>roHE7 zu8pK^;=;G+-keSRH-WU>?fpcmirGl|UOkI=+C$ru7DcO;Ri-W3nv6m^?k*YNC%e0= zUB5M%dwfXUubd@mOu3r%Vdq`*W>d3%C7Y8Lx8KA>T4B{6TTxQ;nYqX2LcZlnbc}XoConHVpc-P!0 z_N9hQj%xTYhp2zOd(Nm9D9_PvXatj~(L2Ls%Iik!D{buUVYC|~$*Z@Z>>gyKPjzx|mw`v_plZGtwZ=2&D-oJd7-_C%R zm%D-;Id^f%Ej6xSzZ#7$?}q{)p9YAPn(LWd`q7?Adbvi9*OsUjST6k^xaz+SMb4k} z%=hG6TgKuOjc*X;8zaiL_}w33U=tNBzxC$Cj7je=6R5Ioy|3jrqYAY zoZU1yd8cU$(fs#Ak4Pc&9nXH8&K?+3T0XA$_0!&aWaJ=gf@E(o>%H89Y~_djTRy`- z`MH<5oZi*p(A$_u(grP@76x{)%dxP#{0Pn zB}EvP6d|npbY_VpgkX!VYik{nRI#akfS?NM=gABK!&9(SrE7S?3exxp2{qA^&lf8Q z#%3pGW$bibM=*ZI@?6G(AY+Z65eXWj5accN^G>s#b7MrmEw?dJ2flf9jG$%lbFvFG zM(WYp>_yHNCB1mAYQms1yaJeglPX)LQB|qg61Gz$4~5*F z&7R}3Q;KD;^0QMPWzS+urwJRF*63+cxQGV@Fmy_xiT{TiF~%$4Pleup#M$(_HH-QR ztvYM`HOug=0v#5q+{Poxxi_K5!FaNjSh*Y{5aIbNkOzm~zjCt6rmf@zP|i`qJ`XB_ zDuJy!L2k#qKYN3FL^k=6yn+e`c?+${b0D~dtXt-~akuesLu=9-`d34W) z8dP|(epC;FuA(}4+TaL@IW69~qiJYO6sg`zUD21>Ne+Suq3o13F)YVmfa4_vX{Dt^ zGqK#*Qsfr6K}3>6jv?Kk=GJ?=uTgDkd_4?Z-3w<=;S8rBF(L9Os9MJNZzGRNmm-WT z;SE`^4xt8azOzK!j{vf0EAlpoqgISFLZMZkDp{P|-aGGco!_r0ZPNdIE9_jo+NLAxk+i`?KIK?J=6M zviicW994Y>{zU_Ugy4t!O{}B(W^iYVfJY1mgPJa0Q}6w=Er|$Dp=Hioks5#`>V*Q< zI?GE1{a)j%R8K{2A$oIRE zx;(kFcfn>GsjYan^;>>GEvM`IgOM7-$fOC#VFgY#<`C1QT<0~#M}&8uyTYF!12)#= zcbU(wXmbxK9{kfy$;{yFG~(j#irCDWLS=XH8oFJZ+1FuCa;-k{Lk>UPN&^o1XIgHA z*uB~a6}6r&)dd!)DY~^sr5p>zL2I$7^be0Td4M0#Pqk)LZOdAt^=`B^j<`KyH>q2M?cc~^pzgMyz^o?99DUx)1BabbZG)*Mj z+Koqt3ETxGb$T&;;{i)hxTTl|bjm~Y@JT*Ww((TU$G4&ziI9OGHx-|!(5 z#OY9ZQGEr-Lhp$FvMyNFiy9ON0CpoID-QwiiJ%hJ%MLWMsm(P2sD+>*HHJDv$R}(3 z`en2eZY#8E^6pgAK9VOtRX$H-4DtUy({6^BK9HIs-Rtt?9pyD(qBc|eq}}`nQbjy6 z5j%z$@VWU4Irk0j11z~(!NmdWp?gm^NW z5_B_j#!ZRAmU)?2KR(Iak^u5@qhFY~%2-}TM{KXS4IdFcN4YL)a`%gA+Y&g;R`#5bna+pkMx$i#NOZNU9?y|R!x%#qyF<6{fRN;?V9^~ za-nhIv(}G+|KoS%!(a5C9Q<2;H~2Q%x%w|Z1b%x%4u0v;!DkXUiMl4Jt^dPap_#0X z#zdg|SsJ=?K7`u*mLXM%@x;*rKwj+W9(K7HOlN zkWa1`WKnr$w@^^;WfrIxuxU~N>!!OEh>OCF-d7eWc>KFV$1v@3Np1WCdwRne!y#1a zc1CRsng=-90O6)!BR0Jk_QpK#QBO8`LrYT&!rpU+d{rAO&~=GCRrc?sPnDJG<>^Xg zPF0rk(p^%;_aN_^6-RG)=hwX+YUb)V_QC24zo_}Xifub8WFRYx;e@v52bh&xUSgB3 zeLGvspf05jWH-~$en`@QND?B8hVYU2!?At+yF4>K zTvqx!3Dve0kCD>`ux$LUR}1ib7VAYD0$nImUX_ohB^#<}6<&E*)zGh~TO7WPtrTy) zbqk8kIOcj%(S+ouN=E`umKlQln=nDI+iu2qWt9Y{wzzcpr4WFdpMg~Lrb`jMJ(z5L za0ETPrU$Wud7IAbqXHe}@Et1Nn_N+VXahLD-fQ;jh9orxZ(q88sIDP=oA&7G#qfb# zAO%3N05tU?UK!xTsA-pP3sHRbZre4``Mc}NrfYU&bms=^gItT4$$MRNSET(V+AfQU zkA99+_qMTaRV=e2! z0AgKi_eul@J${pHx$Qy6ihCBSFj$T9RrY)1fc!3f(f4D{?`7xoAqbsr9BsB{$B%2n z#}G0qjDDd2yg|Jd?VPrYAWWTgT9-U5;Rt8s_+p8@p9yR!mn)@(7d6Z=jjaB*+4a#N z`n?v7#%Pr>&RA3_oI9B?m-!Nl?X6`smmRIW6vJRKgBGxO^vi@ns%g6mm~e4)@3L9= zHiG8YHI&{40pE_#H*CNbT^_zTHq7aw0;an8YM8zcXj!YIjLRP~&T-#At1Pv-5z%lM z3TZ8|!Mzh>UBZJIbZcGHuF=6w+~x*1awq)zrihheIAZo;H>F~`M@O!yM`xi7SG1=t zs*#KJ_^4$XsEp{YRB5}7T$2YjXTKL9PMJfy&Vr3Xn8U~O4@Fx78uI7#YxJ(-+6^7> zu!s$OLB}Ya8Y4EE2pUOtF_@T`PD5&}R)1#FD!yCPi zSeb}QUb)z6R3xLoFwo=WQ6(+Yc|oSGv6-@WSvKZnP*imI4ci$ztT=}LE?stEu5V{I zc-5|^V>-OK!J8OVKiA<;Hp}YrA$|V+^Yi=MU0XV0pO-GXJ)BWIkhYK8w@1sZ@Fz+C-hEj5! z!Sup4voY76gB1ie*L!nDVO_!8fh&4a89s9#!&&d0KAL4P{e^XeHF}dqb1WnWdvatf zUs!K(zj}wOZVbdIfQ*WlOLs`L-rzms$2ARP78XLYUA_k`-=l}-YnF1^C_0rq!fU

5S#k(PQQ8@zAZtkdmG!Vl3doVe^0FgGxo%umTQ^*o3$ z+jNG#JFQya+etzFw93&gCVG(Rnl|>BmWwBs?Oj2(pS|7hjv!k$Ia-Unfx6WO3c+rF zim@6qY7m76??r<{JwE3H#6p|(p_AhI*_w0NnrS%Mo({5IcWAb3o8M&fE^mXR0e2Io zBgj_cXS224wHjGLf6Cm?8a(8o3dT?!e#ARZi`36(gF_ZjH_!0Vpic{`FzkdVdyCy5FIMRM3 zkRO?+&`JJU-LG>uxI+#dxTZCreSc!ctj@%l%^g~AL(T7kN%SYK_tlxg1>ZUYTY-;@ zfs}TL4hlk%yJqM;S}t!3-YT|}@i5=h;uEvCnn`9h|Hh1!`$9>QnkeDyghI#*Fh2zY z3w8`3${a)#8RprHdaS{9`mH3yK`G}OA_2kz=CfN_ z1>3ts$8fiQ&z`Grp2IveXX`a`zm(_KG3}Mvke3j`j27-T{1wTIUEyD_JvN1Qg=!=KpxX(@Bn#P~k)bou9gw8W~=ce+xTe*xD$GS8172|3(7 zehT?}lr(8x_H=v>fq`6XauTg_1OlufG3rhBHKG!;s_!)HMyS7~S8<*K^QT#x6Qk z@BM@!Re#97tKt7Shan62@47X>f0AOR{7{4rc~|8ndyyKsldD5cf z`CHPSPP$$`p_7jMS5RniMaBG-*yDtgCY}^NZqj6zr?l+&h&`2`bkdZQPCCJbo>);i z`A?XQ`7c{F)=Q8oIXi^OTP`=5KkD<1im;?R_My}#>ZPLNqr8N_w6M-(pB#sg^Lq^V zfqsLyx%f!|aR)qC2AM;wvRT|JA;>GO3omP7@))s^BVk|tL^KEz%w4@GRDF`o&E!^& zbC?XI>A>XUXoRkP1vebnQ7TQ5&L7HCTm{GfPpw`mu!;rvif&*ri^o%}ILZ-s{DyUy z9dnc?FDba48%X&T9cx0*&0Vd^TB1i2QgIZ`LU$UUc1gkVZ}~t`BPfN*)Je~<$&;!7 zFe78Wz2IitAmyS4*F<0GAT1VsVEV{B2nqh(E$h)f{4L%3(h>YE-RJx)(Tr5|p=9er zlGnCAR1h!EvZk?Kt*3iAAeSi{R<=!gi|v!1X;u0&+9T;`Ay$=q{9&F8BCG$-76Dvk z;E(Wt^st*YXTuwMO(T1=twa@VTW?{h;k4!n_0M9l(j2KgMJFwVRp4xCE9sWP6Od#Z zNtSY)M}jU(fQDyuJBLYVODjy8b+EnBNk7#?m|>|BGu`Rif89% zSU+i^oB`7xo-dzF56UN#yn8)N0@Mmdveia`zn%W5=Y8uf^1q~}DZ65mtq+G1)0?-m zgycjFyXw6&&hVuR4=X{O!_P-3ndR_dD)BiLi&90p>0vmdeVi#jVLp}UK~=ckRX80( z>W)ImE}J}7|2r=R!YKC>ByN8VQPR~Zfa~!wmyO$saEKR>%D8v zRqevouD)kkIMcCxMkpeyyYyy-a4(qWuIP_xst!i@>D3QusTY%tgC&W#duak&Db8^? z{LP)_)NMg#&au(~+m~=Us{+hr+9sUbAuLa}ZfcBtRyuhRPYvGPcdybk^`@HECR^89nze_dS={%@ps2f(t#@0RyAMed>x%_tbtGFm zEKSEDX|C>j3u&5{FpD|8YxI_%Wg`kZ#fjOzWG6b82ePL(-=uh^gm+yoo^jik+=_98 z1629eKJhHfDPvmM2QtCMta50WsSUgO*^E=L)%`(D{;vKC>m98EO+Ahb z=50WFj0E;jhq2or(4V7~HD-^LtfcW5huq28n2k%{4^{CPHREP!WVJQP;k#=RF^^6; zR9p8G)@n707C&XX_ZhZ(_nUOpm?jO|)E^a8d`dm6eH3}enXb7rqA}Cet%FD11AXU0 zh@_mGYn<|55y0U0x3 ze&6jIr|&>y2oO|eOyBjLD4Go`u&+oHdS73S?hif{`!Sb?-yvsohwg{h#D3i1{ms8Y z%1yAN?Rb}Z$o1zx>Jb8WIGW$=qdC4)=>|jdw-}oH-SCw$-Qc|`uN$(>{s`|I2gm&p z7!Svfw#)ivaL>@Fd*-Vvgd4GeB`GP{g?zK#Crn%vdZl<#=<|G@DO!YY<3*vH`FxYl zkNGSpSrl5#@6_<3P-xPT{t8?~p?-?SNkn`x!6k~CVDS^f`Z?~`6gkA_RX)WOGlS18 zJ{R-3l+RIeYX6<=zk49KZ|L9mz;B#UF-suSFsD+;RJbwMW`79B})Er6hq{H?cgn(h;xy|- zmh>L;%vy#0AbDmLPseRqCs@Qpk9@td>8#>Tz8`JgYsKZ0)BD7kssp2cKtrDS==Q^w zfulu%KWI9KUk|@7esvrfzZ5kNeks`Dmp#RgOU`vb#zC}AAZwq_n_L>0-Py;6U&8jW z`1ML2e&rnhe&X!c#jtB3T;pKaOfYPHfMI*~H+tVH&%-e>E_YGrYoM8%k!;Ks8JeA8 zXr}q

rlYHRn>|K=w?VK>6qfKPhzcljNb>h_QNq^5~}f)tjf6V=btdIqIu@_h#CA z;Q&#n3rIpNTvsM@#mn9Vc^*>wAG*Y3KPc?Vika@o_ zg5d88L?02nHF!5zDEGwrxjZ-$KLyKMFrJ9f76uX0oE=G+D%(O35|U9HJ>XyOi+oOE z?q*p*6FjfMyTxT|4y_Uc3!D#?84W-~Lf218xT3VXeIHHLv$*8Jl)a`i3Ph|uCRxvD zGK_uRtJie9zM;|bVh;H0P7rwNKg4n3NaD1l83-#8aStqHBN^98g`8j3#)jO%T`2PT zkK2}I02;{Y`?pH1mf3n8J+@x1#+14O=C}eZ)z?l@s$wv-pSh;{8V7q8J0+}6Lx(5H8J^ zF;c_Ei%@$GBZqY9=P?^$Nd?uZe+*<5Be%VS*ylsXq&7yr^@ZH!}@VlVcW__yL+sft|f~gxV ze=*n83#1?J>Y+m+QzmEgox4pWKGT}L=Y?FCNX7hxpiEz-oOi3#Yq|=tjSS z{>pi5N`Rremn@&1&gcOl_E+c8;dd)sy;G2dclVBAD9syJ(a8r<$Vt{?V1j zLxw&ud~mYd#z!CEM!U~QwBG{UY^8!@4>Wim4vSFW9bUo7C-ohQpPy{qd&;sJtnwKi z?X~{*W+IhGcd2Qe1+EjqN}U?kB)duj6M3rAx_;+q*MCSkQ|44Kosnz7WM6H{Jv^z` zOP0SaeXkzS|M`V=efx8+>-`=NI`*(0&kcMfW9)YW(@-5nc#_1D>Ml+GHV|P$D z)&{aaA(=b6dq4=U?e}nA*EK!R=zZF8H>vg|)YNsIdi0!$e%C2D`J}!vkz-wl!o*$! zM%OXFUYMDVu9M5Ibr!gen;3@V1KH2G4w4VYbVlFSLH6*ZzO94wKnIFtuKdsy+?hj)^^^T3Tu%|BND-SbCOG+|B13Tz2F<7348;SykC4$#tdf0c z3NosJ=J2L*CxNUyjnb8-HBAq6-1}aDuX7rmN7_{ee0U&10C(xSljd+Ok`_GuHRx@HyQ4`8jya4yQ8aUA*MrKA1VLuasC+9 zt21mq3n~Aqcua8eNkw9=C>>jM^A5R-cp$TI%I;KjRa@(-`U<=lLR?lg@W9olyGaBG zbTnmuEGYYmys}RU%2sglNqy_8;5XZl-Z>4*l zPQF~SBD^O0bTNjQpJtJ-Vl;Axk(#zTuNV-8iQKhEanW_gn28z&XO>V%JE+0xK2$(- zW^XQM_SsByHGK454!Iv}^rpkgu>DH5ZV$Dx@g9;JKM zx3~rw7h#_x%*&p_>U_Y~Xb(K+lD513WcyW&<4nzuj(LdK5LFqReHee@xF&nGdN@9f zl-|fnCk9#N^OG*O&Zu@kBlcyd>r6j>RzA=%Wm-!5kFzgqDn$=0mBs}dnZZ;8=iqEk zdQyug_*co-Pu@)&_cqZf;rwZv_nVPdMzlj|J!Mhov{M&_cJrw_jiZt3MWK(pi8Bg5 z|9JYM(A9j3&%pU=&7#n6`2Am``x`#%`Fx8{s3=raR8VyIUt!_lVPiuI3s0k{6Zo9V z2SHZhxPJu&;|Avf3kv2?(^-73z@JAC*nYVx-@e1xgN6(i{k5Z+H=pf%cJSHx3Rd8U?DvP~MFN#&{U?q6xmLQJ?n3G~f}=?s0S>K%I%V zTJ5Gbdt-8+IW~8RpIZ(wT-iaEUS)|@W5KDx`&GylXsya+IjgxxX`U$D1nt|>S4B_D9>69=MZU3{7Cgb@`p7r77wzHY9$q%v zOKsDAsit)-{aap=Ok)ti#Q-q>i8Uw{{fBgHZ7TNvfhFkGwG?33VDR8`ti=zqcPO!i zA6Wm?_L6KJtf(gI;8OStvJYmWohX$(*x>z}F$gSqL`Mg0{i~8ww|5Fy5lWLN^Kjs_ z@)*Wi9+b#ac_%t;6_qwVP5;#P!mCt*yKGeUpTv%`{KHb%oDtvbVc;R$dc4(Xz{aXL z`*Sf>t!SI~AABxwbK0RS9mWz#^(l0x%knX%8j|1a&mFd~eU%D|0Q+{~#3h;7^3D&L z?%u9+^dW9?n+n}tW0gMbO10kmg#T=IjbNi91|F9;^lYPxV|V+_l#URJh^b`%HCZIHQ@%6OIw`-DppE$*wYN+N8x#g)7*jPr<&g5sKP-_L^sOB(c zQLHWis@+OOs71&8BEnE@DdMGTA=VmDEP`qBdR{y_%J+Jd@&Cj^u{K}|8UhtIyWyJU_a^4DE5qXC;1{NXm9r&L)D-_7+e zFA910o5%q+n=Qxy>Yz{?rxVuxPR;7M^8_P)8t2Dldc@CPkrB!65{m(P^IFbSId0|v z2EQ$l)v{Ud%GP3(u2l5R&&)|xHgnA(@>t1_c*o3BWxDKuVs^|aDpO3#z9WxSzLjEF zkEY{G(#pmj^ew~-*an5vmRP>dIU8>!I9uVOiKSG9=r3b#fLkt2SK8eQl$-CNERKG- z$LEeJsR5o_heCMUgCXlH!rWf3mfLoDfgZcL&nqg}k+2u`?Jn#s)z86}WrJ20}pdK!}5A zXn#t3#3;tOsLaSs2^&*n|Gq>{*B`wP7*ACEvCi`2L!pftHis|Cp<2Yr@DdU-&s>2X zi-UAA7FB~SZdRs@4E`mNcCF&M7{cqlkOO^l=bWMv0d~+|2jtIkAQSWR!TqBxhsDPN zODB!-(hVy7V9%K1Q#uYv-+ zLz4wcaUs9;L|wpd1K~3j-Xa<@!;d-7j}gsadZ|QiQnnO$FHnQzwi(%Xy&gD#35X`U zY9T<#H&j^#6?hvQAfon)Zn+BX=TQ~xC5pRKx+UDOfO+Nwx4O=<-B}f6uWP*kYPuRinf1jhsT}+ z@#k3B2}sd!UCDIS-!G;LP{`4S>&h+^WIxn*?egb2A8q}wxb`}ZaM4nVF_LTnr_meE zxbpBkRvUc4lm~Yn+16oYxV%J{Z0>(tM;r%VV#(!vzXCf_x6&<$=P;*=&UHm*j$XA8 zI3v7tFFt4&eQbwr+w0O5hqqn<_JWIwwx$QRyowmj0-j#Nupb<$WmPFJsU_|GPg_AF zMHuKf|2Mh2q`H2IK120N*xl+{$ttUmaNfLQBCw0LGn@=oQ+2J5JV-_E$Tb0BEvJZmS_MKf~XPRCMDRQVs~P`PctD+L3{ z!wcxXqc6qvW`9tM>&<>y;*c7^a8ay=GPn~~fE!%w;@Lb(N2h8Xj83=j86WEuW*0?g zZWJEth}WoU-xqBWC68v?5%UPk@khhrK49(j${P z;}@)%knAd0b563mVD`57uV&1jbLy!(Ry|)+xTSdhUA=j)vwP#;Kee-(8wH&o_~4B@ zj>6WsUtX+y@{V{c&EBuI^s)KheE*|0nRkcQym``rH523KP=~Xrfyy7gZNlt*%L@yC zF?)!o9-g{pZ%a&Onk4qj+ClY>dtA)@ZG{J)O>a4xDrmiihWZZAU(*}QA?j?MhH~R; zzqRdOMJzk9YU8;=n?0l87&m;Rq(D!lG?Ams!pgiEk zIWN!Ih*SHL+g6O%arhJ+cB(g>BO@iM*Bj558U4M&m**Wo;DIJ_PM@QPitr|}6Fccg`#jb><9Pi{|`T^D+|qRj(#wLX*V_p+!AfJm=kA^G5M+D5Nk4u zW7xGgUj5KLkCVK8G|S{V9*p=S(#A9F-n$c)#LpKtphN+A~fJ|NSfLbnxXGcx#Nz-HQf zNwL!Jb{A!SW$G}$`v2Se7Wk-&d;b9<#27UyR#dbH1c{o2@KBM5=B*;l~p{q**+ll=BKkKg=e<~Q%hnZZsDK9S(#%E)7!_QPiMwfgVjWeVzGKp9v8jaUI;VgpZ_bu-E=s1?2=zKezu?|Lm#$t6a z$m;>{y)0v^Y90rQ;ELND<|5iSzT5YfQ6;C999w)1ocL)h)_T*yeriIom> z`i{OUTOBman7>43eBiU*H)()1FXY&&Uc`P|3kI&yr(izS=V~LHQf-V0eb`u_VI)?J=$GGb$q1Zz`|04XhDhpb7uE)Tzs0AFaJv~#`M@ZjJi4P^LnDGi zDDP2{5T5Z}1gjOly+)m%R;dML=5>Z|S7JM$p=R~c5AI9q;n5PgW_2O_FjG6_B|f~# zsuvlqRrkGO((aevZ7~D++Qub^WCkKMPC(@+{#p3^>JEG%FE3zFT&zDJ9){Djml0$= z%tjRE44U?g86-~;BS^`-2fwn7Ft0R25E`}#j4$x^%0pKaBdNn5b?l9N|Mm9A_`+}# zzc4J>gdrtJ&T^M4_bL4!AP}R);}vQnsuyAqY!axkE2wx> z4N(DS%w~3m)AHaUre!13!hP(03DR;W>Qi`fq|$=pwRui11e<9g%j&*Ezf)=1Cr{uG zK6oRJVaWrpyVl}H7d!!ur11W=5%QxI4ONUXM>dXHiwjgRjs=aGT;o^5u;v_1!gnMTQ*);>Nd<*vL0OnO|GEqwg)mO?^85kGW|04-{)- ze1%CL`elqIVxSAH47kL-6wpXUIEpk7BGRyTKmW z=%eX6G_AhJ7=8Q|Z4$Q6d3gw@<%JyBp3AY|v~&CL8#+f0D69K!M9+i{?jbs@n!#VR z?mJ`*GZB(Gu>4%#MZb{)OF6XRgu4GONrY!M*b4A4welXC;@ku$m7IlXeXHP;yNQ+{ zj5szhj&gu%Jieg<1A~X67!)Z69E+JWG9KrW!MU_HRtn5PGWyUfj2wDI_^G zJ9FIwV9nf}f&;d4h=%6(2nVlxNAG*GJH|)=$+Dv{x7>k6KYaWTr9qP8YS7TpwYD#( z;o-4^zj3n3Qb`8E)2|PnV~879<;d~$a5d`V*YQWCC=P}>9pc+%SodIiC*;B_BY>O# z`E??46~}O}M(*sl1W|INGxK&XD1?K_iVDUM@PC5T=CA>mFK@wI6fz4FAcMaPI)21;=IT43bDqlP)F`l6ZLaQn^!N0E-D6x@d(S?Z z-^M8%5o|O*iR{D0m68Yo=((cg&=5Wz!9{9pXk&&U`;TLj(6980GwyjV0QbIjZ0vW0A#V7hl(5 zvU?26U_tD%WuhPBtU?ZGOQno5(HZke;I$ZwWS;qC=HOKy&IsZ=PfTYpsXp_`;py0h zzzW(ioQFW|div<#gINc+Sj`{oKT*49rb@PdI6rdCC~6qBqb8#DW3yrG@f~3_)Psj; zZ~48L?1zsX{FC!rmV#D)tTXLi7TxN;@xM}K>@Ye`HN6dGEIhUEud-aEq3Eh@CCqHU z=-g`Ig6fM|u8_UIaopjJmnAcD!uLXlDYoIPHvEwEFeZ3?6D2WDQDLDBvPJ#Jp$5!u z4)%7Ngx)xE+0e7Y|SR_DU%0IY_>YTv>8Zfr8*T=WV2J==F5URQ?{5zXI*z@v&+0H(mZ_ z%HJ&cJ6!&bkiR44uO@%T$lq-FnKlfOavyHx(JkiQ-BceVUoBY)S)-}Ul$gZ$kne>chB&GL7P z{M{;lx5?k_@^^>)?UKJc#03eYTeX+0$Fu-?x*&Bsog;>zB7ca_93*dN$oM({z__Xw0%x$_fRA|rPfK? zN2PWhwU0>cc51&Nwfm@DFSSRhyy_F9Y8_I$joRy_b`7;vQhS8j zVyWFr?G&k+Z3nf#klIFSpOV@w)b5blL)3mpYIjq6ztm3t7}|TJHjCOdQoDlM zTcma#wSKAHMQxkZZl<Uf6ro{h!8#_C54k1AuNJeL8J}v<0 z4?){C@+_q7(wE}X*0qH$nPHdC&R&+i@4X05`|0!^be1G{c6QT!Eo>EOht#sU=nv6X z*4gm&M6|C6gU(J#>3tHE(@FW&Xi6++u6lZS|FECI-9h)8qTM??H?Ulu2HVcgE@}m} zl{@>7zCbI%g7&u5@)n=|H>6gk>9$HyqxUCH6-8 z4$yaXk*F??XzlH6S!FwZwrs~~L^}?tF6i%n22Hutr}gjqIU0Rhr}e+}Q}8=Nera+1 zqGP*f554p^_TLBJUD~(#P?{`W6V?GD}|DMc0J`E`uqE|PpTnuPwp!NPTjj=^Y075>e1A3g%^b#d;UorlT)Agjn~ zl1zvuA^&Ogzm1N=qaDG&Yx4Q9KL+oH0F=D9JOM9GI=votk_4(fyP4swr~A{F;)psc zyZd|SzMk$o61sQO{V?4(ByfMX|H9|sK5``7g9+U~V*c6aUKi)?JRj@b&i%3Sm!GC6z46RKquewikIgI)Bgtge+>}~`-s+1KI2hXRC|8u`Kb@T`SYBC9AhqWrC8XS|6-y&yMT47{*1Uf2xWXiVs5dz2r_XBi`F^mjuM zkFFymyCaG$90=+E7@_~ok3m1?V$ffooc;%(@2Vitt2>Ar{VTN1io3){|4H{10|QkzX}HhsA@ z`0~X0GDBy3e7JuRx|Obtq_o9R()~KRchh}LLia1^-beSeIQLHY|MrjIo;3>Yy{Ng7 zu&G;E?#xC%Vss|lt9}P0GV`atEZ?e|<`%LZh{?|ASHp61X2=6NgySGlmt=|NJ$_ifs_PN68QU)0M56sJk*Uf9(*9& z`O^X{BtD)GQx{|T{`VG&$5%9ziM|UTl3&2B+(pW1hx%qciWQWEcix?lUkCa9^1*0+ zN4Niv`K>0un`8KG9f;rKz4Y?k?_fc!;BMTDdHN$<3`hG)0rDBtkKuQ8B38W;Dl0ZrVDG8(`kdi=30x1ck zB#@FoN&?C4rO#QW8i>ASHp61X2=6NgySGlmt=|NJ$_i zf&Xg>;OtIHr6iD&KuQ8B38W;Dl0ZrVDG8(`kdi=30{_qwn0RKZjS1lM8LfcckB5rh zx6`Bf`SaeCNIyOz|`O*d(R8FmH56@|66W=K}E z5%Gw-5pjeU)21nVZPcilGYv}6g3y%WlAsVJe!tg`$lE>Rf|}Q-d$h3ulhzOS zK`h?@?bOpUPKWmL@j}>}TO4|8o71&$k-OdF_1)wT1Vf9LEM2y|u&CHpQaY>r3)fXt zR?V)SQ&U@4-!OOH_4AwZCrq3)`O2%Vo^p+hX85OenI~vps_Be|=JIIzQlDQB1YBN^ zK{B_lRE*JtDE4|Bt{|-KZVQdJ#1(XULo()md(i72#d>6_Q8R>?0cf!MUG`?Tu8lEV z>~6nqcP!I__C>m9lwnuyS!{Q^9NJ=&)?;ti6(iHl71R+3;-Cd&tj%yrYHDWJOx0@j z7U}5m22mKi0o|c^7kfi)hem5D;8qu+GFo{aohQWH!kVh`sut?N_<Pshu$1ALWxAT+3r9i5V(Pc$q9`vSiqrkaCLR0`(08^d0{OFG#zW2LR43qrT znl=v(d%CUiIlsMV5*}`gS7UubFv%r=X;&7BZ=xLUL3#f#=&v4MB;Ep0wc6bQ(gpn? zDIpXdHuX`ty#F}9dCM&l-y382$r5GaysIK+vs@{^K5sy_tdhSIv>Oq&>32WOy-4>X zNdLQt%hw^FTl0#<>A)Mt6^TCrUypeH8R2~b_jhuNMB(Ick|oc~L1p3v#6JTt6Yk{k zA!wfgm^^NSpGPk#5;nwh1?>MkF`7qSV{|pivsA~t#z>KbK3se@A>3(bAMQdtzYX5Y z!E*`B{fNUKVK;qjB#eEa^&?y>EhC>kxJ=v$TB zKw55spH*-l1X;Za`TPKBKQ+Hd?1cSl$jVeXX=UOpWoCQk@&=lk?E!u2RNdR!>|H`P!pq_#Abx?9O8W`WJ|Rl<|!x}rWtouyAIGlhV*SzWvJEb$CyYPHAAba zuc$C+T79TD!B)uzB`eBN)r%4uxOP%yb+7mHa!RlO2$^I%iFyUot&HMvd1;% zkGsqWTA0>mY%Z50f_S=C4i^+(lf?AnXl`@p?y#6dQ&Gk2;_I5~uCFd>Dz9y7D6A;A zW&37foRfR4rwH;{R3FgI2p}FUf%YEeovD~l+9~&(Z<OfFwMno7e-7%l(%`jezcOsHFctjWxy>&sb81vrX2T9)!OxT zuYZ}P1WnagqLg(r<)#If`Sd(MUD z)w)01htlr1*@Jd#9O|69X2cTW%wIazr!BDu%v{0nxtRsQ)#icLk1;S}7|78=0bOfS z)=e1yv8@S9)Qp7?h2b{H=!-FK)-_CNJbD{irp1X12fSPJ-LL0bid0+?IWg^tiwW{L zrVOx&P|1kRe~XidZAzFc;dVv&H))dPE&1hMdvf_|E37OmE19a27ZzEG*<*3arb?nK5NSQ+DBhAb z(yM}D_%NG-Y{uW=1T%6B7%(g3LXppCS|a2^(c4_Dt-4?Lw4jm?NI$!I zA(jXEOi8W8IEhG^|HC11y1>x!`a~DOWaR&w7c~!G;8LlH!%=4`{j98ihz>13gun zJ~nV|c-3ia-o$xeEo_iY3oD4~iru<>Q9u>GI&TokjWm@3_PlJqqk3M<%h(8`1Hojk z8I1^9az{eSuxBnn(ZC8PJBmn0o;}*zig8R(YY%~Avo320$l39a&e8JCekOag>?^or z6DGBz>|n^s3OR9fPMB2K?Cn_m05jQS86A?-)#5y1w`8e<5S3s%WwefFYr=kw>rIhX z1AUv>i^X(q$@{d=#y4@>XB|d!zVpysHt{5Y%IndWx`M_)v59S*8Z(ma?E7qD1b~WW z;*Y;+m|p;XRq3tng%23+w`{hFI{~Jm|FVZ|q7q=zdmgcgWdPHhxy>fd2bkusL;r{} zYa;s3DYDgHw0&aJEbIXc^tW2X|3%ZU92EJ(9|6!{xG=;Z!P{~81`Xz-A< zQ-%&pKQ-gD%+t>}GwZCg&l!I1=gu2({sk9~yy)W3YokVAGG^?hK84&$xDGfw4+lmSCCqi;Xwj*t8(|`tr>yZn^bKGEe@uekzKa>dGriBs=J_nqN{= zUTkoOxpH<@NnK&h^`?6nN0wD6ISj_M}tI`>qSr6#7zK}(UILYF&aSq)TeEt0FY7<3B=bgvmR#0)X;cJ z+WarnM6ojbH%Oe^pIMWLZ?pUj#yZN${F(l>h#>xDb@BQ7uhkaEr~lL0oTvt{tPRJX zS>|Yp=(G5A`=?N`^e5NzM5wYvL~rN@S(mW>C2N5z&?48T*v({zJOR0UaaneYc7-XJh6NpWqy}6!O6Y>OI?Ybr>R>u55?j@6^5VI3>laYN_4qZ7?H;2Vo0;d(@ z?!wR-+niy)^j{maV~I{p5=e;X`$O38w2&3bohi(THMB%mG zv?DUu!^b$C&UuQsusGyFGw4LJYwJ-jKfqi$3(D z8$oh=TAJ)W>^x#^m=j5?&eIRrmtuiPUux$}aH^(doPKJH)9%+=v>95qOS=?H9Hpg~ zP0KjF*lG8)$z2}u<(e`k9x7hTFcHCyu^jAU8j9&91HTEInXce6GcMRs54o|Pg((=; zRomrWG5O?0iIU>{REqNhxhTMJN@}a6m>3hLRrkA>X#x9Uu2^uF6-yXeYsh14kt4_5 zNPit=i~kTeUqNoyjF^%iNf={`FNcnk5`Hk0V#RDBOw{7_EH*O7aI<()({?S|vt4tj zSv&UXRY(yg{{y+8jOW%x3VErqzN=xiO3TIMHcGCnKaag+6ORL^Xl~nU6N>;;8K+lz z9U+v7Q>77RuBaI%bM4to7E311ofxZ@_F%^8oP(Pl;eDLUlyIexTj@rfv15%Bs~{{c z;X@DOi~#Xl7_meKHS5d@Sx3wh7lswifgoxQbBEsWK8|_%DZCivNS)D8Q78}CxXaw8 z`>RnVkhdyk*Xe$b?w&N!Y@jNlTaT!g!)!7vTSJmdRGXnhV{RT5V+EWoh1pKX6&N-T z6o9pLQ1Kx$_?bBp!w~MSNmH(B#M+u3Fq+^M<91tMl{cRu6+&lSe+%7dRI{ zVdKHK6e=AQVwgxz2TI2ujd3blctl9J@n@{)WP3txH?-If!0wmPb7F-iZnLfsCv*Jr z_z$bT?jU2i5(Yfi?)RYh$gr?a9n#j^ zR-^m8{vggFMIQ;^E=2ikquZ5HkUu!AgcDWhlI>Wx)FPaX*iY5uQr=kXf5^pr^Q4*K ze~DVeDTEOf&L63bLR5y2)HE1JYKpJ8LX%Y)oSOZ1|FTFN4C}F2*2};cgy(XwJQqmx zmywapW+0%|=s|4Pp?=CUC}!8{b{X5h<|14q2$7+hQVn()vTdXedfB8ZJp^A8K6hqH z6*L*_pj{p;&td32tWRJ!XCNIW@ z0ghl$7>cl&sJk5jELf_5$HV~k9jTHOJ&&Ngw0&om&ST(dKc zO)-1dGRl@{8Q~iBsR{eXrax@=px?i0vN=YTW@V83$QCz4HixZ8{(st&C5 zNppDsMU3a?y#7+%j{OWhre7(ksVb?M#A6FWzal?BA2<+n=$^$!n+-iylNZaF*qdOj z;^e}vfVpPLe!QcpM0^=QMYFb`L|h7>@~d&MaoAB>iPKT`>MCZ})*443X%w|M3}`V5 z+w981@+zy1;kV|h{E63`o{?*eqcFrY>jBE6hvP5=h)$b57YiUy2QEfuulsqt(i|H` zDr_E>x->Ob3UOhd>ck7%N5M~3DzMNP9JDnKs?y4YfJ7fX|Nhi{ax~2#)TBJGB)<`xwu&bgF{KwjDdZ?Jf_eN{|btI%roz9yv$A zV0KyF-=u6pKKWAi3CkMlzsv9SaF@rDPWq9uPv{5DhjEhE;zO3n{D~|ht!^)hEUKy; zN6I1&8;9X_!SQE_=fI_AE5 z3(i@fF|uPU!kx7Y8~{Slks=Ut%tggM8Wlyy-i-7pld2GXa7)O~39-@iVtQ%rZ5uuJ z013_r&z+(ZjDm@BdQu4ni=+ugMt}MQBVp#+N;qX|yb;c_aO#bI=!&)yF#$luHj)c6 zW*dfARUfLvrKlW$O+*TrX1E@06@EOeHd^`2){;O1A2|%n?cnZem zR1+p%Df`sZ4BBSeEd@ToJh2nsu zt&OA2Flc4Ib(6NXDrwp>4O&Zli$xdw6c<*-^UXqj=Ue4aCbogLtgbSSHq)TB@U0b_ z$ahwJUStdhUscWw`4)?Hq^&8B=WEbf_*RG&pslEn&x?!^;2V{1g(3*r>I7*!btGt8 z@-6bM6%NqOFDw<4CmC5}mh}vSR?63iuT4~d7UQ_M_-1H0D;p)V22lXohLQyG9Ru1Z zIm{N5L5q#Zc)r=7jY?aM$N_D2NliR$4rp7f`Bp15(BeCxcv@8JNm21F6~jSWQd}QT zI~lZ5@vRVT2bu8N&*B?(h{;e)b}HWI3B}}i3PP<_sg#sigCQUz1bzpZiDX8mxpvW z4K^=^WSC}qFa`I8nlaNbq*{xG5vNwz>W3R`s_mHRL01u4s<$^|o@^|8;QK9%3$z+V zg*gt^5tn0)7#+W4R2IUh0c-PQQVbprXli|Sk1OEBv=ozg^tDd4La!}?TzS*GK?eb9wCZ!cbiLn@KK4uc8fR6Tly)o2XNAqandp2GqB08yanl3 zaa4Ml^in?;PULxFPYZ%Bb$P;c&@-`2;&Xikt+v{TqRfLMHmS?yy_bru4lO%n3Ph2L_x0ZIlb<%eH$W$b7B~D8u_oIjGBI0mg_7s!ektw!nu%k z-He_%@IL$Tda+yK9SU!exKL~auBs>!>!i6@tO1@sYnE6oak*FuTs#Z?l(Mf-=E=%^ zq%_xwOknak`e!4&K8Xv(K8Y*DE{Ti9Hi?VGCW*_%8i~IkmP$NdG)i16rb}EWawIMj zBPFgEnF=3$k7K$b(JOJW*duX;*eP+X*b2LF%P(;s$9$hF0Vs) zz&J%NvK7vfxJn#3jB;I9Bn|+V)YgjK5*LXsi7UhwiD!#-5*G`%#5OTc;!;r{af!&5 zxJ(R}c$N?nSBgU@=Nvojlek=TOI#?nNjzU{lDI~!mbhN{B)(qElej_HfNL8{#dKg> z3C3x(uPT%Ehxwi_&GoWu|1Ew(0Xx=nQ3p{c0!v&0*2e(aM6_kO*yahBU#z*Xeapp` zTeyE<{7n0hrQb2_j5?-;>sZ)c^*dp+rT>c98GVX14E9B`r=um5Ny~3*{A_Toc5L(6 z5m@X{Zyh1OU2e>oe$iQm`yeZ=j!CWEy*S)&n)H}d#@V6KQvIYqs-HCdw8(xiT*brj zZn5;cVOrH^o91S(+qGErZKfTMxSD-92(j*TK^FnC?a&6X{c|yxCt^%?mLyG6z7We-}Scf-=o0)vo4d-Hf)y-pEFi4vE7y zzVsTVfdHd;slG&dbl}r1XKq9!?0Z;9f|1dP^lRF4)!2^0q=Jxr73l*moK|pQ`@k5s zh3(l7s&3Gn6xIxi!~*@DIgV4M)Qq#Gc$s}7J`4*Nxv(7rsS20hs;F{3ySQ2u z0c#=)?-v^ z)z85&Vi~uUmvV$^%u=2ZR7fvbDhHRaqbxyU zSQO$GjOudiMyiZ!o!YoKaCLrj$c4SG#!2~CUybki8}X$@v)e(`81T0=S`VbF2%MC^ z*bhRLU*wGv|6G^H;a!5W0bJmeu5jZfo$(onCGTWnKmm7tfLAE@X{x=xkk4QWd&ACP zDJ|7bUy;`kh42Q@L$`Y6YTc|^Q`_68%I;e@pmMZID2L}G#v`j(eR7^FNEBZ=@+n((aez+)};S zA5uHNU$A>jEyF|IT`a(#d@-kMBQJmlewUFCc?kFy@F!}yZ|5-Pwxxc|2oP$WGvp5_ zyScgpmCrELp$k;js81fLt;Km4`T-vS|MV;1M}U?z0`A!J^S4^pMzcqoCvGZ>ifc6< z(87Kg*2)9iz2M%tkDIsH!@!vl<=6U+2j!7HdcN+*-3(~HFjqEC5|~TwC-zPMCm9DU zNhgoR$?!2gjKY?SJd}rX0hQI2OcpwW*hC>+_VGTn!{dEwnkLtWn+KN)CxB{66WGM8 zAM0n7ibVh_djj|8vP#7Z0IC)zzpgPDP$&1JVL#!LIaOGq11_&3C9zH7T4|4bM0O%q zk-5lYWHoaf<<#y$Q9_AA!9w{$F+*uXp+nh25kyI3fs9eXf)i%U$mhqbrg`Fw854M{#WcfxLX10B)#4TVspm=|4*>P|l$DCF z1E>(Ia4bp-D{76NES^WoCMAJ?W(m~P+G=0R-E&~i_Ge~oe`4;k4Zm}}bOjQOJ7Rd+ zC(wxAn8$Q5D{E`SU>zrP+uN0fALTb<`ovqE^hWb)q(*rxDQwL1Ipn6*KeG`3hiN-D zvn=eB?NitQ&4_|B9@&#B*3AL8!AaaU;_jLifCT`n8Un+P7(2R?*DhtB$REQwoWLLB zcTCw&A0R&2qAY2AY;cQJj03#_OoEpHi4Sjtk(HERJj7mMjk&ahFa3U<|;jn1@Sa?C4HjYm|K=e+*|w0)LEO zx3Z57i}5~`zz@@VMA>hLo+?fLMlg;0;AWw{DW%AA&8e;Q2 zi2H-)0j2{qfK`$IdW)SI9{Fui_SX2u^0vk|*3BBVmBEp?UnrI*(=`S5v5I_b%6-HblYlRI9Zp~`nWuhI5;zG7%*S0|gp^82ASD4M0oI39ok$f2B?0!+OK&jd zuRdT6_bRdvUwTIT_<>$Xzg^LH0dow|4NO0~f#vuXm~(>P1D^u?7VuEu_Y^*+@UR<8 z#i_7A8<_4F0iOn(4UD6lViNG_z}Etw0bCADx;kLaVVabAA@JEShk(xk?f@PRycYOe z;QN5-?*ZWRfVV00kAcsJ`59$?0r*0g_bcji9cBJd;j|{m3HE0Kj{?2`cr@@> z;7fq>mHRY>OBJ32JPz)S%G?IbPnP`3d=NyQFsS17h#`L=3fBw z;PS7Pxd(VM%mor} z{q$JEn0)pC@@Y2YDASjOjyyN3bu#j%*__)`PqlLZcgkc7c&|>tf0xDXzzKNtCE<~N zj*&jbO+$K!uTc0ZV1|FK!sWn>dmS*_peAL%5SaPM1B*F|AG8S-`ELe2)%SoYyB{e& zPXjZ5s7y>f<(Kmb_UyM8$?zEmhEKn{5FW#3TeJas+U-jc2ZnuEg?&_EkSA2VPsNwv z{Na)Engu<>DgaKT7?##zq%)B_?VkS`?uP~@P|m~~R2WSE3Khnd1YwYWf#Tl`Ouy~G zlm-1BNZ<$7Qqk{bMN5Ap&P|?%ZVO$(0CYVTI_Cg%!ePi{G%&-?1vcZnK8Zg@nsHvB zXz6cH5?a!ASm=%nK-X=d8~M59G7x&Cp4$eX(=2rE0q6=WbQ=bsTVSEvIRM>e3tjI3 zbln!Z%<~ebm$Ek3^(jl5Ic~Vna%VZ$&Z$iIZ0M(``?+b)HE=4c`#YnHq#es<5MkE= zCR^grq{h!1lpX!{SmL|WLMs`m9~nk#B!7AbpwldLnIn>?pL+^a*7(1RJKU)l|H<$h z8~^`@`_-xH6kqx+u!OfFNqD4NV4>SG03G?0o|tuj%EX4r_-7(m)F0y^y13l?8&rdEV#$~-F?hBI8l5V?&Zp{F62r`^T>P__@%OYuF{0ZIQ z!}v0u+o7l3-UPfEKAfcLK|HKx(|*;>27mG(KVt0ygFoey4n6JiffFgN15%m1S!c%K zzJDt6bHbmsyf0PnIjm9q=r5}+QjWJJ35Rs~7P@@{(D^_|wN%kF9>)ft-)!NVb7A6i zGW>4ES29oV^ZvcXQdU-3y1~zE=j))S+lmBXkbln!`0xKlJpVlw{yP-^14;M`XGG4! zM34zhyGZ$Ad>u*rFpTwzj&a>E0Nr*A-Od5%dO%0j zX9>S|0Q#(j2K@+Nv;7!;apE*Gz6FYo@wE*=$2gFl*s6y0#kXB6z{d>R4Ly0UOTgRY zXJRYghJ*2Z_gVPvQha+qCEo|$j^~^6`AB?6LeKb42aZ*Y=X#60f(dBohjiO5bejgC z+iRiQm4uEwxfe!7-ozZ2jK{k#rs5tOmDT-P^+pKGd8UTFQ1G|5)BDx9CI@b&-@}Lx zc^p-E$ReX0kw=}Plf*GU^pme>DZlkeXh~OXq3are&S#J9?+5g9YxPNKW_kf%^hiT*9<^c4LT|pFlBU`@<-WjPvVdCjLUB2w_EvPoDL=N zLweC}gq5!F7=?3y&31F-=)|%z!(5KIQj)V9MYVVERARW2B37=R+spl@D5~DZq?JF)(>m0h8DDz?2brO}QkwjNmM| z_e&*Z4$QGpsT%)~=W6)3*11RUb`RB-6Y!Npsh^YtQW8i>ASHp61X2=6NgySGlmt=| zNJ$_i0Vx3w-pTw|SNR?Io&>NS&<#kY_O686ZOPq}`TJ+IFZdGV1?T|?$R!_84e$Zh z1GWQFDkXuG1R@f65$jfyuwH!s=v13asf@sT>M50yKuQ8Q!=~1|Q?f`&;9p$==UkEM z7yi}D0MkF~r^Xy2Z)RbASvDOwL?v~s?8M)6xfU?#6~1043iI@WZ@GnpMpzN zzBIJrd5vI!aUD=>kk)wfIk}d_!6v>NGY}opVo(;?Y_nnrt^8(=X)5;ynhOS^ad`uA z;YIT>WC^;HPJbf*xU!L%and|kge`pP(Q~=Kc*Z>89>3}JK$$(g84YR4j+k&eB6P6S! z9m_u6+w-=>tVlJ*opMVG6wd%Yt>@UwT z#M;rk4r4ZJ+?hd5yk#vxJHm9)-4$ssrRLE!m_ zk6(M?r^BDbw_1R7fB+m-?IcJhA$~~1oT$b zm~DKMKs!x0+=!!IS~V}buy`B{J=2g((VdV|DGB_eNTBMif+yGp6srgiRKBfgGU=^$ z{}=kdmw0^Ew7Y*{^gVO1zSao+tXXB^*H~k#R{ELaibR3Z|1zgYBpm8 zi&Z_pEER9OVDM(%vi-E?u?9Z`D%x9N!7FH=e^n}aUoI6}0385RIe&xx5-rs8hqQA?cUvJTW)uO-KqQA$Y=efXP0QTeS00Swew?lRKl*N`F$P?HH%wwRKc_c8uOFr@kF%L~Q@}*zmGXdnwvOqh^g)$+~eiVTAS1NO%GP6CPdo_T5 zY5=6;#k<6F0px!@fML4vI=ZLMlHB)*=?f~<468z zXdZajz$?Gi!=fPyZtakGE9jqo=+%cb!#VDEWx{}Je4da(Dw3&fib z_C5H;C=2f;H#W8(-B#)2j<#ofuF5%Kks}e29BeZ#82UM{;5dG$MnJ9Y4-8 z#k?p097jAmfLEd}vwTyS8sJL+t6D$1Od9i#mWmueHed`u1B?WW0AvBu0mnWl6^8-6 zfCGTNfIWcSfL(xYz)nCHUjg7U<+U~U;|(cpaZZJKzbj*30MHA1Iz+U2jl~C z0NH?%fHc6-zn~3bdaa2VK;MCiLE6Lb8Q&dL*VYX{ePX9-+h_B?w7N`m0ZydY2Aeci zz18kw7$`6&j(Zi+5zN4KT`p0N0tEY1MC320{Al^3v}ZF zl>j&3glhBPf-ueQQzH7mrib+fn=-@t>Sxak>&F~9+thd5xAAkPUfcQP`G!92spl{J z%4F&vcze%_7e4b!Re^T+{>OY*Z2ga)ebZI2_lA$hzInk{W}km>Rl!a7{r2ACGfwHe z><9N3eE8I6+uJM8zH8-ej~6^O{nwAYbiDlYOP_hA!29!_b^RUBm;L0Pt%W;pUsONt zn$8b=Ju8ZKzV?+reE7|e4&M6RImHjWwfIka{(RZ^)hjQxWoMoD-J{>n`qR&L{nd8x z+xy=C;Na_DSbpzICHkJ{zIw(Z-`{-xpB^ebT|X}~wDQZL#m~>GoLAKQ?R&17c4gNO z->$9v_M11%_}LB9*4}^j{Npz~a`*wQyYAt2SKD9yc6n`e^1&GctbrkdHq{XU=y_`{V4+uX)a1 z_1`m}eI-Xf|BZR){rKhgX6`-nlGSAwmTmjlx8Ipr@W_u`?jM};)2qLHaOR{LJByaT z`Rff&{pLSsKJ)R%FWOh1wPertdS{NW_~Pr8yPn)|?_1B$yn9#ew2?%U7( z$ToA#%!m80d3fA^eQE3EGjG}UK<`e+iqgHW)nD6k^Uyt))Gb+c{HrTxeD$wW&tKj$ zws=DKw&|npczMcgWnb$OAOCjRfi?5eFMPD`PhWmy$h4oYE-4!Jqpydq{(aumNjHuB z)g`~5_)huy`PV%1Z%=m5ef8nn9(nMwiElW6c-FUTzGb`q$5}aJ%X@RLnmoJq`!6mU zd)M`8Te|=7%q<`F{ruwl|8vd!xnG_BRQ0OSBdV^`n?GK4*AIqnxaF+g+&_Hl#b51C zd+m|^><&{ZC4rO#QW8i>ASHp61X2=6NgySGlmz~U63Fhrf{{{xT{BGVUKuf)_QcLr z!^EwCI{}*j+W8N&z%Ky50lWi9 zyM34#377~d0Ne;z2v`AF57-3wE}#qWbHF}8FF<^Gn79Bi5l{hW1uO-88L$!XL%=hD z{eX7>>HjuNi~w8?m=34_+z9Xiz6{s|_&(rCz>9#l07n5sA)C(uMg#HzQvs!bMt}#< z0k|9RAYdopML-YWZ>3WC^Y@)U|2AZ<%b^$Jj7puiGUN`rik1a+@r%JVL3h1p37$a{ z-xyqDcLnfnn>vVtdjbcS2a4>Dxp*K~uMYafWrn#1Z_d#uJ~tT8&-u(}@vycy2(O?O zd)x8Qq=Rql6^cL7ra|`yaIlB(zb&EJc=K)+h}<9%KM*BLUFL&qV$tAm?CQK`l*QD+ z6~&cyU#)!Q3VvMV!*|%^i6X3iS>5O21|`1JR$R^Z+r;c4b$I&{PX!|pes7D;H`k`h zn1=j#z%m^2M%s~r?*K}w0A4?94z(5GV96q!1Q}f6wIf}4veUl|ad?#UwLyoG5Zsb8 zL<)*8+K7t>mwWI48IDja(j9oQ%CEO0B&@;?o*fGMLP5zloSM;A>T*w*I>ZnRX_0Fc z-d#kvc|tzAr-Gd}1TXW|dz@05j&SCI9^s2jnM0+1T^HgEQj$-#7jKa91-UmxsXG*K z(yl1f+KOz#eu4B+$kQJpOX_QM!;~RSHXR3TyvszoG#RfH3bA-dg9~q(+TAj!fN3&3 z;;o6K5fpFZl{a0tyiRCHB~XZ!N2EU9LA;a1$6PTxu@97o^O$x+V)FGbA#NlsQ(lJy zA>s!#;Tb@r!N)>VD84pWK4pj}*IT`OIkiQX9wD}0leW&)vPf~dmgZukEY&$tRvhIH zlt_!MDt55OODG6u8J<;bufr*!!hnncbmCH@ZWZI;m8@Gol$5f(Glt0b$D(bJs;l8g z);^r;v7^*oX__S$ybp<$TZCu08p#q5%hxB3C>Rb9wfG(B`0k-iZ?&U!s3$z9FYDILCWRE15U&r0oQu7lfY+@T2mNkC!Zz)+iAV@i9m2SjcpS4^jqvxIT;_W{I#W$v^0~;#I0e=2!)c~)O};YP w2Hb`k+!nk1UJu)V2D}|>Z)QruFLXNG+{8<%lmt=|NJ$_ifs_RPg(UF*0TGwV1ONa4 literal 196608 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 z z(emzkPjZ&IUZllcxz>EcisxD4WhYmN{8RV3tw{ChHkwkaT!fC7t*{c5xdXcaNa zJI+I(LtrZ3sKio$cl9@T5FEH)SQ%Mp1P5|GlY_Vr=o)b7y*y!FZ)nxDb8ACo8Q=@V zegsYtbfa7x|GGCVyyzT z!2F)7gkiAd9GDD~z?243*c4W+HON){ZNokV)tlJP75b69*SaFEP^r5}EsL6J+c^oyJ+wE5hvvrf zQ+O8k#s=xLLg)!FywFDip{kY2t2((+j3&@_5?bSeiK0bzN+Dlfn_l|c3J278vt5<;4vrFKxhPC<8$ccFsBEMQCu9r_Ia3D2er}67z^grgU z1!9}o^^v3>`4VCq($~b`jB2IlJY7hkgY)Uewk>^k9hwF5TWa;;#rY;!?vIdNCNNOf zsIXEUy%i4Rb|lu{T8*c^N$_kEl@;n}9L-%yi!vHoW#@QqFX6c>2y4tT=Bi!5a~C3? z*h}4;g6h_YC`|*-TO;UuL~S=t{O-JC_HxpowMpOo2~tBz9$2Nz6xOKbt)W%d#|YPM zf);HkdrYfw15Z-^8n;#rN9_V3mfJ=A_f(5YRr{(WAd~4pCMJ+clCV8H&@`Qp$!k;4 z#H>*9-eUbVBZtSiLu?^DJzQSYvX0WlZV7zy7oD0u`YdG3fU`&DQ7$(|d zRS2bC*Li(64W;&NKEAi(zZl=(FszAj96gR+DJqyhA>kn@L6f>jyqAPPc1r71(6ca046L-))tkIo-YeGNt= z;S4xI)@sCt5AlRO##>NjoSGtqQb4pXHZadAi|?S#;RUX6>u&W6c$JKS4u6=#iQc%k zc%tYVbsjW-U6gB7mlf;R&sT<0-+;3a+|c`vK@1k+NI|+w&9&AIt^w-synjY~?tUXEk8I4{+>7K_SC z_AuWtt<>{ojZ4U(q#_ZL&bu8qh;uR`ih4x-TY|P*K!y6Z2wzy5d!&VK0qkv}h6J$9 zxefotc)K=Q0GkRtU;%8?{6JGG2986de(dC@$sYXz?8cHC+lq;#K$5fzaGU&XqR2uo zSxsF%!0DxvpCsP|{6?B(T8g%68sP$1u^5-W{pK$QEY{J1G;{Qv3 ze)Hka@6uH9N4E;Q~8enF$gPE}( zlsc1ww9S&OzZ<+%t?3*WxKr4EE>fzhTFX}6N=JXU?sRrT(iD(_q~L`N5W0{Mq)C*% zLqbRZTVA;<)OvOdo|Veo+ZVv&5zNKfFDVLqkpe9o-??sEnirZxtj+B$Z82?VdgB|o ze}d=8i<0iwU`3VnS)n`4#f!|$$3T-ox;zUcvfVd?BW4yzmpq>f^r6q)@UW3;aa7=% zo|Nv8K-mtxGr6=rVLdJ^R2J_eCW>)yRj7OrXJ4-Pa-me{%nqXYU^g4#$#RSXbVhE3 zDnYfeOy_JLuMBV3u0X-1Qt(|cQ7x7XqnLeCPf?!v^aJT4h*8?8W~@EH%KH z;7Oo4+P(}n?4t>~D@5E9y2sZ4`G z>f?E*W*^bR`tis@0>32M==<}Ilke^-@Qa-CGX0INFA`udz&rkq`aU}TmOv7nxMYCy#OMZi|t!2C>f-dFSS5L;>^hF0V-t` ztP5HuoEf zFyXoY6Q>J7A}d3HiA{hB2=3Pqw*^;jgn@7x>oLKwWdt0Ed8I;R`sDPV%6k(N55AmS z_&=KaD4%ldUQe@5UeCCk23>&7 z-hVmWizzvjGltk*zya~OcKwg%nvPt+2F@-%$-vz>BjHX8aB-{T259$PbnnAG7w&zK z{OqexVzB#M)zj9w>E;IpOoEKT&j0r22MgbUdHYbI%{KoKK$G~k@ag?GH$TL$L6TmE zGwM+!hOD$&z6Oqi$+?>y!Q_d&g8k{2pwhl{!vRTF-e^y3PdkI8ZRsVj3rlS8YELf- zLKTuo;pSJtCu|oH^Ottf8|;&>F;WAgTV+>Z)Hf0Hsoq}}C|D$aQIMtB z%i2@C%Y%JwqB6XJBhR;OXXX?Hm)qVQ7(Q&LQ#|)G%sIiZ=fMoQ<=LdS!>%P{g+YVq zBiw!yJyRz1g-H>D-FYDjm$LPRTXEsepbYJ-JN}j2O!=K7es)uc0Nc%(%zZKt~Y`;dO9*Qnou`mr_gsw{M%MU7w!Q#;gK!gU)(n1f)TEKRYxxB^c3f2>r1Hb$_nt& zsS~_@y{p@{h#a25BBU5sjnL&GY%2}%AgXs3=jQq+JM9ctuvr|(^1d2MVz+Z)=w3S# zg5>~7U%LJZyC2J|+h<$kGaOC^*-o~tc?E*~2!4vgm=CVU1z+oM)3qb-#M`PQ76S1# z3L5@{Jk3V>E0Dgbe$hJi1Vr}0QIMU`r9S`_Vo%`WvK?^f$6i8fAj8HKt<=(}o9J4> z!V2`Qav$~836A1u72DzgnML1pU*X}5vcd#PyN~`!Pjso#SX9FJ*RZ#J466=NwCalDms00|TAKJ{`{i^Xg(@PyrXuxA z>V~TCtYG|aR)%b0l+i|I*sL;`RR%r&M`Z|9hJ`4Wkwa1LB*LN?)Mexc4LaZI*dFOS zKf?CWGKNvIZC^0qfD@*WmF(=#IQE;ohhaT#DgZ&&WZ4yweiqEE;>Jaj{!n9WHGhr! zL(T7OtBG-csN{_;gmbgg@`YMQaxlwFD*FR;CgF4dy+dwW<;Z&wmLqm# zOKyhKdV9}#as#3!&NlS)(=tx&RIZ{z@b1E$Nay1j&tp-Ck=?EL>fQ8o9ydzyem6qM zjS~t#9yxyc_(#W2rS>U9BcH=REh}ReP?b) z{%O34cyo=s1>J$SKxyhH;Ts6`Y(xWT;y{VDjGCC89UE&2X!uR)5r>KDGSLqC zOq(yItvq!T?F_iO0j_5Sgu+>gxg^)I!d5}IuBXuL-7J+bF8rFvZ`7(y<2L0r@VrF1 z4;u<>rmby{{5z~=pX{eu@3Va4;!>Y7TT(8(ZhXP=t zSB+lMfI$Pv=J_rKNv-oK(@`87$Vqi@5Z&<{B0*O#-)V#I67-G6@Lvi>@jtG_IfT_- zaYq|YRFis~p;ijy+ME^a>x0xvE2tv$2Z~|pQ`pX+#92*RoV)YdIg z*W#>V-I!1cLJ(F3$3rBfgK`h*E3!C@9g&+ zYRW|QsQWS0o!3uF3f->Tlo36-W%Ro?Tc^Gx0|{}jW&%A`C9IXgZf+S3O$mFD!mel;ePl`)={^{jw2Xp&#x?X-z3m7yc}pNm zISJpv)EL~Xg1%RnCqd>^^KOE@X~1H}WoGWj+z}DM9XB6<&=_u-6W9#wpODi7>Tz)Y zT)D(pv~-zlFZHu`AuNIik3?MKb#qwxC?xy=Tmk5M{Q%+QFB{GV=}HZSU(31PDq@{+ zji3FL5-?xjmSxrQtaWTFK0V=TElIu!7ERS3(`o=W$oZFo%aju)ubJ%t6lrs)5!&3I zgkPX-m^n;gHQf#i4RET6t>ua6mHKp+@D98Q0SCf8LX|c{AMGKJY}hM+jZ~i~XoZ1- z%W+RmU+W1F4PO2DuP!$hnu#Fi6WYZ#sgz7_-}DZv^MHp0*%gn;YMWaM`WFSuH{h`P zQeZR(?t4d*m0u&H5cs+YrMVb6)|G;9ptg2#GC`u(IA3PG$D@eBNmTEY#+bMyaRt-@ z9Ny)Dg1hBWYTOl&5G!-(IE6c7%Itx{%M}5)zd0bz?<<5{`Oz*2Vvm0W*9~b@dw0^^ zrDo!7%I8F=%Vqo+mO}L}Lj&ak+z5FclFfoe@$iFIuM*KuubIgEYe>@beZwtQgcG5# zDUOikCGXgkHWZCsN9G{}&;$JIRC8>mbCbnm=l55G8?}re2XONaI3a-rOKH32i16hC ztSMLva3t747q&p0x8zyOmYjqk(N8ImFq3bps*n=R@6*G~Ls$gHZ@y^P2M%X<1@rtf zK^7<{sQYoKT0rSTu3IPzGNe!jU#zTp-=ioN@b?%V@q5MAuI=!mEtYGV1AuhWi138# z9seJD?;aP`b@h#JV89UuL4$^P9U~?tctOzw1a$@&!~}2@xp_wzgb{%b=Xgm##||dq zIF0RNTGQGmTDA2_^0c^5U04`v3KE41KKN*P#tlNmDk?%q`_eOD+dV=g*pUiXotun zR_Ai4&83NB?QO!4pjRM=BYq`=FJ!4Eh{nXW<-F00l}S!cLt4yCgprb5!i-$0>Zfw8 z#~3P1$jQkyV)-8fDiVYehrkgjZQF^a&_Lre46ZvKL#(mnHzvITiQN`@sl}D%9)6Ut z6#cG*u|lX0ORsO}4>T+2>{6~Y2;bqY5#y@c6^2EDbQ~yTA~?Q8Vd*K|WtdUguBUMk zBVd>cwW!gL@z4$^iHG6#RP$Q;KG$|KiE>uTJfSG(JE!J!Z*h9}NNw>6U=Hd;Qy znhWo!LQT`~R(z!ttAV*_66X*e6AB%jlT#b8$K^W8REh5U5T^kOLdFS zlmN(4(#ui8ogO(BP&_9`VuXJrBK#xp3HlJ3Q|-%8Lcw{)ySLxml5P*8we%x9vvAWV zK$uDo--RKXO^7Bc^;r21nM%Gs_PTsq-yYV0OZjX^hHAdS)`IudYX7(*{=EZ~XvfSB z+;|tWw!hbwuG$6>u$!1O+FLUC#iyn(!I*|dR9na{-izw5d`81>?n8VOyZIs3Y?Tg^ z!`>h<6jrrMg}+v)H43WT2kqMUh5&^sD0xY#&!R#pp-3KpaVL9MC{QsBn&g?#0WX$By%5VI+w{ zsO&dfSOP^#zrfN0GQ{Z(;whYUh^Igyj?B-;iYk%>p|JI(rd)&c^r@sCp@7SCd!F$4 zF``bwDOVa+G?Gj-<}o!d@+wVIH$IIV|HPLeegB>;#&rrp%wzL#+wT@+DX`w|fSV*7 zkAcb~(1p);+!+I^r!;^k)=9D)Fmbi<4}%ig(Pn@Moq~@H+uzWb+$rsPiW+@grwc0HI`E(cO|BOiXnAH;fm8*w{fc?C!*B)Sw8Puw$bQdW*Xe)) zOZV`Ll);8mj%s($+Y@fY;s)!j19W%GettpEyQ3~_`;bLKO>{Gh3}8X8Cw*>t6g?lF z0{Gwz?ML@zJ2Gg6w7u@SaP6ky^8h>K)`Bs=awR0)sG)8u&a6U8Zy^?RQG2C)o4kgC)lKoq&sgy3Gf5Uq(4%2xl7s6yz6}MfdDXphl!E6WH&ir(1do%Fy@8y(P0Ug_G zF`+=&M>_sQHhdWe%hErlV{qugh7E?=EYD#4gt(GRn^F{{*L)NLrlVv3OBv{d*=PV@ zcg~=uzK2Nn`;iXMlWzQokG;HUiR17p4M|zvLkYmdQSKj6`=k~tb&+}bMkyu~<=d(u zN=v@vM9CJq%4zy0UP6YcPFEl|l>(AfaYP%1()k_shVh8IvLxM!_eAKmS?tB;VF2!D zFIE__bI@-?Z#n~8CdZ|xZ@W!O@OKQVJ%dhaE%JqLfIyYRiQpf>BjQB(9suMgF4OQ% z9#3xPJF-=a%+urFGp6Q9Pta_r*O9I^nrBeUlFESy143go$8$u1f`~MlXL7`RAZ)EV zB8oDaXK`G-LKJN@Kf)3B1CeKb6!x&*94Sii)*8(ZbMGJ@j~JsF3M%pC&%TwvJjrOD z%n|P^h{;Ct6pr|_f`~Jkr*gz8Ae5-gG@7Sz+!2Lnw9y>L5kFB72}W}oM?9q4cTU0W zBs+)6k_`}b#l1l%ZQ`gj zshYzKsf@!+X*GvNser>Jl99s#DTBl1l8(dGQUZr1QXGe6(j*QmBrS*4QZ$Ex6v^Qx zNzGxc!~iJ@$F0a6>5Dp~?>N;8=^D3EWst6LE7bw%4Q{1!m)f|Mid%Y_Td9<#qufe` zD;?(6{bcV`1O9+DJXi(NkwNBL_ljeP029AH&2=Q(DBI%!rt$K*-J2}2?)^d?pT z7-DN>YT}qBu!#@2XVDw&()0MPd)7Xnq^CjtC*t2QhTP6;$PsfKlCHyDP+CDktFanM zbY6#tod<_vMf{q6LK$>`&R)l-XG@|}qAmwTyzixse+yV9u1IFy(RBDHDU}%R( zJcjHjaz6_?Dc;B7A*1;|V8$y14;#%(;2fqnV~yrqID-@?hIS|ylDfb2MqrB3jFpk}5ik_x zsYdf+INws7(~RaEI9oY=9E1i(?NBH`^VGzlR1-CFO~jVR zr>^^{B6i!m99!u0b%?zOTZlJYSJ5_3Q_fQZIl!wIY9W(tIu%t+j>O$=s++!ADE)}{ z1-yoKZ}QYoiVClXxDDoi_yRkf+T_!wGu>mz%fT54-X7^`3!-S(#zcx?c<>@(JKxlO z5bun&1$bV^5Mt}0lU}A2KeoRMIfo^!-l7~x?O zQBS?Bj1@nXnFz8cg56xU5&>~lj^DMziyXr9@`bw)&xN}Y(19#J*n0&R?k3~H-PoS9 z7z45QNDzZ*Ys0;+=xralv0#F22y8&Z25BbF6({82tAUUWUj0zPjt4*g4msM5XbYZL zV;URZge_)W;tEY|dR{(y?zz}<4{Cw%F^;GV>NjpXlDpiGLTVMK(GTF{0cQe*A{N4t z;0YbuVRa$dSc~9p;mUxd6`C!lu`O}|>-0U%%k0f7T1vNt??;nS1-OS_#+vBh5jYMW z!k<37CVBSHx8KC{S(uI&wuH%L9WS66OMiWb?|l^tqslIG#03Q*PBKF@wA*M7bA`z^ zd8cI-@yD(X{vsuz4zW8=dXKM#`2De!Qk_7n2oem%wXV{n9o@e`e-);~=}wfzMaw{0 ztcVuvBja!4N_vz-^(Ys_wx3^jVY0oU0}J59EVVGPCfKnF8fqQY0ZBbu-l44$tZlqo zJy@}_?Yw4YoGF>k7AirLV=1lD;*_iu-hEYf$cRfxkGg zGZYt1+L1LoLlH<{iw*XrTM!bbr`E5Y*czmBeIgfUt!H_OBO+Q{N_!|KUFJ;=L%s39 zQIrbp!%Ymv8C!55<_%aaD`h1P9v@5jVJyv#8G3dJPc0^>y*E(Z&cgV}lcHsXo}n{Ynq zJe08gyR=2rYf;bq;|Y}sIY8KR2QtlREH4iFjznDko17;51{PQrb{LL5njA6R(-8F>Fm#!O3er9Nih{KPiwOxnVh<-DVOXhsIE~~`q*2;n z#G9X+RLG!c9ING(ZcB(#ixFj4_ zj1f9S95WZ#n!LAT+ANQn-U6UNkhT3zNPQLT&CaA=u_tLG)}4UBIzTq`xfbD>2PJ zoG!04xj}hqMqe2%uWq=d4DW z;@>Nadl9jN@`^EspwB|OjV4Y<@^~|H3@T^B*ogY!R7sD(6W!W)40;wEXwgWHYh->t z*v8m}I$D?~eIHu}Iz0RXfV(k;2PtSoeJf~jM`jidSj<6~A=0}I($k-#Vvx<&7KDR` z9R)#L1CpX#0#DOqV)<3x6gdPll!H3Z?F>nd71YUbwS$rqx8kj%&#ZH2i*rFZ0fg(C zk^_Q?3VKA~Jt!U2adlr3$taL8ko4zIIxRwa#!x_9IZtXim`1jGx@N~?dKpgXZ`tMpHG-r-E>6fTWy8tsN|6l@nL>w`!>ML3FYVb5xP*8nV?d(u$dinNjc`F{N2WJS6NL#cn<*m>o`UlL z{XsS+yW8=1j3evTBD031yC9>4QB?K}ffA$u@jh95h{_Ub%^Ie4J%rWcEZ9`8aR=zT z2tLByPBN&%kOTB-AcAuU<6RWvc#@*cbNXUl>WsL8)VMf4EYOJbfi%a ztC{cPFC^ly=^&3#4XL;6H5&VqYAm0GB8O&!t@ar_U}nh6b*zhYFL_3_VkJ0)H3{*X zl0lUt%_*jSUIkxlVp+IDjbKnKl=h5T`Vt7c>Y0XA4Z^As0ABW)&$tkI{9L0O(N1u1 zP0Y=BDRzb&eg#L<6*v3G^Z+0v7wr$(^`nh;eKcMlR*10R#8gI+O|xKC*y1mqX6qam zaXJk$jGa2_#E|AZ+LPqo#H5QtW9Dt+=kk7DxmQo@cN$gv^%uI3M(Q#lRDtUZ&^jutxOp~EEVy|#Lm0DD z7n~f5z9B1e#~^!A3&4;Y5ljbxF60>@1@VrMa z4pu_N5WIaB=z`M3URNb3l>{id$&eJhYtqF8ohxd!U*jUkbHdAC0aBLr(pLJP40ykVZ%@ZypTE{5FF-5+Yj+|1)Ixr7)BXkbkbR2ysszoMI{GOK{$}&ezsC$QF*qXJ8cC@7-kQz zMWlP)n2;4!e_>M)7Fk32X7iQfx>u*dtyv{zLi%{Ob4MrRGhSp%Wu;7*+hjXN7 ze?!ea7n>01ub?dm_aONlRP?l#{yX@ah<|{Pi;7QrZn7ew$Mlx;781|bb-1V!MN=PS zEoMFYk$XHzy$}%Nvf>!XAnJPpTN;I~`+cImn49F@a@~7Jkqt)bQI#P{tvs)bC5lf# z3h(FgKITplsh=QB{7qh)(~~}^xj&JQ@ms=BK4-8N!i6$A+^LXU~yA+x_EjYHt&iv+rRUAr&m!vS0Ja~FT zd3w7jz49vFcAfMbAev_F%IEBt@Wvukro9dg#Tw{0yM`eozUiS{O%GnvxMiPdvtOF< zItCf+ClcA4N*3{u@Ylr88}md zf-H$gmyh94?4XV~krApWkNOH%N3G~wv+w|U2z@3aFyaJj?u^`a&Ak;OQlGi!;jcTO z2`8%j(lVNfQ5+lpo-|UdW#%H-A@zjP z3z(1F7l>`PI_ayr(D)`fpes44cWZL&IXW$uu$6@S&-)Ps7F_6i)sIm$?6^rl#|)r3 z%Gqk62yA=OT=xb|?RXDEYgUhylQ<~A%BY~RI0!D(xkkWlHT7&Izn~AKD)`b7G1a(i zjeSGpTYrbViE^VBLsZziP>W!@trNqM_0Y2cy;BWCU7^q^BSM3(rr|!GuVn={(XC>i zij4GQ9w|*rS+zfwUSUKnmgiAXp4~QNsl0`V!$Eng?K(0J7Z_0)9R}DBAP?m&F7;F3#cGLgMV_wv5A-&iMCs4#l~0 zNW|$k^{yau+*0Tgac8OVx@c~sRm--&hnppdvueX#L6Ay@9C@MuacAq?>0+=uMdccX z_hPX>pflnaBzGY%dSsOREIKwy>3lUM1oi)n8^bnNszdK4oo{xkCQ@ZYeaCDpMP(lr zapGOPQyqct3HKy@AgCQDSu)1mNoS~Ty2i)9hnGu+CA|gpUIu8=ghtI$sMK_2IZg(E z3~J8ouQoe}H+P1GoezT&MT5Heqpxjz9OE&0WW{@P_3FWeX6&;|FY|J2nQ{mb#9S0R zs`uKYaLi$aAoSafDnzBFaTx!rLhM=^hmt+ttV7RoMvDpXjTc{tZ#qZ-?r<~m^b>@BI@pBnOXUnKJ1#Grp%AnPH$VrH|?koCizTy{kMCk;h*(Q zZQIGM6&}fP6U`d*1DWp`z`~0jwE|$?6 z>UZ*i;~EH{+`f%oIlo~{H(H@M>|8KGlm+I^YRsx#v9{aa-icNbI?8tYmKb$_wp@Hc zNIs6qhoG7DSeR&@3LabduHKvJPWGdS~^* zV@q{c8#u>?F_g;@PhCS$Yu%^Vz@_~uN0y6vZsm0CxZWLc{7omMPw(L4&@68LP=%G# z3y$aZBN97(2#KwWqw2PM`oCzukkdya60O%p1dD*K)aRRJx?I8@ly+>t;8q zIyFoCIoU_8n}c4ML72NuvVaK>*T99&T_Fu)=mYUho<`*gPvpfU4B?jrq~{O-`yc3g z{3HYZ$4F&ucM#<}NsIAZ#C*6++Q+@&H*d9^LCNcp-;%qNhTM((8lg#7PY(!MaWeDTz=bi~546 z1xZ-RcRL6Vjew30PVEQ>aVq7ZpU03AMM|aPPU)$mIH91oO9@L4srAr9YFDHaMMx-L z2mT)Kg#m-5qVF?E(KtK@Dys7HT_JL$&2D;PP?1@IY*}JmC&`N(T10&48LNv@%wEzF z5na|u`E}(d`0hnCFc;F(td(Q7& zh2IK{<||qt_=$l!g!I_-bl}om{F^-(8Esz=-Vkg(o9_yuXX=OQw>NG4#5$fW*g0Zn zz>c8{c7&uu;_M5q!v`CEq3908P%Jt^uw51EBJCvf2$@EDo|-wS3gQz%+w}s^KuC`a zISfZItHL4)iXHIGWC~s%X~?}wdvWykP>1I&AUr%G;rY>>5hN&$KZ6BaGz%q}?rdArSEb;=o$0k2>o+(dGY9b}X=igqNjTIDc0LNS2zpp3 zmOm#Hf#cMO`UX^ig-&`G4NDrxMKUX9BfqqnE|c5!bMR}(y^f1+-z0ANUzwMztKQf6O6HIvHGO4s)IYq^J!BpNJoz zt-3wDN?-?vi0x}Z0?lia;KmmdhtnQEi6#xf$>J%R7RJ9>nBvmN5BFdjK+m@U#-d-o zuO^c8T^o9>t~j@$Ye%#T`p~+OIj)mR>P_}GC(V;UjMLid4Y?g+I4XA*5mEHNyz_He z1AcBa|J+b~3tyB!2QE9J>0>V=OCsur@bpZHs1Jt4`7u5!^Tszlsre_;+<$6H?QO1n ztOTXf`v{JW}?)#pw{sXHCvq)3hrh8j)iV~Qi#GsGyKhETh>*#c~F6KF9H$V zO)#`zA(T8tY`4L|Z#^qwfas1Dy5PgMtjviCG4T9MTQwx&;gR@=C1n|rX z*Gxf&Z7W;0-^|GuMKcjiP^!9palcDY|NBWdUJPMOo{)k3WZ(X4MoKdF4 z1}&*+lD{OViPP41T_bFKqc@nen$Q^_of$$uGd43I0|suWv%0#uG$3elq$hukkxwf7 zn7Bk@cQum6^{$@xN8RjsA9}Lg;&2}mdAF4xR8nY&l+8hCeBIu*%A;gY*_wn=k^S> z{hj7d$G!1k*sH4=s#Vx%kg4rZ^`4=^7Uoy>FWzuAe=;tNHZ1Jw=4<2LaE879#;25IV!v%v0)*-*mc8Ecm43;oWl~j za^(Fg{H0x{9H|FAV-D9ciNQPKG|ue0__-YhUzy--5a8+;G-_i0ARdRBmK?P>4QJy} zo4w7@+l4thsfUWR_u7M?hUuS?%^yaFeU5EJ=+duIH3SLoG(4$3&4S_Fz>^B0MiNcA7~JGAE|?h=%E7`oj9oM3MRv@bi_g!4u!j<*9STk zAaOjk>@xX8B=w3DIAToMMIaoh5G)@3OX%NA4GPBNTxb~13bgLBR*$FqF!u~`eHd{9 zk`}lTl!e#oY$l1>@g_lZ^FMJZA$#40EXT0`%|A}jO@Ri(r_Hw`BhIw-bl{2x?JJZv zCkyeARdfJ^pGzC!g<%LDL``{cTdFF~ z`7Kgna}S5!@8PQ=PKaM@`{(U>JQiQz1S}HmS>EW4#-Ky9N)a*|b@%qXkEe6swI!TB zB0U7p>_YJdw%ef(J5_~hxCLh{-FQ>bQP+O>FcBS={zA(|BEQHj?L2}~kq3JmmYs$h zIG(YZZZK6GZce!&ae_HUfOs6oh#5Q88P>06IUZNl>Pdwxt~$`RWKwg@4H%WK)E#u2 zJ=`)mXh&)gF4$O0qHzra;~(Fcqk&_43e`5~aukCp)J>RnykAyoo4~Ba!B`g4Xaa72(*2)XmXL%i z8v_GBN$7>G1Gct=Rw#0Z+|3)%H`yu-K8b8}TLOFDwKw~&08R3%{7?gp?c(?grS``| zX_n95SL}@z{!$4U|1MZO>DSk%{RlF)T4e9OSG5F*bCP&WmH= zy&avvh{RNtI5aUx43}TSY6x+z0}<~z@O~#=DAdqdDIQ)6Y9eWgEenF$pa~k?lmkx< zWI>a~RZKr{fE{sSFisvKe$$MLp|<8*i;V8+(%i2-opA`ts}$;*aCB>1-xcW2x+x(_*t%FW zqn?h46CD97)Hm_4B54qoID=v^c)U>jl%6>ia75Y>fY#K(tQ#ZjhK`B2WykO^I{JlK zwz|K%#mP3)UvcH(eYZHqW_ll4UI!^GF$@`2dd~0>v$}?qx(y$>psM?Qnw0+)pQU1| z8HKAoe=WrewOLmhvIFf|oekL`VdqL4(nDRNN_##S<)&wFQLN~Qww+^EypQ<+!-H+U zYJ7U0x6}0QRp-3i)q`t~7i_N8i8!%<4AqLdu$~o~myKUx>O;s#D4akH8r1L?bQpOI zn&vtUo)#WtYgvNFk{=*#Z8L49+vYN>MdPUJI(+!BJL?N51mQ?WsA73yx8q`R&4@=Re+bdcY;R2DJ zPr~dW^j6I|;c@#ET5m&dOTO7{#Jv$^q23F!e) z!HYU~fMT2!d11g)sXo}J-WLa&@P2nk#eMESetWEo&?u){!GpGpCTu> zyRicL0IKw8Bm~tgg({+6hvYdlja=jVbRJtSCx&YTXfBAT4!4Cz0m_2$0u)8y{=eqG zfoO|`sy{5M3awf?H`38jB<_-&$Nj$HQG6E?&vs&YmM29b?uA_0925eor2ulGk93~9 zO=9(5%z+adh$qQK@&#D4KuWFy1&wb%55UtChT5>_=OBfEG%b5DrYQY2zQ^52*v~$hz!2a`;5_b}r@C$z)x~t=%YXXBxNC zL-Wo=pLME_U;?+&`MNXOM-cAA2Kul)hv>tc?{#iHMZrGg)=2vB+uX{Tz2>8B;#MAq zKlo^0;8xDzd2Z#w_V}<3KI|4Bw#J7o^I=!`u#0`z`95qiS+g3QGkvIsxRpn1EVuF` z+{3LrT52Edw~*g+ICu=d@L8{ME2q8U!@l9ew)wCx`>;oS*uy^TPkq>DeAap&!Db(} z(uXbPRvz^NA2!Q}P4QtL^;swT2*&%cBYfB}AC~#BU;cvffv5OWZsi~Tz=yr;vtEF; z@lX@0_rvj?YVWDu7afkt*HK{(bMg$b{*=huiTs-x==&UW`^IT_2gq(hegdR7H01T6 z4MR!;uCS%?)>-(s_3_W@vNIl-@~#XAFt|EaKlm{^@=E@z!xCt~N*1V;3I%W*2TPJA3d!M3>0#y^|dMf!f*e z3YaaS#C$dVj>J-YvaUGyz6SqIDqNeS;vEGmpGr+isr~2hthyu1>O7rx+ugW_f~@ugq4XYscVi==7kJQ~ z?7G;fJ_r1CFCMEpOfER{#+l?b!t2Guc=88HYAhiCo1pb_qw(^Tv+*oNr`=io-yo_d zqBp!mgx?GQ#v_D3>BW0kII^Ohn|SzR&Nzf8`bi4Za`=+7fWlv=@SFPyf7#jlbGdxF z02`yvgKm+Rj`&AY_+-K-dhx#RtDU{g@Lx^-_ub{+PkSqKo&!Tq`+N;{Ub)mxBi@p4 z+(&%gnBvK#e!`bHpZ11VIoEl@tDKP(zJtR5&>P<2sKB<0^YG-`=-<^?#5rFGBC8b_ zZ=LRaNVsD^S-ZKlgse_(%^>Uh+>ok;{HZoNg=rLZ>cxqwu?JQ?E$>gQ`1b{ZQA z^FP2)5AX=l%zPD?pC~j}+m&pMcHT#x`^fVN#q%6I8=DAICS#}*|Kev#2(9y)$C~WC z;;|Mu-+;C87KNIDP`Icp?Th8(l=d~?#wxt0QsmMIqXEW|b=3JB!V&x-L3#LlideN1 z(KWE3G|i+abra?U^OTdJ2%xGuFY07}}&VIzMTASRx?snF1x=p<<22Hr?bCY~;J0zrl&A63qaG4wIF^7X)9xs@*tU+30(qHX0?-tC-(wXvPz zHIm2cvh!Dj=_ZVtW6nFDB~0{RfVqi_w2rJ8r;QjO?l1pQhQBB1$fPKhaj$ykYJv{T zr`*n5pY<_rEhFqaA9g0JjkWZFXZZ)NJJ)c=7o8)?=Lq>c37^JZvV9LWD&6oeyshtd z&~4us^ENz}z>|9S)7bK*%F-nrQ*0XP1#WBHOLUV#S2k!1E=bXiRbflnP_n-@41DlJ_a@jXN`}jC@WWBk!j#!Fw2a|D1cD{4KD~Bk8x@WhsPx zTIQch_9tZuMig65VjgjTSl}h4b5^qKei}?0$&=F0zwYeqg6%rtUI5FMlXwo0IakfU zO$Rvt@ArRJ4)neg$cA(TGA+y_FexxgVAjA?!dPMUz#M@&1#=1JeV9*SzJ>{XH;|2l zc>rc6Ogc;fj2WgD<_9qQVNSzzz(_E+VWR#T$fm-i!7PSZ4O0nI3$qJmAIuS$Q!tlc z-iP@bChEOFHW?-zW;Kij#tQQzm_snfU|M1R3eyF{t^~4SFk@k+!pwy!fGLC71XB<5 zBba?KM_~R4^D2!0?~9_9DdZ+>Aoeh%}qPbOM_w-)ZnT0acA z?{qR2eI2N>HzzBH_VLMg$PnOEuYNWyxN=b}oXj zWRD+QkcMEo)J%O&j?CR>pX`Sx?wr3LC8f{j6in-@D~bdY@uQD;+}dOxkw3lOzf9>|zqC};`Ct~-T?O@`WPLed`!m|dk^ zUnCTll~=CS>I~UwdHTiL@#E*sgJ=w!Si{(~Y1wlomV`3JkLf_*$$NvvQe{CTiz*)! zv{lunO6|lN3b#?f)nu5+G#xt%gKI-uTFs- zIP&j=iObZnHAN-(Kn=Lzm#^c14ru77kpVL*FjIj`0Czv3V}eCA5vsJPqJ}IF!)Ooc zSOwBe^`$~&EED!jK=N9(KQJZYiQW^3pM4?WSQhiElnju}LERz8Pd&*-|WeLw=HgV$Jc~1GM(~f79 zca+cEO?D-(b+DHUCJO*dtr9Crw3Ss#hL@ICn6&o;fB#fmjHs&SR1j*YDce|OS!c3n zWt?_drMP}dRq2!>%i5Y1S_)NJwB9teywYc{66pi}Vdg5>+g8L`(b9l zJPZ>Aa}P`y%mkQt7_j5ND~MNTs*X+iEz+8Rb_u9MKd~QepA7W_M`8T?iRyXqgYoYt zjv?IcYUEQH!Yq`-RU463v(DSUG_3=^0{I62{V>q3!)_s5Ppb~oIz8`aiYh9qii>zv zW4nHr!Zw}Lv0n!1*{6YeHWeoDwvHuzi+<&njvf0($GX4Pv5_#zU+LI`T{?DI3GoIkXJhqj^zUWf&Exbe7-qp(JsUGp&+_imvuC39?Dc!~ zECOcM2tCUmu4mW4uS5y++QWMGvxoF-(L}^6Mi13ldNvNGL91sq)ATGRcEcvh+}I5< zo5*a4iQTjzR)(=L8#a-N*$^v3(8g}iB8WDIgIF2H#%K{lyMcfVV>b}bqe>jsy{coC zFk`3V*4B9)``!f|d*n48Yk|4-9cVI+rLd|?Iu`V29sA^>j+tNAvAr;DFk^vR2ou$= zV{Zcf93}>|2DtYioE`8#4R;0Me(;8l?fMkF{*c0+c~i$ux=`O>r!v0!mW~~ts%LLq z*0Dwfm+%)I>zScvLBO%>l$p_3V{oJm5`~FT}#Tu*)SIFm2N4Y4MS8pMRARlKx zR#ZtwEV68#oo-q~#=;$0MV8qx#bvYg)fO`46>#J0FpnWJFedz|AhUV4UR+B?tO0jZ zH5tqj*O)A`7ZwX-s>q&QwSkQ6k!C8M4Z|IbY5$nQ#?I8UUnS_--(ZZe+mrO{0*n@> z0{$-oKal^#sd1U5NY63QQ5zUng+A~JJ(~;2UiQ_;*}zd7$WU;}+x5)wB>FSOowQ5O zE(3Q3?!O^yEsPb0+Q4d_`mM+xM?o&+h6I~A7GNfYsQOuK2GFT zuB)utSgAE_Dn^mftOT#Y!#`W`KM(s>*i)-4hE3&y(Na}xs=+*ZeNAzd#blaVQc=M_ zLHzGOsb`PC(2v|wlb&6NA^XRt@jV!_|Ne}goq&;lTGsd9B*f|2*OEPW^w1`FHJrz7&Ojo-dNiXOE;SQvboPFa38*t&b{_`RuYSfOlVg zQ~iHe9l-h{Fh~^~GDtl*G)xmdBqDO?uzRA0kGMDbzLBFwj~P2oJO2I&F%utnaMD8$ z$4;Iyb((LFG$5)D|J=Y!feA5{o+Eh zr!FZp8mPY_`@+mj{Svrf*Joxjwrc8RM(g8MFi9|T$iPDVKCJAS*X4dc7jPvE;ok-P zNWpvP3~$JEj&?n3havoZZ(&^llaVod{rcH73NcoK-(+nTep<3@#*bxXO)Dvx1`B@1 zEXMROzL^H?SIAQk@>ixN%sXKLPM*gwMiU#Np_vXrJ_iEivm!vxREhkQDHMH&_!D2^ zNxX;;@j$rE#Dl_9SPH}ZreaK?NgbsFPqQ~U9A7k=#5U@y~uoRByiH>N< zpA}83W<~3#Rj(&z_)$K_e4uBOU_9=QtC;V=ke}saJ=*|7_FrGqv){pxT`OTN21EAy zKh?7bV95R=;BOTBn(KO23PbqM0B_T1IMV-$yITvzWOkBkdZo zv=sY1C}WF7tkjkj)o9n4u$Nb25=_N{sYJW6th~64<1vM?h?uCBXoWJ9R^j+yO=x)~ zHhd}(p&9|(o>R5jB|dN39;EH6nxaxu#b#}B6{1@ynlOPf6^k^1(iT;gXxC#R9Eyn* zKCK0>_2rddR5CS`rQ8`iPo&0EI_am!=1s9^DHk?t5&tTrqtuf+d|9k9{i_6p4v--2 zcTW&l445En)7_mQ#Mv{4^v0aFn?#Gro8?Fy)rr*4^lUy1{X*z}0QOW_PzVbNj8qv6 zhG6>5ij((0wUZKz1%uS=(YUyL;~<6&IW>h-uP$4SA2xieH{quS1+)OF)c|VzBPV7J zl}uz6`1cS6VUsGwiV9dwv2k&69OL=ZH4nC?EdfS~l-2E?uU}B3OmV9$=_XnxnT!@w zjj2)q!Q+O-*@n#c85Ek*Gkrt~_B2w+$=xFCn_*Dxcomilkg;&o*(I3^b8_S&B`3>S zkUihe$kLKO-T+lJUkd;)dAR8-B`Frs^u=%`Mb zDyzh`W!jqRqGFS_6qTo>pN zrfRuyQ_lEukx~9k=lO#^+(WZotPskDGK&d&@z^0-*Oz|ad{F|G6bVIgbWyfT%F1iB zMb*_6z|Z=e>__pmDW^emn}4Tb3K475l$wyTROky4TOejAH6PYpFzn6Q(}yOpA1 zM9F-OhxN?8L!7W44hEhIQT&SGu4y-aXcUUtrw zpThnK<8d#Y2mu!u`h}`+9x*eni0mD|NMVK?BWqV+0{RI0O`kD~x5Y4-b`9aqgC>1J zHfvH~Us{b!TTHZ#M6+1Wjw-M(ZG=oq+Y0OuXcpvTvV98dOFM?sPA?(aJ)p_SGq7C* z^9`&o?G#QsgVWZ7#*n*cz_f*;LyJq0^P!e#bF!EKm}Mxqi?2qe^-Eg{s{n0^A@eTU zK^pKaj(e2iTLPLigPtu1)aNd_i*~R~n@F@vKx4?p9E{WE+(jEI)ADkQBifwo0n?_D zY5n4x$|fO9sy_Q}zL6;JIRAW@&qjlG{*tV_Xf-meAKx4nNqjTzE{o78@Kx%WoWH3| zMYM|-+|5^}_2Zk#dJm+q%-p-nA~YI&?jJH@pR^4g4cg*3zx>T%ouFN+PiHgZ zc@cT*dZ_wjZ=O6TF)i%{u;$_@=YHpf#lC-c36bw0FcelkKMX zX7m%^1km0Q-$J$nw7FQ%^lh7=$)LR>zDrpxXpQ~Q()sgRk#D22TnjcoVNET=StQzt zp;#;`sj@J=Wi9$nO#gs0nk*s!_R=b<)~_k&WteBGG(91jD#(#mg?S=IkxK1iQ?v+QpnAXJfhWgvnBYNhq5yVtid+ z#CfM8TnWPER2Nm2*OY0eXtSzHFv->CU@!q+JtnLcOfKjnhRU@SppkLF%*O;4OBI%4 zs#setu4h>ow2P~}yjV(64Msb-H=0UJpd(1(7Zf91h=&3xIasF@RThIb-D0XNE(0vD zM`n<4xv1A^z0De z{FKFPA7E-mHrqpRDf(gsU#ma?Fgr7il>ufvKA$Zo_tH#OpukK(3a?Y(Oh6<0gvo$8 zd5^QvfYd%C0Uuwu7z2dt?mj5HI{}w0S;)@+QjSkM+!U`SK#FH8@B~Fn>P#h5_(Fpg zw2FHjM%I!lEZXSE82k1m+6OQNTvN0b+0JUHPE1*calc5h7kTRk_tX0MY5n{vsx}m@ z!_-+cS%j)7s8Us|+A@VMOYpi?ZP9w|l}|8MY1%mD2@~oM%CHOv)c7P$sp(w4g5%aA z0)lo87Ata@nNV+tw)hDX6)p2H^H5-==BdW){0lUW*O$#UFI;AHF222 zj&Znv9pdmYwwJ@D%*tU7E8%bnE8uWG%j7VZ=@b|Tn7%lLX*o<~8V)nrts{ibVb=j^ ztnJ`1m9=u1$&PWD!wvx&vKO#DfD4x7upNNes9%BtS96%nG60QBQrJvDLrxBh;V^|o zahS;%hYQ*DUy*+*Yv(YHHF22EUgFTe_HsC%)pMA^1P-%U35VIt$l(H};}BrS25$yF5{jk$}2k zR#|1)Xj%)$l*-Mp*PxjEaBHg8VSKrR4i5AO6nu)OJj*Rqdel2m56{?IKAw2JJ?;v> zADG;BJlF=U4g_zZa)f5{IB(9N8D98krs@+gtaty>$)ti#m*`=Sh3HF?N;o%V)GSyu-J;ljx24=; z)zGc5lq#G9W2ep%Kf`-G%J+x5^HW$a4E<>TXjEYe8wWFe!lG;}3jh~nr^An68izR? zzc?o?=lRL0=0_)F>rd|fzP3Hm@>4bZi)SxS$857^xw5!MkFj>SfNh86XxAnSI-cd8 zdvnVdoA}0p7csTEgs+!ZcgpbrJ02&3^xF-5fNZ@3Uw}JqIvD?7ARN_wa1_24xTApN zPd`etY-4Oc{QBb+1cJssyokqn;Mxb^b^TxPQsFM0|BrY?0oMiS`T55yp$|Rffw2#c z!WIA*`CpK)UISdlNBx&s9Q^v@lhKC{g;QfCTekO4Kb&~w4Zqm=_R}SR%;Aj5bmmeNHwqaNW z@RWA?`PZ5K_{I*HYM25T{~z&eRB#^t#OES#{@?NE*9E`++68@EjeC*)KjIM$+z~*} z&!1OvA9~8qC4F!db~$iY0sG5uEByNM2?U?LefUuLL%?aT_Rr@${Q7I7oqhOF`0KzO z8h}sh0Qjo|;MvFh$EN^yLi?*n)xh8JL-<efUuLR^W~fz(*Q@55v7p z{~v|d0H^+>|8&K{ufKF<^x;F{mjJgMkjj&O{&i;){03^XyZi7W9{Yi_4#2DRU+}up zhZpg<4&43$ctzsQ=s^9_B>4INh(`i&O#|>+{x5h5eRvU%df++%`)emh;MZTiH}&B| z;V%;Hwf^~Z4Zuf@`>*~#3LgdBt^xQYz^}jf82j*{@XLXF39!Fk%qK<)ZeA6~@cB5)ai{f(nt z@ar#aYTPmR|55lT;PwIb*B%q#H&DE&z8m}SBR(a-wGO~<$G_pXzYjm+a|}2Mu)q4y z0l$IjXjdOz#Dn4fdf)joT!e~zW;^@JR22KmP z0V?b3hy&42_M@Y3?_V#|5RYm}Z*A7U$IsoZgoq+TW7ho{pO+efU zV*!;i)F|*?z`?-ZueehI!{E*a#PtDI2pA4n0yqS)3Xu3r0i^Y3g5rJxa2VX%0q+6a z4T$4>_A|iYfWHK!aK8n-7x0wgJ_mRo+;1xGzX6VdTTOiu)Zvx-9dN;{FF9j?h`J;tr}#VUNH)1W*fjp8{h5>0-h(#XTF4?)4fJw-J!; z_%2i2rGRv)?t6;6mLTdA)rLI-)Rq09q2G%NE!C5zCK<;)ls~*)DKu24t`9)NzUQl- zkYSzPqEJ?-Gs9 zkLINTXjc2tv=2aI^`q$?faWM@=$jNr4&xa^QY{MteKA8j1?pJ6ik2VcJ)1>et{{8(Ht+=}kj)9jap8H@Y{;hueDW0AG zhHu#FyZLHbeSEtWzN3Nj{D?2vJt9>Gqyiaz`zYh?b>3iLAR zV+l6hJwBaM_|rJCPvL*D5C6D-!*^Bb-T4spiZ35-DSTsq^ZY3NM)39Ig9m#23AV1i zn{S05-zBh9e$@8iTdl-*6Cjl_<=snuG{l>J^v&H04e{w1faa(Y&qf6{DPgFN-x?rH zr$Q?M5^pyk#bbmZrLt zHt6TI;n^kR9T2>+&FDC)ZasWqA&fZ(57!qP~SVosD1AOa<1&V-llIC z@Gyk~Ifp)??;s$3|5rfvPY2Rwxj_2y1X0#-8p^!CoG0ovEJ2y~1b-0qYk<7JEEo78 zkoTASfGvPWfxN#w4W#b8x4dAZyEIniq28;v)mR&AlV~3&6Dy_zM7$&29?^;#97k!NKBZd4-AwLxInZm?4 z4&j6>OOgD&fBc;bb;XMnU<29PoXqA%C@kWJs01P}YQ{->%JvU;KpuN!!JS@4jV z&p(;SPvlxW_BWYX<(Vka*ftJrT#G`;8xGRe!nZ*ttF#Dp*MF2>W^YlO^OQ4vyQZ70V#wf+tu?RgiFeokF|7JVq2&!m_%UAUiq zvPJ!zUxYrIUCwNl$tJBq9eE!SvN_H!3)$r9CG_zKUI%zD*zi&|`w)%k<4qSjokwIRLkT*L>Ua^?VONO~r7YX~a@PaNS0S)c)b9dv99~0v*~n-LT_~fuL8l@cUXD#( zBFAIWP%Wu{cb}JyMQISqoGXbw$39htF|@ivsH48TF04dev5$d|V;>W9qKqy(t?lxN zuyZ%VoDyt!FBs$%+3x zUDk6%lfD+rYw4rzZY`_mK^c7^L-V&MkZ0XsgIwzUzG2L1hBi$Yc_xlmb(tz~roe?j zu3;%qSv!I21a1QI`m`NLJ@}cu(q@byhV=;9Z9Vs6ki+zakmo?YhYjy3%!|686L?Wz z6ZECd&4AQ7Q{W>&uFYejEDL-JNWGIpIaT1@KwcXk0CH};&lql_%Vohs`=7DlY5u$_ zhdd!4SkY zkcV?_vd4PPnFgMYHaru-!!%X!(k?MJyyVmD!Mv6Z=eo75zJI1c2KA%7amZ88MFzQ) zv&^7hrJ+p|MxK8fc+S}H95(QT?6tPVSKwj#R`61<9yYwU7plI}LSP$#p+Ne77?A!y zU0{D8{XbEZhYK79r2mf*QY6M;q*mQz=9clrjuAEN~n=u{)57(@d;H8Zh+3=#t(wAZp>qkqRGifhm zXuh-=dDc}MfEup6B zL&z7^mbH3fLu_07*tQvslQVq&$dReJ3E8nc&m2(@@JquQ@jYb({mb<8{bjh$Acx+X zkgau*-f_eQG80FS#p}<~WJg?TMxH;aHUQKgr6@zFr*9hd#hGfH*Ye{Ra?0lcdAHAp zWAQlYkj@$$CCktB_r=+tOh3l#+BiWAc_0qcSh96)g&IXd;WVbm#FcapojHTh!HJ-2l9u53R$b z$jt0Kv3}Bd#a14?MxL8pAe~c6kv!>z^&i|gNj>qexI>~=Qq3y0a`elKNcAP-K$zbf z$d$%4R{3Nlv1}rs3^IF!Ygq)lw+$pepnL@M@jOk_U~?u2m;Ge0X{>85UJOij8EHcrCX z3ZGgfwbjazIGp6g=>zGKvSRVdX^|G{io_w(0T)DSu9g*EmOtRg^o*eh$Uxmh3<1Pg zam3&>zX-yDahuVP<7-!Dwu3^IrIq?is(-NLmQHiu@%V;RNa+KkVwr!2`PwTJEPIlc zjT-G6I6{?jN-gVw36gLkhH)X>dfbiL(-g)}iH3ZG1^&M+@a~t0p^JO3<)E#g6QHj^ zmq4>XTAEwsmi+tOQoG~`X)gL`=|=}@^UDnNZ1>Gn`*(7=lk^yovTUkH6zP;Sd=R7B zRG*oho{^TKM8S~}QHIUtcAWnTj5ISC$HOt_l!(3F1JdC$syg#e>`El#$TY!Tzfq`a}O2!SMDOGX+l*=b_}O6+cn zF%r`P_=GXF2J4Owh?I2Lz?0+(&AU%Ee*RA1K!>Q<;sXLC|=@60*l*wGN6tISetRcb8&b#Jg~U zJU|)LOVAU*9-uCuFi=NOD98z_J6A+bhnHfVu5GP4Hd6Zu>-?a;x?!)=+iXX5+!6S! z#Zq6Vr+HnuPg8j>tvMU!#8^~Jk=Z!~xf$sr1I~_V4?DZ|?Ah&6gbwNIe73;p?bN@M z)0>%^kMp--PDG`^d0d1{LyIS4^r-x-vA9bPbH)UGoty{(=#1+Z-8UiL85b2F6_*s{ z>15I&F-tuosRpbUdKl)Hn1vgW0(+lN4B%$P*lg&FJ)rG}lw_L?k&+y=BT|x$o1xY) zb>(tDC~~bfL_Oqk|3=%W8y%!=w6(HWKWlv{*Gk;^z+qIowGDpyS)!jf3sjo)| zjjimmn_)<^+>}`LGF`jE=61~{wJU6H*KMLR1hp%A-;5n&C71T7j{}%xYPQg)6129s zRs|W$++T0k1(@3v-_Rt4c5%!4rn)9y7o9CgAA`JTlela0Y2wUdD*NeXxNXqby4-qQ zFwMGZJ}K^v>RfYlpR8r5%cJ{ceecA~x~co0eo47jSMnRV!!yg&{L(ZXD?8VB*dUn( z|MJ|Re}V5h{#9RdE5D=jb4E)s`2I8CbNR1Y*=RfEc02>WlHi*RZfm4*XCtJMSFTSl zh*Svv{6&Z#16s8jadrjWzQ(QmhR-oK;rrHyv(?}9IR?J2m{O!D1=pLH3iDPgJ%8j}9Pw77{n zL!uhVT&ZS&+d9dCnrp2e+erqv=X!ev=p=$^crXpXg+8*Xd0*x6aZy{$nOLF3X}lq3z9)S zKpjD$ASb95NCI8JUb-C*Sh)|DAr?4^DfD;X0cqQ2|DXuTiWFx2;XcWE4RZu~fP5a? z8p!XpMX#!IygPXKwwM*NqHRsglzux!+^#0+=>#1k|3-B+H z_B@)J81tOZPeELF66Z~%ow=5LPmSln`2GQXfi~g01++Jjbwt{UZCop@jdIzScqfQ* z>4&VN|Il|xtiK<``o~0>-pevS1=#Kdu}>U`_3;An;6sr=1jw;7MST{~3BqzHK9>um zuAB$;DFRXFVu6!@Y@ZBb`xFqzfv+g%#Y#lE6i9uRf;irC5c$@DsNW6{+xLUm-Wo=s zeQ3}|m#<#s{8%r8uEN+wz+x;2ZB4s5K`($BIhrUgy%apdClyS(A9YM+pQ>28OvU0i zj&jRL^28zqSAhS6HxIt)RGaJkE&jJ!B@0}8gZys6{~q{vE~#E}k91s;I9vMtINOVz>%XD@r-+-su_K=9k{|l2rZ^uCtd-r1?>f$2eoL# zC$%`U2+9I!eV#-c{a`F;A!rR~59n)92>3dKVnLapI%%;(*6S*7sm*_Xo1T|nYo_PD zf4@`DhhAu@<%waeUl7^+mKhJPDv>XiFZP@*ZaJ%X(qH8AUi->+UhVg@ahvwY z*;|iJKUK6X`u%w;+#7x~D)FJ7Grr9^S{Sk6@XR9@U%zyE;#-3vOFtiTyz1+RJ5MQo z(9<#G?zg^sJLLG5&EI=YFW-Cq+tZ)*AHQH{l)vg9bDEdEy|~TsH~ak9e|NL|;;H## zw)Kr298tY|UeEBy*1vl;K6d$uVZFBu3xBy}?$E2l%4$lT6$#6xKc2e#%F9DvKG0#< zOBX*$e`~>a=N~FxQaS8!(dd|MufF2^ts`#u<_`Ioue7~tdzG3lxt{BN$No2S_~$#< zP+$0`182N4y5;0=Tz}sa=5KRs@ZIZnpL6ZHv;CClw$UrMEdSCam%W#fx$2g`JwElc zt9$Pa5#vwnn_vF%zg(NHT-lL2rN!8)KUTXs$2|R6?B3 zdWI@sfj~AnD|b7Vava!xb}b9c}CNXbANN! zC66oAwd_>SWeyPamub&8t!kezcJkFZ#l7cz|74r-X&oZF zR;=uG|4X}{m=yiWdg;pk@I%uE-`4h>lgFo)H4fi8B`V_9_kNfE_$Qs7?Ec)nAGQCa z+n4=j5A9j@;>L>PgUcqBEm_;`*vNNVERTD`Gh|&zSciVqkN%>^!1%X!jOs9JNRy=% zM>b8kbaHFEl7CGbnmnghxp(pdtp_~ifA-4cS*x1PpU|TE(Iao{_^7hU;j#m~d^My7 Q3p7}u!2%5yxJefH57QqXu>b%7 diff --git a/sourcehook/generate/shworker/shworker.cpp b/sourcehook/generate/shworker/shworker.cpp index 319c4f6..49457c7 100644 --- a/sourcehook/generate/shworker/shworker.cpp +++ b/sourcehook/generate/shworker/shworker.cpp @@ -6,7 +6,7 @@ INPUT FILE DIRECTIVES - $a is the first additional argument, %b the second, ... + $a is the first additional argument, $b the second, ... --- ITERATION diff --git a/sourcehook/generate/sourcehook.h b/sourcehook/generate/sourcehook.h index 9d82f2a..0da4752 100644 --- a/sourcehook/generate/sourcehook.h +++ b/sourcehook/generate/sourcehook.h @@ -882,6 +882,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ////////////////////////////////////////////////////////////////////////// + // ********* Support for 0 arguments ********* #define SH_DECL_HOOK0(ifacetype, ifacefunc, attr, overload, rettype) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -972,6 +973,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 0, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 1 arguments ********* #define SH_DECL_HOOK1(ifacetype, ifacefunc, attr, overload, rettype, param1) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1062,6 +1064,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 1, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 2 arguments ********* #define SH_DECL_HOOK2(ifacetype, ifacefunc, attr, overload, rettype, param1, param2) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1152,6 +1155,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 2, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 3 arguments ********* #define SH_DECL_HOOK3(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1242,6 +1246,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 3, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 4 arguments ********* #define SH_DECL_HOOK4(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1332,6 +1337,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 4, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 5 arguments ********* #define SH_DECL_HOOK5(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1422,6 +1428,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 5, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 6 arguments ********* #define SH_DECL_HOOK6(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1512,6 +1519,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 6, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 7 arguments ********* #define SH_DECL_HOOK7(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1602,6 +1610,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 7, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 8 arguments ********* #define SH_DECL_HOOK8(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1692,6 +1701,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 8, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 9 arguments ********* #define SH_DECL_HOOK9(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1782,6 +1792,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 9, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 10 arguments ********* #define SH_DECL_HOOK10(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1872,6 +1883,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 10, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 11 arguments ********* #define SH_DECL_HOOK11(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1962,6 +1974,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 11, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 12 arguments ********* #define SH_DECL_HOOK12(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2052,6 +2065,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 12, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 13 arguments ********* #define SH_DECL_HOOK13(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2142,6 +2156,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 13, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 14 arguments ********* #define SH_DECL_HOOK14(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2232,6 +2247,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 14, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 15 arguments ********* #define SH_DECL_HOOK15(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2322,6 +2338,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 15, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 16 arguments ********* #define SH_DECL_HOOK16(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2412,6 +2429,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 16, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 17 arguments ********* #define SH_DECL_HOOK17(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2502,6 +2520,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 17, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 18 arguments ********* #define SH_DECL_HOOK18(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2592,6 +2611,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 18, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 19 arguments ********* #define SH_DECL_HOOK19(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2682,6 +2702,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 19, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 20 arguments ********* #define SH_DECL_HOOK20(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19, param20) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2774,6 +2795,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C + ////////////////////////////////////////////////////////////////////////// // SH_CALL @@ -2831,738 +2853,1593 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C namespace SourceHook { - template class ExecutableClass + + // Support for 0 arguments + template class ExecutableClass0 { - CCType *m_CC; - MFPType m_MFP; + CCType *m_CC; + MFPType m_MFP; public: - ExecutableClass(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) - { - } - - // Support for 0 arguments - RetType operator()() const - SH_MAKE_EXECUTABLECLASS_OB((), ()) - - // Support for 1 arguments - template RetType operator()(Param1 p1) const - SH_MAKE_EXECUTABLECLASS_OB((p1), (Param1)) - - // Support for 2 arguments - template RetType operator()(Param1 p1, Param2 p2) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) - - // Support for 3 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) - - // Support for 4 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) - - // Support for 5 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) - - // Support for 6 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) - - // Support for 7 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) - - // Support for 8 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) - - // Support for 9 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) - - // Support for 10 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) - - // Support for 11 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) - - // Support for 12 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) - - // Support for 13 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) - - // Support for 14 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) - - // Support for 15 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) - - // Support for 16 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) - - // Support for 17 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) - - // Support for 18 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) - - // Support for 19 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) - - // Support for 20 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) - + ExecutableClass0(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()() const + SH_MAKE_EXECUTABLECLASS_OB((), ()) + + + template RetType operator()(Param1 p1) const + SH_MAKE_EXECUTABLECLASS_OB((p1), (Param1)) + + template RetType operator()(Param1 p1, Param2 p2) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + }; + + // Support for 1 arguments + template class ExecutableClass1 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass1(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1) const + SH_MAKE_EXECUTABLECLASS_OB((p1), (Param1)) + + + template RetType operator()(Param1 p1, Param2 p2) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 2 arguments + template class ExecutableClass2 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass2(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 3 arguments + template class ExecutableClass3 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass3(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 4 arguments + template class ExecutableClass4 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass4(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 5 arguments + template class ExecutableClass5 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass5(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 6 arguments + template class ExecutableClass6 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass6(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 7 arguments + template class ExecutableClass7 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass7(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 8 arguments + template class ExecutableClass8 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass8(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 9 arguments + template class ExecutableClass9 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass9(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 10 arguments + template class ExecutableClass10 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass10(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 11 arguments + template class ExecutableClass11 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass11(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 12 arguments + template class ExecutableClass12 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass12(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 13 arguments + template class ExecutableClass13 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass13(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 14 arguments + template class ExecutableClass14 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass14(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 15 arguments + template class ExecutableClass15 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass15(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 16 arguments + template class ExecutableClass16 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass16(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 17 arguments + template class ExecutableClass17 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass17(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 18 arguments + template class ExecutableClass18 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass18(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 19 arguments + template class ExecutableClass19 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass19(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 20 arguments + template class ExecutableClass20 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass20(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + + }; + + } // SH_CALL needs to deduce the return type -> it uses templates and function overloading // That's why SH_CALL takes two parameters: "mfp2" of type RetType(X::*mfp)(params), and "mfp" of type MFP // The only purpose of the mfp2 parameter is to extract the return type + // Support for 0 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)()) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)()const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } + // Support for 1 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } + // Support for 2 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } + // Support for 3 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } + // Support for 4 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } + // Support for 5 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } + // Support for 6 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } + // Support for 7 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } + // Support for 8 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } + // Support for 9 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } + // Support for 10 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } + // Support for 11 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } + // Support for 12 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } + // Support for 13 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } + // Support for 14 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } + // Support for 15 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } + // Support for 16 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } + // Support for 17 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } + // Support for 18 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } + // Support for 19 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } + // Support for 20 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } + #if SH_COMP != SH_COMP_MSVC || _MSC_VER > 1300 // GCC & MSVC 7.1 need this, MSVC 7.0 doesn't like it + // Support for 0 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } // Support for 1 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } // Support for 2 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } // Support for 3 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } // Support for 4 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } // Support for 5 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } // Support for 6 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } // Support for 7 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } // Support for 8 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } // Support for 9 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } // Support for 10 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } // Support for 11 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } // Support for 12 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } // Support for 13 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } // Support for 14 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } // Support for 15 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } // Support for 16 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } // Support for 17 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } // Support for 18 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } // Support for 19 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } // Support for 20 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } @@ -3580,6 +4457,7 @@ SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param namespace SourceHook { + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(), const RetType res) { @@ -3591,6 +4469,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1), const RetType res) { @@ -3602,6 +4481,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2), const RetType res) { @@ -3613,6 +4493,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3), const RetType res) { @@ -3624,6 +4505,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4), const RetType res) { @@ -3635,6 +4517,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5), const RetType res) { @@ -3646,6 +4529,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6), const RetType res) { @@ -3657,6 +4541,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7), const RetType res) { @@ -3668,6 +4553,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8), const RetType res) { @@ -3679,6 +4565,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9), const RetType res) { @@ -3690,6 +4577,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10), const RetType res) { @@ -3701,6 +4589,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11), const RetType res) { @@ -3712,6 +4601,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12), const RetType res) { @@ -3723,6 +4613,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13), const RetType res) { @@ -3734,6 +4625,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14), const RetType res) { @@ -3745,6 +4637,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15), const RetType res) { @@ -3756,6 +4649,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16), const RetType res) { @@ -3767,6 +4661,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17), const RetType res) { @@ -3778,6 +4673,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18), const RetType res) { @@ -3789,6 +4685,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19), const RetType res) { @@ -3800,6 +4697,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20), const RetType res) { @@ -3811,8 +4709,8 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + } #endif // The pope is dead. -> :( - diff --git a/sourcehook/generate/sourcehook.hxx b/sourcehook/generate/sourcehook.hxx index 6a7fddb..c2a4d2e 100755 --- a/sourcehook/generate/sourcehook.hxx +++ b/sourcehook/generate/sourcehook.hxx @@ -882,98 +882,98 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ////////////////////////////////////////////////////////////////////////// -@VARARGS@ -// ********* Support for @$@ arguments ********* -#define SH_DECL_HOOK@$@(ifacetype, ifacefunc, attr, overload, rettype@, param%%@) \ - SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ +@[$1,0,$a: +// ********* Support for $1 arguments ********* +#define SH_DECL_HOOK$1(ifacetype, ifacefunc, attr, overload, rettype@[$2,1,$1:, param$2@]) \ + SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ (&ifacetype::ifacefunc))) \ - typedef fastdelegate::FastDelegate@$@<@param%%|, @@, @rettype> FD; \ - virtual rettype Func(@param%% p%%|, @) \ - { SH_HANDLEFUNC((@param%%|, @), (@p%%|, @), rettype); } \ + typedef fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]@[$1!=0:, @]rettype> FD; \ + virtual rettype Func(@[$2,1,$1|, :param$2 p$2@]) \ + { SH_HANDLEFUNC((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@]), rettype); } \ SHINT_MAKE_GENERICSTUFF_END(ifacetype, ifacefunc, overload, \ - (static_cast(&ifacetype::ifacefunc))) \ + (static_cast(&ifacetype::ifacefunc))) \ \ - const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { 0@, sizeof(param%%)@ }; \ + const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { 0@[$2,1,$1:, sizeof(param$2)@] }; \ ::SourceHook::ProtoInfo SH_FHCls(ifacetype, ifacefunc, overload)::ms_Proto(sizeof(rettype), \ - @$@, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); + $1, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); -#define SH_DECL_HOOK@$@_void(ifacetype, ifacefunc, attr, overload@, param%%@) \ - SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ +#define SH_DECL_HOOK$1_void(ifacetype, ifacefunc, attr, overload@[$2,1,$1:, param$2@]) \ + SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ (&ifacetype::ifacefunc))) \ - typedef fastdelegate::FastDelegate@$@<@param%%|, @> FD; \ - virtual void Func(@param%% p%%|, @) \ - { SH_HANDLEFUNC_void((@param%%|, @), (@p%%|, @)); } \ + typedef fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> FD; \ + virtual void Func(@[$2,1,$1|, :param$2 p$2@]) \ + { SH_HANDLEFUNC_void((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@])); } \ SHINT_MAKE_GENERICSTUFF_END(ifacetype, ifacefunc, overload, \ - (static_cast(&ifacetype::ifacefunc))) \ + (static_cast(&ifacetype::ifacefunc))) \ \ \ - const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { 0@, sizeof(param%%)@ }; \ + const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { 0@[$2,1,$1:, sizeof(param$2)@] }; \ ::SourceHook::ProtoInfo SH_FHCls(ifacetype, ifacefunc, overload)::ms_Proto(0, \ - @$@, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); + $1, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); -#define SH_DECL_HOOK@$@_vafmt(ifacetype, ifacefunc, attr, overload, rettype@, param%%@) \ - SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ +#define SH_DECL_HOOK$1_vafmt(ifacetype, ifacefunc, attr, overload, rettype@[$2,1,$1:, param$2@]) \ + SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ (&ifacetype::ifacefunc))) \ - typedef fastdelegate::FastDelegate@$+1@<@param%%|, @@, @const char *, rettype> FD; \ - virtual rettype Func(@param%% p%%|, @@, @const char *fmt, ...) \ + typedef fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *, rettype> FD; \ + virtual rettype Func(@[$2,1,$1|, :param$2 p$2@]@[$1!=0:, @]const char *fmt, ...) \ { \ char buf[::SourceHook::STRBUF_LEN]; \ va_list ap; \ va_start(ap, fmt); \ vsnprintf(buf, sizeof(buf), fmt, ap); \ va_end(ap); \ - SH_HANDLEFUNC_vafmt((@param%%|, @@, @...), (@p%%|, @@, @"%s", buf), (@p%%|, @@, @buf), rettype); \ + SH_HANDLEFUNC_vafmt((@[$2,1,$1|, :param$2@]@[$1!=0:, @]...), (@[$2,1,$1|, :p$2@]@[$1!=0:, @]"%s", buf), (@[$2,1,$1|, :p$2@]@[$1!=0:, @]buf), rettype); \ } \ SHINT_MAKE_GENERICSTUFF_END(ifacetype, ifacefunc, overload, \ - (static_cast(&ifacetype::ifacefunc))) \ + (static_cast(&ifacetype::ifacefunc))) \ \ - const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { -1@, sizeof(param%%)@ }; \ + const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { -1@[$2,1,$1:, sizeof(param$2)@] }; \ ::SourceHook::ProtoInfo SH_FHCls(ifacetype, ifacefunc, overload)::ms_Proto(sizeof(rettype), \ - @$@, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); + $1, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); -#define SH_DECL_HOOK@$@_void_vafmt(ifacetype, ifacefunc, attr, overload@, param%%@) \ - SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ +#define SH_DECL_HOOK$1_void_vafmt(ifacetype, ifacefunc, attr, overload@[$2,1,$1:, param$2@]) \ + SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ (&ifacetype::ifacefunc))) \ - typedef fastdelegate::FastDelegate@$+1@<@param%%|, @@, @const char *> FD; \ - virtual void Func(@param%% p%%|, @@, @const char *fmt, ...) \ + typedef fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> FD; \ + virtual void Func(@[$2,1,$1|, :param$2 p$2@]@[$1!=0:, @]const char *fmt, ...) \ { \ char buf[::SourceHook::STRBUF_LEN]; \ va_list ap; \ va_start(ap, fmt); \ vsnprintf(buf, sizeof(buf), fmt, ap); \ va_end(ap); \ - SH_HANDLEFUNC_void_vafmt((@param%%|, @@, @...), (@p%%|, @@, @"%s", buf), (@p%%|, @@, @buf)); \ + SH_HANDLEFUNC_void_vafmt((@[$2,1,$1|, :param$2@]@[$1!=0:, @]...), (@[$2,1,$1|, :p$2@]@[$1!=0:, @]"%s", buf), (@[$2,1,$1|, :p$2@]@[$1!=0:, @]buf)); \ } \ SHINT_MAKE_GENERICSTUFF_END(ifacetype, ifacefunc, overload, \ - (static_cast(&ifacetype::ifacefunc))) \ + (static_cast(&ifacetype::ifacefunc))) \ \ - const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { -1@, sizeof(param%%)@ }; \ + const int __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload[] = { -1@[$2,1,$1:, sizeof(param$2)@] }; \ ::SourceHook::ProtoInfo SH_FHCls(ifacetype, ifacefunc, overload)::ms_Proto(0, \ - @$@, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); + $1, __SourceHook_ParamSizes_##ifacetype##ifacefunc##overload); -#define SH_DECL_MANUALHOOK@$@(hookname, vtblidx, vtbloffs, thisptroffs, rettype@, param%%@) \ +#define SH_DECL_MANUALHOOK$1(hookname, vtblidx, vtbloffs, thisptroffs, rettype@[$2,1,$1:, param$2@]) \ SHINT_MAKE_GENERICSTUFF_BEGIN_MANUAL(hookname, vtbloffs, vtblidx, thisptroffs) \ - typedef fastdelegate::FastDelegate@$@<@param%%|, @@, @rettype> FD; \ - virtual rettype Func(@param%% p%%|, @) \ - { SH_HANDLEFUNC((@param%%|, @), (@p%%|, @), rettype); } \ + typedef fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]@[$1!=0:, @]rettype> FD; \ + virtual rettype Func(@[$2,1,$1|, :param$2 p$2@]) \ + { SH_HANDLEFUNC((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@]), rettype); } \ SHINT_MAKE_GENERICSTUFF_END_MANUAL(hookname, vtbloffs, vtblidx, thisptroffs) \ \ - const int __SourceHook_ParamSizesM_##hookname[] = { 0@, sizeof(param%%)@ }; \ + const int __SourceHook_ParamSizesM_##hookname[] = { 0@[$2,1,$1:, sizeof(param$2)@] }; \ ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(sizeof(rettype), \ - @$@, __SourceHook_ParamSizesM_##hookname); + $1, __SourceHook_ParamSizesM_##hookname); -#define SH_DECL_MANUALHOOK@$@_void(hookname, vtblidx, vtbloffs, thisptroffs@, param%%@) \ +#define SH_DECL_MANUALHOOK$1_void(hookname, vtblidx, vtbloffs, thisptroffs@[$2,1,$1:, param$2@]) \ SHINT_MAKE_GENERICSTUFF_BEGIN_MANUAL(hookname, vtbloffs, vtblidx, thisptroffs) \ - typedef fastdelegate::FastDelegate@$@<@param%%|, @> FD; \ - virtual void Func(@param%% p%%|, @) \ - { SH_HANDLEFUNC_void((@param%%|, @), (@p%%|, @)); } \ + typedef fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> FD; \ + virtual void Func(@[$2,1,$1|, :param$2 p$2@]) \ + { SH_HANDLEFUNC_void((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@])); } \ SHINT_MAKE_GENERICSTUFF_END_MANUAL(hookname, vtbloffs, vtblidx, thisptroffs) \ \ - const int __SourceHook_ParamSizesM_##hookname[] = { 0@, sizeof(param%%)@ }; \ + const int __SourceHook_ParamSizesM_##hookname[] = { 0@[$2,1,$1:, sizeof(param$2)@] }; \ ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ - @$@, __SourceHook_ParamSizesM_##hookname); + $1, __SourceHook_ParamSizesM_##hookname); -@ENDARGS@ +@] ////////////////////////////////////////////////////////////////////////// @@ -1033,66 +1033,68 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C namespace SourceHook { - template class ExecutableClass +@[$1,0,$a: + // Support for $1 arguments + template class ExecutableClass$1 { - CCType *m_CC; - MFPType m_MFP; + CCType *m_CC; + MFPType m_MFP; public: - ExecutableClass(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) - { - } - -@VARARGS@ - // Support for @$@ arguments - @template<@@class Param%%|, @@> @RetType operator()(@Param%% p%%|, @) const - SH_MAKE_EXECUTABLECLASS_OB((@p%%|, @), (@Param%%|, @)) - -@ENDARGS@ + ExecutableClass$1(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(@[$2,1,$1|, :Param$2 p$2@]) const + SH_MAKE_EXECUTABLECLASS_OB((@[$2,1,$1|, :p$2@]), (@[$2,1,$1|, :Param$2@])) + + @[$2,$1+1,$a: + template <@[$3,$1+1,$2|, :class Param$3@]> RetType operator()(@[$3,1,$2|, :Param$3 p$3@]) const + SH_MAKE_EXECUTABLECLASS_OB((@[$3,1,$2|, :p$3@]), (@[$3,1,$2|, :Param$3@])) + @] }; +@] + } // SH_CALL needs to deduce the return type -> it uses templates and function overloading // That's why SH_CALL takes two parameters: "mfp2" of type RetType(X::*mfp)(params), and "mfp" of type MFP // The only purpose of the mfp2 parameter is to extract the return type -@VARARGS@ -// Support for @$@ arguments -template -SourceHook::ExecutableClass, RetType, MFP> -SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@Param%%|, @)) +@[$1,0,$a: +// Support for $1 arguments +template +SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]> +SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@[$2,1,$1|, :Param$2@])) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]>(ptr, mfp); } -template -SourceHook::ExecutableClass, RetType, MFP> -SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@Param%%|, @)const) +template +SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]> +SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@[$2,1,$1|, :Param$2@])const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]>(ptr, mfp); } -@ENDARGS@ +@] #if SH_COMP != SH_COMP_MSVC || _MSC_VER > 1300 // GCC & MSVC 7.1 need this, MSVC 7.0 doesn't like it -@VARARGS@ -// Support for @$@ arguments -template -SourceHook::ExecutableClass, RetType, MFP> -SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@Param%%|, @@, @...)) +@[$1,0,$a: +// Support for $1 arguments +template +SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]> +SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@[$2,1,$1|, :Param$2@]@[$1!=0:, @]...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]>(ptr, mfp); } -template -SourceHook::ExecutableClass, RetType, MFP> -SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@Param%%|, @@, @...)const) +template +SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]> +SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@[$2,1,$1|, :Param$2@]@[$1!=0:, @]...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass$1, MFP, RetType@[$2,1,$1:, Param$2@]>(ptr, mfp); } - -@ENDARGS@ +@] #endif @@ -1108,19 +1110,19 @@ SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(@Param%%|, @@ namespace SourceHook { -@VARARGS@ - template - void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(@Param%%|, @), const RetType res) +@[$1,0,$a: + template + void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(@[$2,1,$1|, :Param$2@]), const RetType res) { *reinterpret_cast(shptr->GetOverrideRetPtr()) = res; } - template - Iface *RecallGetIface(ISourceHook *shptr, RetType (Iface::*mfp)(@Param%%|, @)) + template + Iface *RecallGetIface(ISourceHook *shptr, RetType (Iface::*mfp)(@[$2,1,$1|, :Param$2@])) { return reinterpret_cast(shptr->GetIfacePtr()); } -@ENDARGS@ +@] } #endif diff --git a/sourcehook/sh_memfuncinfo.h b/sourcehook/sh_memfuncinfo.h index 987671b..98d5553 100644 --- a/sourcehook/sh_memfuncinfo.h +++ b/sourcehook/sh_memfuncinfo.h @@ -289,6 +289,7 @@ namespace SourceHook } // Versions which do take a this + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(), MemFuncInfo &out) { @@ -587,6 +588,7 @@ namespace SourceHook // GCC & MSVC 7.1 need this, MSVC 7.0 doesn't like it #if SH_COMP != SH_COMP_MSVC || _MSC_VER > 1300 + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(...), MemFuncInfo &out) { @@ -601,6 +603,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, ...), MemFuncInfo &out) { @@ -615,6 +618,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, ...), MemFuncInfo &out) { @@ -629,6 +633,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, ...), MemFuncInfo &out) { @@ -643,6 +648,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, ...), MemFuncInfo &out) { @@ -657,6 +663,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, ...), MemFuncInfo &out) { @@ -671,6 +678,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, ...), MemFuncInfo &out) { @@ -685,6 +693,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, ...), MemFuncInfo &out) { @@ -699,6 +708,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, ...), MemFuncInfo &out) { @@ -713,6 +723,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, ...), MemFuncInfo &out) { @@ -727,6 +738,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, ...), MemFuncInfo &out) { @@ -741,6 +753,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, ...), MemFuncInfo &out) { @@ -755,6 +768,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, ...), MemFuncInfo &out) { @@ -769,6 +783,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, ...), MemFuncInfo &out) { @@ -783,6 +798,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, ...), MemFuncInfo &out) { @@ -797,6 +813,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, ...), MemFuncInfo &out) { @@ -811,6 +828,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, ...), MemFuncInfo &out) { @@ -825,6 +843,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, ...), MemFuncInfo &out) { @@ -839,6 +858,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, ...), MemFuncInfo &out) { @@ -853,6 +873,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, ...), MemFuncInfo &out) { @@ -867,6 +888,7 @@ namespace SourceHook MFI_Impl::GetFuncInfo(mfp2, out); } + template inline void GetFuncInfo(Y *ptr, RetType(X::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20, ...), MemFuncInfo &out) { @@ -882,10 +904,10 @@ namespace SourceHook } + #endif } #endif - diff --git a/sourcehook/sourcehook.h b/sourcehook/sourcehook.h index 9d82f2a..0da4752 100644 --- a/sourcehook/sourcehook.h +++ b/sourcehook/sourcehook.h @@ -882,6 +882,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ////////////////////////////////////////////////////////////////////////// + // ********* Support for 0 arguments ********* #define SH_DECL_HOOK0(ifacetype, ifacefunc, attr, overload, rettype) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -972,6 +973,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 0, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 1 arguments ********* #define SH_DECL_HOOK1(ifacetype, ifacefunc, attr, overload, rettype, param1) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1062,6 +1064,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 1, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 2 arguments ********* #define SH_DECL_HOOK2(ifacetype, ifacefunc, attr, overload, rettype, param1, param2) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1152,6 +1155,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 2, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 3 arguments ********* #define SH_DECL_HOOK3(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1242,6 +1246,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 3, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 4 arguments ********* #define SH_DECL_HOOK4(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1332,6 +1337,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 4, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 5 arguments ********* #define SH_DECL_HOOK5(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1422,6 +1428,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 5, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 6 arguments ********* #define SH_DECL_HOOK6(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1512,6 +1519,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 6, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 7 arguments ********* #define SH_DECL_HOOK7(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1602,6 +1610,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 7, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 8 arguments ********* #define SH_DECL_HOOK8(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1692,6 +1701,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 8, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 9 arguments ********* #define SH_DECL_HOOK9(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1782,6 +1792,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 9, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 10 arguments ********* #define SH_DECL_HOOK10(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1872,6 +1883,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 10, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 11 arguments ********* #define SH_DECL_HOOK11(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -1962,6 +1974,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 11, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 12 arguments ********* #define SH_DECL_HOOK12(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2052,6 +2065,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 12, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 13 arguments ********* #define SH_DECL_HOOK13(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2142,6 +2156,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 13, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 14 arguments ********* #define SH_DECL_HOOK14(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2232,6 +2247,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 14, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 15 arguments ********* #define SH_DECL_HOOK15(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2322,6 +2338,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 15, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 16 arguments ********* #define SH_DECL_HOOK16(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2412,6 +2429,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 16, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 17 arguments ********* #define SH_DECL_HOOK17(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2502,6 +2520,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 17, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 18 arguments ********* #define SH_DECL_HOOK18(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2592,6 +2611,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 18, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 19 arguments ********* #define SH_DECL_HOOK19(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2682,6 +2702,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C ::SourceHook::ProtoInfo SH_MFHCls(hookname)::ms_Proto(0, \ 19, __SourceHook_ParamSizesM_##hookname); + // ********* Support for 20 arguments ********* #define SH_DECL_HOOK20(ifacetype, ifacefunc, attr, overload, rettype, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19, param20) \ SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast \ @@ -2774,6 +2795,7 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C + ////////////////////////////////////////////////////////////////////////// // SH_CALL @@ -2831,738 +2853,1593 @@ inline void SH_RELEASE_CALLCLASS_R(SourceHook::ISourceHook *shptr, SourceHook::C namespace SourceHook { - template class ExecutableClass + + // Support for 0 arguments + template class ExecutableClass0 { - CCType *m_CC; - MFPType m_MFP; + CCType *m_CC; + MFPType m_MFP; public: - ExecutableClass(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) - { - } - - // Support for 0 arguments - RetType operator()() const - SH_MAKE_EXECUTABLECLASS_OB((), ()) - - // Support for 1 arguments - template RetType operator()(Param1 p1) const - SH_MAKE_EXECUTABLECLASS_OB((p1), (Param1)) - - // Support for 2 arguments - template RetType operator()(Param1 p1, Param2 p2) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) - - // Support for 3 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) - - // Support for 4 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) - - // Support for 5 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) - - // Support for 6 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) - - // Support for 7 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) - - // Support for 8 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) - - // Support for 9 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) - - // Support for 10 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) - - // Support for 11 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) - - // Support for 12 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) - - // Support for 13 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) - - // Support for 14 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) - - // Support for 15 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) - - // Support for 16 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) - - // Support for 17 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) - - // Support for 18 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) - - // Support for 19 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) - - // Support for 20 arguments - template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const - SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) - + ExecutableClass0(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()() const + SH_MAKE_EXECUTABLECLASS_OB((), ()) + + + template RetType operator()(Param1 p1) const + SH_MAKE_EXECUTABLECLASS_OB((p1), (Param1)) + + template RetType operator()(Param1 p1, Param2 p2) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + }; + + // Support for 1 arguments + template class ExecutableClass1 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass1(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1) const + SH_MAKE_EXECUTABLECLASS_OB((p1), (Param1)) + + + template RetType operator()(Param1 p1, Param2 p2) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 2 arguments + template class ExecutableClass2 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass2(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2), (Param1, Param2)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 3 arguments + template class ExecutableClass3 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass3(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3), (Param1, Param2, Param3)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 4 arguments + template class ExecutableClass4 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass4(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4), (Param1, Param2, Param3, Param4)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 5 arguments + template class ExecutableClass5 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass5(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5), (Param1, Param2, Param3, Param4, Param5)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 6 arguments + template class ExecutableClass6 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass6(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6), (Param1, Param2, Param3, Param4, Param5, Param6)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 7 arguments + template class ExecutableClass7 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass7(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7), (Param1, Param2, Param3, Param4, Param5, Param6, Param7)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 8 arguments + template class ExecutableClass8 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass8(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 9 arguments + template class ExecutableClass9 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass9(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 10 arguments + template class ExecutableClass10 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass10(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 11 arguments + template class ExecutableClass11 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass11(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 12 arguments + template class ExecutableClass12 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass12(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 13 arguments + template class ExecutableClass13 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass13(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 14 arguments + template class ExecutableClass14 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass14(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 15 arguments + template class ExecutableClass15 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass15(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 16 arguments + template class ExecutableClass16 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass16(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 17 arguments + template class ExecutableClass17 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass17(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 18 arguments + template class ExecutableClass18 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass18(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 19 arguments + template class ExecutableClass19 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass19(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) + + + template RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + }; + + // Support for 20 arguments + template class ExecutableClass20 + { + CCType *m_CC; + MFPType m_MFP; + public: + ExecutableClass20(CCType *cc, MFPType mfp) : m_CC(cc), m_MFP(mfp) { } + + RetType operator()(Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10, Param11 p11, Param12 p12, Param13 p13, Param14 p14, Param15 p15, Param16 p16, Param17 p17, Param18 p18, Param19 p19, Param20 p20) const + SH_MAKE_EXECUTABLECLASS_OB((p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20), (Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) + + + }; + + } // SH_CALL needs to deduce the return type -> it uses templates and function overloading // That's why SH_CALL takes two parameters: "mfp2" of type RetType(X::*mfp)(params), and "mfp" of type MFP // The only purpose of the mfp2 parameter is to extract the return type + // Support for 0 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)()) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)()const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } + // Support for 1 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } + // Support for 2 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } + // Support for 3 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } + // Support for 4 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } + // Support for 5 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } + // Support for 6 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } + // Support for 7 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } + // Support for 8 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } + // Support for 9 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } + // Support for 10 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } + // Support for 11 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } + // Support for 12 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } + // Support for 13 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } + // Support for 14 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } + // Support for 15 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } + // Support for 16 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } + // Support for 17 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } + // Support for 18 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } + // Support for 19 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } + // Support for 20 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } + #if SH_COMP != SH_COMP_MSVC || _MSC_VER > 1300 // GCC & MSVC 7.1 need this, MSVC 7.0 doesn't like it + // Support for 0 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass0, MFP, RetType> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass0, MFP, RetType>(ptr, mfp); } // Support for 1 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass1, MFP, RetType, Param1> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass1, MFP, RetType, Param1>(ptr, mfp); } // Support for 2 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass2, MFP, RetType, Param1, Param2>(ptr, mfp); } // Support for 3 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass3, MFP, RetType, Param1, Param2, Param3>(ptr, mfp); } // Support for 4 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass4, MFP, RetType, Param1, Param2, Param3, Param4>(ptr, mfp); } // Support for 5 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass5, MFP, RetType, Param1, Param2, Param3, Param4, Param5>(ptr, mfp); } // Support for 6 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass6, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6>(ptr, mfp); } // Support for 7 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass7, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>(ptr, mfp); } // Support for 8 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass8, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>(ptr, mfp); } // Support for 9 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass9, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9>(ptr, mfp); } // Support for 10 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass10, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10>(ptr, mfp); } // Support for 11 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass11, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11>(ptr, mfp); } // Support for 12 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass12, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12>(ptr, mfp); } // Support for 13 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass13, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13>(ptr, mfp); } // Support for 14 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass14, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14>(ptr, mfp); } // Support for 15 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass15, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15>(ptr, mfp); } // Support for 16 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass16, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16>(ptr, mfp); } // Support for 17 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass17, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17>(ptr, mfp); } // Support for 18 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass18, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18>(ptr, mfp); } // Support for 19 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass19, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19>(ptr, mfp); } // Support for 20 arguments template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20, ...)) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } template -SourceHook::ExecutableClass, RetType, MFP> +SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20> SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20, ...)const) { - return SourceHook::ExecutableClass, RetType, MFP>(ptr, mfp); + return SourceHook::ExecutableClass20, MFP, RetType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20>(ptr, mfp); } @@ -3580,6 +4457,7 @@ SH_CALL2(SourceHook::CallClass *ptr, MFP mfp, RetType(X::*mfp2)(Param1, Param namespace SourceHook { + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(), const RetType res) { @@ -3591,6 +4469,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1), const RetType res) { @@ -3602,6 +4481,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2), const RetType res) { @@ -3613,6 +4493,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3), const RetType res) { @@ -3624,6 +4505,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4), const RetType res) { @@ -3635,6 +4517,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5), const RetType res) { @@ -3646,6 +4529,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6), const RetType res) { @@ -3657,6 +4541,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7), const RetType res) { @@ -3668,6 +4553,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8), const RetType res) { @@ -3679,6 +4565,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9), const RetType res) { @@ -3690,6 +4577,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10), const RetType res) { @@ -3701,6 +4589,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11), const RetType res) { @@ -3712,6 +4601,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12), const RetType res) { @@ -3723,6 +4613,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13), const RetType res) { @@ -3734,6 +4625,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14), const RetType res) { @@ -3745,6 +4637,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15), const RetType res) { @@ -3756,6 +4649,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16), const RetType res) { @@ -3767,6 +4661,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17), const RetType res) { @@ -3778,6 +4673,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18), const RetType res) { @@ -3789,6 +4685,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19), const RetType res) { @@ -3800,6 +4697,7 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + template void SetOverrideResult(ISourceHook *shptr, RetType (Iface::*mfp)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15, Param16, Param17, Param18, Param19, Param20), const RetType res) { @@ -3811,8 +4709,8 @@ namespace SourceHook { return reinterpret_cast(shptr->GetIfacePtr()); } + } #endif // The pope is dead. -> :( - diff --git a/sourcehook/test/main.cpp b/sourcehook/test/main.cpp index db7a570..42311d5 100644 --- a/sourcehook/test/main.cpp +++ b/sourcehook/test/main.cpp @@ -70,7 +70,7 @@ SourceHook::List Test::ms_Tests; DO_TEST(List); DO_TEST(Basic); -DO_TEST(VafmtAndOverload); +//DO_TEST(VafmtAndOverload); DO_TEST(ThisPtrOffs); DO_TEST(PlugSys); DO_TEST(Bail); @@ -78,6 +78,7 @@ DO_TEST(Reentr); DO_TEST(Manual); DO_TEST(Recall); DO_TEST(Multi); +DO_TEST(Ref); int main(int argc, char *argv[]) { diff --git a/sourcehook/test/test.vcproj b/sourcehook/test/test.vcproj index 76c0756..ef2aa11 100644 --- a/sourcehook/test/test.vcproj +++ b/sourcehook/test/test.vcproj @@ -252,6 +252,12 @@ + + + @@ -286,6 +292,9 @@ + + *cc = SH_GET_CALLCLASS(&hello); + + ADD_STATE(State_Result(pHello->Func(base))); + ADD_STATE(State_Result(pHello->Func(der))); + ADD_STATE(State_Result(pHello->Func(der2))); + ADD_STATE(State_Result(pHello->Func(der3))); + + CHECK_STATES((&g_States, + new State_Result(0), + new State_Result(10), + new State_Result(11), + new State_Result(12), + NULL), "Part 1"); + + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(base))); + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(der))); + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(der2))); + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(der3))); + + CHECK_STATES((&g_States, + new State_Result(0), + new State_Result(10), + new State_Result(11), + new State_Result(12), + NULL), "Part 2"); + + SH_ADD_HOOK_MEMFUNC(CHello, Func, &hello, &hook, &CHook::Func, false); + + ADD_STATE(State_Result(pHello->Func(base))); + ADD_STATE(State_Result(pHello->Func(der))); + ADD_STATE(State_Result(pHello->Func(der2))); + ADD_STATE(State_Result(pHello->Func(der3))); + + CHECK_STATES((&g_States, + new State_Result_InHook(0), + new State_Result(20), + new State_Result_InHook(10), + new State_Result(20), + new State_Result_InHook(11), + new State_Result(20), + new State_Result_InHook(12), + new State_Result(20), + NULL), "Part 3"); + + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(base))); + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(der))); + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(der2))); + ADD_STATE(State_Result(SH_CALL(cc, &CHello::Func)(der3))); + + CHECK_STATES((&g_States, + new State_Result(0), + new State_Result(10), + new State_Result(11), + new State_Result(12), + NULL), "Part 4"); + + return true; +}