Use C++11 variadic templates for core FastDelegate.

This commit is contained in:
David Anderson 2015-10-24 17:34:04 -07:00
parent ef43db47b2
commit 2ce09bfa70
7 changed files with 556 additions and 3934 deletions

1
.gitignore vendored
View File

@ -25,3 +25,4 @@ Release.*/
# AMBuild build directories
build/
obj-*/
.gdb_history

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,5 @@ cd ..
shworker/bin/shworker.bin iter sourcehook.hxx sourcehook.h $1
shworker/bin/shworker.bin iter sh_memfuncinfo.hxx sh_memfuncinfo.h $1
shworker/bin/shworker.bin hopter FastDelegate.hxx FastDelegate.h $1
cp *.h ..

View File

@ -5,6 +5,5 @@
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 ..

View File

@ -1077,7 +1077,7 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_HOOK$1(ifacetype, ifacefunc, attr, overload, rettype@[$2,1,$1:, param$2@]) \
SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast<rettype (ifacetype::*)(@[$2,1,$1|, :param$2@]) attr> \
(&ifacetype::ifacefunc))) \
typedef fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]@[$1!=0:, @]rettype> FD; \
typedef fastdelegate::FastDelegate<rettype@[$2,1,$1:, param$2@]> FD; \
MAKE_DELEG(rettype, (@[$2,1,$1|, :param$2 p$2@]), (@[$2,1,$1|, :p$2@])); \
virtual rettype Func(@[$2,1,$1|, :param$2 p$2@]) \
{ SH_HANDLEFUNC((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@]), rettype); } \
@ -1091,14 +1091,14 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_EXTERN$1(ifacetype, ifacefunc, attr, overload, rettype@[$2,1,$1:, param$2@]) \
int __SourceHook_FHAdd##ifacetype##ifacefunc(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]@[$1!=0:, @]rettype> handler); \
fastdelegate::FastDelegate<rettype@[$2,1,$1|:, param$2@]> handler); \
bool __SourceHook_FHRemove##ifacetype##ifacefunc(void *iface, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]@[$1!=0:, @]rettype> handler);
fastdelegate::FastDelegate<rettype@[$2,1,$1|:, param$2@]> handler);
#define SH_DECL_HOOK$1_void(ifacetype, ifacefunc, attr, overload@[$2,1,$1:, param$2@]) \
SHINT_MAKE_GENERICSTUFF_BEGIN(ifacetype, ifacefunc, overload, (static_cast<void (ifacetype::*)(@[$2,1,$1|, :param$2@]) attr> \
(&ifacetype::ifacefunc))) \
typedef fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> FD; \
typedef fastdelegate::FastDelegate<void@[$1!=0:, @]@[$2,1,$1|, :param$2@]> FD; \
MAKE_DELEG_void((@[$2,1,$1|, :param$2 p$2@]), (@[$2,1,$1|, :p$2@])); \
virtual void Func(@[$2,1,$1|, :param$2 p$2@]) \
{ SH_HANDLEFUNC_void((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@])); } \
@ -1112,14 +1112,14 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_EXTERN$1_void(ifacetype, ifacefunc, attr, overload@[$2,1,$1:, param$2@]) \
int __SourceHook_FHAdd##ifacetype##ifacefunc(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> handler); \
fastdelegate::FastDelegate<void@[$1!=0:, @]@[$2,1,$1|, :param$2@]> handler); \
bool __SourceHook_FHRemove##ifacetype##ifacefunc(void *iface, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> handler);
fastdelegate::FastDelegate<void@[$1!=0:, @]@[$2,1,$1|, :param$2@]> handler);
#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<rettype (ifacetype::*)(@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *, ...) attr> \
(&ifacetype::ifacefunc))) \
typedef fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *, rettype> FD; \
typedef fastdelegate::FastDelegate<rettype, @[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> FD; \
MAKE_DELEG(rettype, (@[$2,1,$1|, :param$2 p$2@]@[$1!=0:, @]const char *px), (@[$2,1,$1|, :p$2@]@[$1!=0:, @]px)); \
virtual rettype Func(@[$2,1,$1|, :param$2 p$2@] @[$1!=0:, @]const char *fmt, ...) \
{ \
@ -1136,14 +1136,14 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_EXTERN$1_vafmt(ifacetype, ifacefunc, attr, overload, rettype@[$2,1,$1:, param$2@]) \
int __SourceHook_FHAdd##ifacetype##ifacefunc(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *, rettype> handler); \
fastdelegate::FastDelegate<rettype, @[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> handler); \
bool __SourceHook_FHRemove##ifacetype##ifacefunc(void *iface, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *, rettype> handler);
fastdelegate::FastDelegate<rettype, @[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> handler);
#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<void (ifacetype::*)(@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *, ...) attr> \
(&ifacetype::ifacefunc))) \
typedef fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> FD; \
typedef fastdelegate::FastDelegate<void, @[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> FD; \
MAKE_DELEG_void((@[$2,1,$1|, :param$2 p$2@]@[$1!=0:, @]const char *px), (@[$2,1,$1|, :p$2@]@[$1!=0:, @]px)); \
virtual void Func(@[$2,1,$1|, :param$2 p$2@]@[$1!=0:, @]const char *fmt, ...) \
{ \
@ -1160,13 +1160,13 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_EXTERN$1_void_vafmt(ifacetype, ifacefunc, attr, overload@[$2,1,$1:, param$2@]) \
int __SourceHook_FHAdd##ifacetype##ifacefunc(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> handler); \
fastdelegate::FastDelegate<void, @[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> handler); \
bool __SourceHook_FHRemove##ifacetype##ifacefunc(void *iface, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> handler);
fastdelegate::FastDelegate<void, @[$2,1,$1|, :param$2@]@[$1!=0:, @]const char *> handler);
#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$1<@[$2,1,$1|, :param$2@]@[$1!=0:, @]rettype> FD; \
typedef fastdelegate::FastDelegate<rettype@[$1!=0:, @]@[$2,1,$1|, :param$2@]> FD; \
MAKE_DELEG(rettype, (@[$2,1,$1|, :param$2 p$2@]), (@[$2,1,$1|, :p$2@])); \
virtual rettype Func(@[$2,1,$1|, :param$2 p$2@]) \
{ SH_HANDLEFUNC((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@]), rettype); } \
@ -1186,9 +1186,9 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_MANUALEXTERN$1(hookname, rettype@[$2,1,$1:, param$2@]) \
int __SourceHook_FHMAdd##hookname(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1:param$2, @]rettype> handler); \
fastdelegate::FastDelegate<rettype@[$2,1,$1|:, param$2@]> handler); \
bool __SourceHook_FHMRemove##hookname(void *iface, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1:param$2, @]rettype> handler); \
fastdelegate::FastDelegate<rettype@[$2,1,$1|:, param$2@]> handler); \
rettype(::SourceHook::EmptyClass::* __SoureceHook_FHM_GetRecallMFP##hookname(::SourceHook::EmptyClass *thisptr) )(@[$2,1,$1|, :param$2@]); \
SourceHook::ExecutableClassN<SourceHook::EmptyClass, rettype(::SourceHook::EmptyClass::*)(@[$2,1,$1|, :param$2@]), rettype@[$2,1,$1:, param$2@]> __SoureceHook_FHM_SHCall##hookname(void *ptr); \
void __SoureceHook_FHM_SetOverrideResult##hookname(::SourceHook::ISourceHook *shptr, rettype res); \
@ -1196,7 +1196,7 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_MANUALHOOK$1_vafmt(hookname, vtblidx, vtbloffs, thisptroffs, rettype@[$2,1,$1:, param$2@]) \
SHINT_MAKE_GENERICSTUFF_BEGIN_MANUAL(hookname, vtbloffs, vtblidx, thisptroffs) \
typedef fastdelegate::FastDelegate@($1+1)<@[$2,1,$1:param$2, @]const char *, rettype> FD; \
typedef fastdelegate::FastDelegate<rettype, @[$2,1,$1:param$2, @]const char *> FD; \
MAKE_DELEG(rettype, (@[$2,1,$1:param$2 p$2, @]const char *px), (@[$2,1,$1:p$2, @]px)); \
virtual rettype Func(@[$2,1,$1:param$2 p$2, @]const char *fmt, ...) \
{ \
@ -1219,9 +1219,9 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_MANUALEXTERN$1_vafmt(hookname, rettype@[$2,1,$1:, param$2@]) \
int __SourceHook_FHMAdd##hookname(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1:param$2, @]const char *, rettype> handler); \
fastdelegate::FastDelegate<rettype, @[$2,1,$1:param$2, @]const char *> handler); \
bool __SourceHook_FHMRemove##hookname(void *iface, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1:param$2, @]const char *, rettype> handler); \
fastdelegate::FastDelegate<rettype, @[$2,1,$1:param$2, @]const char *> handler); \
rettype(::SourceHook::EmptyClass::* __SoureceHook_FHM_GetRecallMFP##hookname(::SourceHook::EmptyClass *thisptr) )(@[$2,1,$1:param$2, @]const char *, ...); \
SourceHook::ExecutableClassN<SourceHook::EmptyClass, rettype(::SourceHook::EmptyClass::*)(@[$2,1,$1:param$2, @]const char *, ...), rettype@[$2,1,$1:, param$2@], const char*> __SoureceHook_FHM_SHCall##hookname(void *ptr); \
void __SoureceHook_FHM_SetOverrideResult##hookname(::SourceHook::ISourceHook *shptr, rettype res); \
@ -1229,7 +1229,7 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#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$1<@[$2,1,$1|, :param$2@]> FD; \
typedef fastdelegate::FastDelegate<void@[$1!=0:, @]@[$2,1,$1|, :param$2@]> FD; \
MAKE_DELEG_void((@[$2,1,$1|, :param$2 p$2@]), (@[$2,1,$1|, :p$2@])); \
virtual void Func(@[$2,1,$1|, :param$2 p$2@]) \
{ SH_HANDLEFUNC_void((@[$2,1,$1|, :param$2@]), (@[$2,1,$1|, :p$2@])); } \
@ -1244,16 +1244,16 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_MANUALEXTERN$1_void(hookname@[$2,1,$1:, param$2@]) \
int __SourceHook_FHMAdd##hookname(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> handler); \
fastdelegate::FastDelegate<void@[$1!=0:, @]@[$2,1,$1|, :param$2@]> handler); \
bool __SourceHook_FHMRemove##hookname(void *iface, bool post, \
fastdelegate::FastDelegate$1<@[$2,1,$1|, :param$2@]> handler); \
fastdelegate::FastDelegate<void@[$1!=0:, @]@[$2,1,$1|, :param$2@]> handler); \
void(::SourceHook::EmptyClass::* __SoureceHook_FHM_GetRecallMFP##hookname(::SourceHook::EmptyClass *thisptr) )(@[$2,1,$1|, :param$2@]); \
SourceHook::ExecutableClassN<SourceHook::EmptyClass, void(::SourceHook::EmptyClass::*)(@[$2,1,$1|, :param$2@]), void@[$2,1,$1:, param$2@]> __SoureceHook_FHM_SHCall##hookname(void *ptr); \
void __SourceHook_FHM_Reconfigure##hookname(int pvtblindex, int pvtbloffs, int pthisptroffs);
#define SH_DECL_MANUALHOOK$1_void_vafmt(hookname, vtblidx, vtbloffs, thisptroffs@[$2,1,$1:, param$2@]) \
SHINT_MAKE_GENERICSTUFF_BEGIN_MANUAL(hookname, vtbloffs, vtblidx, thisptroffs) \
typedef fastdelegate::FastDelegate@($1+1)<@[$2,1,$1:param$2, @]const char *> FD; \
typedef fastdelegate::FastDelegate<void, @[$2,1,$1:param$2, @]const char *> FD; \
MAKE_DELEG_void((@[$2,1,$1:param$2 p$2, @]const char *px), (@[$2,1,$1:p$2, @]px)); \
virtual void Func(@[$2,1,$1:param$2 p$2, @]const char *fmt, ...) \
{ \
@ -1271,9 +1271,9 @@ SourceHook::CallClass<T> *SH_GET_CALLCLASS(T *p)
#define SH_DECL_MANUALEXTERN$1_void_vafmt(hookname@[$2,1,$1:, param$2@]) \
int __SourceHook_FHMAdd##hookname(void *iface, ::SourceHook::ISourceHook::AddHookMode mode, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1:param$2, @]const char *> handler); \
fastdelegate::FastDelegate<void, @[$2,1,$1:param$2, @]const char *> handler); \
bool __SourceHook_FHMRemove##hookname(void *iface, bool post, \
fastdelegate::FastDelegate@($1+1)<@[$2,1,$1:param$2, @]const char *> handler); \
fastdelegate::FastDelegate<void, @[$2,1,$1:param$2, @]const char *> handler); \
void(::SourceHook::EmptyClass::* __SoureceHook_FHM_GetRecallMFP##hookname(::SourceHook::EmptyClass *thisptr) )(@[$2,1,$1:param$2, @]const char *, ...); \
SourceHook::ExecutableClassN<SourceHook::EmptyClass, void(::SourceHook::EmptyClass::*)(@[$2,1,$1:param$2, @]const char *, ...), void@[$2,1,$1:, param$2@], const char*> __SoureceHook_FHM_SHCall##hookname(void *ptr); \
void __SourceHook_FHM_Reconfigure##hookname(int pvtblindex, int pvtbloffs, int pthisptroffs);

File diff suppressed because it is too large Load Diff