|
1 | 1 | #pragma once |
2 | 2 |
|
3 | | -#include <boost/preprocessor.hpp> |
4 | 3 | #include <recomputils.h> |
5 | 4 |
|
6 | 5 | // Extracts the type and name from a given function parameter. |
|
19 | 18 | #define GET_HOOK_ARG(_, FUNCTION_NAME, PARAM) \ |
20 | 19 | GET_HOOK_PARAM_GLOBAL(FUNCTION_NAME, PARAM) |
21 | 20 |
|
| 21 | +#define TRS_GET_HOOK_ARGS(FUNCTION_NAME, PARAMS) \ |
| 22 | + BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(GET_HOOK_ARG, FUNCTION_NAME, PARAMS)) |
| 23 | + |
22 | 24 | // Used for transforming parameters into comma-separated values for function signatures. |
23 | 25 | #define GET_HOOK_PARAM(_A, _B, PARAM) \ |
24 | 26 | EXTRACT_HOOK_PARAM_TYPE(PARAM) EXTRACT_HOOK_PARAM_NAME(PARAM) |
25 | 27 |
|
| 28 | +#define TRS_GET_HOOK_PARAMS(FUNCTION_NAME, PARAMS) \ |
| 29 | + BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(GET_HOOK_PARAM, FUNCTION_NAME, PARAMS)) |
| 30 | + |
26 | 31 | // Used for assigning function parameters to globals in the prefix hook. |
27 | 32 | #define ASSIGN_HOOK_PARAM_GLOBAL(_, FUNCTION_NAME, PARAM) \ |
28 | 33 | GET_HOOK_PARAM_GLOBAL(FUNCTION_NAME, PARAM) = EXTRACT_HOOK_PARAM_NAME(PARAM); |
29 | 34 |
|
30 | 35 | #define DECLARE_PREFIX_HOOK(RETURN_TYPE, FUNCTION_NAME, SYMBOL_NAME, PARAMS) \ |
31 | | - RECOMP_HOOK(SYMBOL_NAME) void prefix_##FUNCTION_NAME(BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(GET_HOOK_PARAM, FUNCTION_NAME, PARAMS))) |
32 | | - |
33 | | -#define DECLARE_POSTFIX_HOOK(RETURN_TYPE, FUNCTION_NAME, SYMBOL_NAME, PARAMS) \ |
34 | | - BOOST_PP_SEQ_FOR_EACH(DECLARE_HOOK_PARAM_GLOBAL, FUNCTION_NAME, PARAMS) \ |
35 | | - DECLARE_PREFIX_HOOK(RETURN_TYPE, FUNCTION_NAME, SYMBOL_NAME, PARAMS) \ |
36 | | - { \ |
37 | | - BOOST_PP_SEQ_FOR_EACH(ASSIGN_HOOK_PARAM_GLOBAL, FUNCTION_NAME, PARAMS) \ |
38 | | - } \ |
39 | | - RETURN_TYPE impl_##FUNCTION_NAME(BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(GET_HOOK_PARAM, FUNCTION_NAME, PARAMS))); \ |
40 | | - RECOMP_HOOK_RETURN(SYMBOL_NAME) RETURN_TYPE postfix_##FUNCTION_NAME() \ |
41 | | - { \ |
42 | | - return impl_##FUNCTION_NAME(BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(GET_HOOK_ARG, FUNCTION_NAME, PARAMS))); \ |
43 | | - } \ |
44 | | - RETURN_TYPE impl_##FUNCTION_NAME(BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(GET_HOOK_PARAM, FUNCTION_NAME, PARAMS))) |
| 36 | + RECOMP_HOOK(SYMBOL_NAME) void prefix_##FUNCTION_NAME(TRS_GET_HOOK_PARAMS(FUNCTION_NAME, PARAMS)) |
| 37 | + |
| 38 | +#define DECLARE_POSTFIX_HOOK(RETURN_TYPE, FUNCTION_NAME, SYMBOL_NAME, PARAMS) \ |
| 39 | + BOOST_PP_SEQ_FOR_EACH(DECLARE_HOOK_PARAM_GLOBAL, FUNCTION_NAME, PARAMS) \ |
| 40 | + DECLARE_PREFIX_HOOK(RETURN_TYPE, FUNCTION_NAME, SYMBOL_NAME, PARAMS) \ |
| 41 | + { \ |
| 42 | + BOOST_PP_SEQ_FOR_EACH(ASSIGN_HOOK_PARAM_GLOBAL, FUNCTION_NAME, PARAMS) \ |
| 43 | + } \ |
| 44 | + RETURN_TYPE impl_##FUNCTION_NAME(TRS_GET_HOOK_PARAMS(FUNCTION_NAME, PARAMS)); \ |
| 45 | + RECOMP_HOOK_RETURN(SYMBOL_NAME) RETURN_TYPE postfix_##FUNCTION_NAME() \ |
| 46 | + { \ |
| 47 | + GET_RETURN(RETURN_TYPE) impl_##FUNCTION_NAME(TRS_GET_HOOK_ARGS(FUNCTION_NAME, PARAMS)); \ |
| 48 | + } \ |
| 49 | + RETURN_TYPE impl_##FUNCTION_NAME(TRS_GET_HOOK_PARAMS(FUNCTION_NAME, PARAMS)) |
0 commit comments