diff --git a/README.md b/README.md index 45a83ed..4deab0a 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,16 @@ FAKE_VOID_FUNC(DISPLAY_init); And the unit test might look something like this: +```c +TEST_F(GreeterTests, init_initialises_display) +{ + UI_init(); + FFF_ASSERT_CALLS(DISPLAY_init, 1); +} +``` + +... or ... + ```c TEST_F(GreeterTests, init_initialises_display) { @@ -85,6 +95,17 @@ FAKE_VOID_FUNC(DISPLAY_output, char *); And the unit test might look something like this: +```c +TEST_F(UITests, write_line_outputs_lines_to_display) +{ + char msg[] = "helloworld"; + UI_write_line(msg); + FFF_ASSERT(DISPLAY_output, msg); +} +``` + +... or ... + ```c TEST_F(UITests, write_line_outputs_lines_to_display) { @@ -95,7 +116,6 @@ TEST_F(UITests, write_line_outputs_lines_to_display) } ``` - There is no more magic here, the `FAKE_VOID_FUNC` works as in the previous example. The number of arguments that the function takes is calculated, and the macro arguments following the function name defines the argument @@ -104,6 +124,20 @@ type (a char pointer in this example). A variable is created for every argument in the form `"function_name"fake.argN_val` +### Variadic argument assertions + +These are a recent addition to the framework. The range of available assertions is +listed in the cheat sheet at the foot of this page. The assertions use a simple +assertion macro defined internally. To override with a macro from some test framework, +do the following in some header you include in all your tests: + +```c +// my_test_framework_header.h +... +#define _FFF_ASSERT_EQ_MSG(expected, actual, message) MY_CUSTOM_ASSERTION(expected, actual, message) +#include "fff.h" +... +``` ## Return values @@ -128,6 +162,21 @@ FAKE_VALUE_FUNC(unsigned int, DISPLAY_get_line_insert_index); And the unit test might look something like this: +```c +TEST_F(UITests, when_empty_lines_write_line_doesnt_clear_screen) +{ + // given + FFF_RETURN(DISPLAY_get_line_insert_index,1); + char msg[] = "helloworld"; + // when + UI_write_line(msg); + // then + FFF_ASSERT_NOT_CALLED(DISPLAY_clear); +} +``` + +... or ... + ```c TEST_F(UITests, when_empty_lines_write_line_doesnt_clear_screen) { @@ -154,7 +203,34 @@ you would use a syntax like this: FAKE_VALUE_FUNC(double, pow, double, double); ``` +*N.B.* When using the variadic form (i.e. `FFF_RETURN(FN, ...)`), the hidden value sequence array +is declared locally by default. If you want to set a return sequence in a function other than +the test body (e.g. in a fixture setup method or helper function used in multiple tests), you'll +need to prefix the macro invocation with the `static` keyword. e.g. + +```c +void setup(void) +{ + // given + static FFF_RETURN(DISPLAY_get_line_insert_index, 1, 2, 3); +} + +TEST_F(UITests, when_empty_lines_write_line_doesnt_clear_screen) +{ +... +//Some test logic exercising DISPLAY_get_line_insert_index +... +} + +TEST_F(UITests, when_empty_lines_write_line_bla) +{ +... +//Some more test logic exercising DISPLAY_get_line_insert_index +... +} +``` +The static keyword is not necessary when specifying a single value, as the macro uses the dedicated struct member in this case. ## Resetting a fake @@ -226,6 +302,18 @@ They are reset by calling `FFF_RESET_HISTORY();` The framework will by default store the arguments for the last ten calls made to a fake function. +```c +TEST_F(FFFTestSuite, when_fake_func_called_then_arguments_captured_in_history) +{ + voidfunc2('g', 'h'); + voidfunc2('i', 'j'); + FFF_ASSERT_NTH(voidfunc2, 1, 'g', 'h'); + FFF_ASSERT_NTH(voidfunc2, 2, 'i', 'j'); +} +``` + +... or ... + ```c TEST_F(FFFTestSuite, when_fake_func_called_then_arguments_captured_in_history) { @@ -288,6 +376,21 @@ with for the fake function. It is probably easier to describe with an example: // faking "long longfunc();" FAKE_VALUE_FUNC(long, longfunc0); +TEST_F(FFFTestSuite, return_value_sequences_exhausted) +{ + FFF_RETURN(longfunc0, myReturnVals, 3, 7, 9); + ASSERT_EQ(3, longfunc0()); + ASSERT_EQ(7, longfunc0()); + ASSERT_EQ(9, longfunc0()); + ASSERT_EQ(9, longfunc0()); + ASSERT_EQ(9, longfunc0()); +} +``` +... or ... +```c +// faking "long longfunc();" +FAKE_VALUE_FUNC(long, longfunc0); + TEST_F(FFFTestSuite, return_value_sequences_exhausted) { long myReturnVals[3] = { 3, 7, 9 }; @@ -579,8 +682,18 @@ So whats the point? ## Cheat Sheet -| Macro | Description | Example | -|-------|-------------|---------| -| FAKE_VOID_FUNC(fn [,arg_types*]); | Define a fake function named fn returning void with n arguments | FAKE_VOID_FUNC(DISPLAY_output_message, const char*); | -| FAKE_VALUE_FUNC(return_type, fn [,arg_types*]); | Define a fake function returning a value with type return_type taking n arguments | FAKE_VALUE_FUNC(int, DISPLAY_get_line_insert_index); | -| RESET_FAKE(fn); | Reset the state of fake function called fn | RESET_FAKE(DISPLAY_init); | +| Macro | Description | Example | +|-------------------------------------------------|-----------------------------------------------------------------------------------|----------------------------------------------------------| +| FAKE_VOID_FUNC(fn [,arg_types*]); | Define a fake function named fn returning void with n arguments | FAKE_VOID_FUNC(DISPLAY_output_message, const char*); | +| FAKE_VALUE_FUNC(return_type, fn [,arg_types*]); | Define a fake function returning a value with type return_type taking n arguments | FAKE_VALUE_FUNC(int, DISPLAY_get_line_insert_index); | +| RESET_FAKE(fn); | Reset the state of fake function called fn | RESET_FAKE(DISPLAY_init); | +| FFF_RETURN(fn, ...return_value(s)*); | Set one or more return values (final value repeated if calls > values) | FFF_RETURN(DISPLAY_init, 1, 2, 3); | +| FFF_ASSERT_CALLED(fn); | Assert that a function was called once and only once. | FFF_ASSERT_CALLED(DISPLAY_init); | +| FFF_ASSERT_NOT_CALLED(fn); | Assert that a function was not called. | FFF_ASSERT_NOT_CALLED(DISPLAY_init); | +| FFF_ASSERT_CALLS(fn, call_count); | Assert that a function was called the specified number of times. | FFF_ASSERT_CALLS(DISPLAY_init, 3); | +| FFF_ASSERT(fn, ...arg_value(s)) | Assert that a function was called only once with the specified argument values. | FFF_ASSERT(DISPLAY_output_message, my_message_ptr); | +| FFF_ASSERT_LAST(fn, ...arg_value(s)) | Assert that the last call to a function had the specified argument values. | FFF_ASSERT_LAST(DISPLAY_output_message, my_message_ptr); | +| FFF_ASSERT_ANY(fn, ...arg_value(s)) | Assert that any call to a function had the specified argument values. | FFF_ASSERT_ANY(DISPLAY_output_message, my_message_ptr); | +| FFF_ASSERT_NONE(fn, ...arg_value(s)) | Assert that no calls to a function had the specified argument values. | FFF_ASSERT_NONE(DISPLAY_output_message, my_message_ptr); | + +*N.B.* All of the function argument assertions support partial specification of arguments. I.e. Given a function taking 3 args, you may just specify the first argument for verification. Any arguments that are specified must be specified from left to right however. i.e. it is possibly to specify arguments 0 and 1, but not arguments 0 and 2 (ignoring the value of 1). diff --git a/fakegen.rb b/fakegen.rb index e21387f..6170def 100644 --- a/fakegen.rb +++ b/fakegen.rb @@ -1,10 +1,11 @@ - # fakegen.rb # A simple code generator to create some C macros for defining test fake functions +require_relative './pp_iterators.rb' $cpp_output = true -$MAX_ARGS = 20 +$MAX_ARGS = 20 # Max faked function argument count +$MAX_ITER = 64 # Max args for iteration and arg counting macros $DEFAULT_ARG_HISTORY = 50 $MAX_CALL_HISTORY = 50 @@ -29,14 +30,11 @@ def output_constants end - - - # ------ Helper macros to use internally ------ # def output_internal_helper_macros putd "/* -- INTERNAL HELPER MACROS -- */" - define_return_sequence_helper + define_return_sequence_helpers define_custom_fake_sequence_helper define_reset_fake_macro define_declare_arg_helper @@ -53,17 +51,37 @@ def output_internal_helper_macros define_return_fake_result_helper define_extern_c_helper define_reset_fake_helper + define_fake_helpers + define_call_verification_helpers putd "/* -- END INTERNAL HELPER MACROS -- */" puts end -def define_return_sequence_helper +def define_return_sequence_helpers putd_backslash "#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN)" indent { putd_backslash "FUNCNAME##_fake.return_val_seq = ARRAY_POINTER;" putd "FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;" } + # The elaborate construction of SET_RETURN allows it to be prefixed with `static` + # in case you want to initialise a sequence outside the test body (e.g. in a fixture + # setup method or whatever) + putd <<-'EOT' + +/* FFF_RETURN (begin) */ +#define FFF_RETURN(...) \ + _FFF_SEQ_DEF(__VA_ARGS__); if(PP_NARG(__VA_ARGS__) == 2) {FFF_RETURN_VAL(__VA_ARGS__, 0);} else {_FFF_RETURN_SEQ(HEAD(__VA_ARGS__));} +#define _FFF_RET_TYPE(FN) __typeof__(FFF_RET(FN)) +#define _FFF_SEQ(FN) CAT(FN, __LINE__) +#define _FFF_SEQ_DEF(FN, ...) _FFF_RET_TYPE(FN) _FFF_SEQ(FN)[] = {__VA_ARGS__} +#define _FFF_SEQ_LEN(FN) (sizeof(_FFF_SEQ(FN))/sizeof(FFF_RET(FN))) +#define FFF_RETURN_VAL(FN, ...) FFF_RET(FN) = HEAD(__VA_ARGS__) +#define _FFF_RETURN_SEQ(FN) SET_RETURN_SEQ(FN, _FFF_SEQ(FN), _FFF_SEQ_LEN(FN)); \ + _FFF_ASSERT_TRUE_MSG(FFF(FN).return_val_seq_len>0, "No return values specified") +/* FFF_RETURN (end) */ + +EOT end def define_custom_fake_sequence_helper @@ -159,9 +177,9 @@ def define_value_function_variables_helper puts putd_backslash "#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)" indent { - putd_backslash "RETURN_TYPE return_val;" - putd_backslash "int return_val_seq_len;" - putd_backslash "int return_val_seq_idx;" + putd_backslash "RETURN_TYPE return_val;" + putd_backslash "int return_val_seq_len;" + putd_backslash "int return_val_seq_idx;" putd_backslash "RETURN_TYPE * return_val_seq;" } end @@ -208,8 +226,8 @@ def define_extern_c_helper puts putd "#ifdef __cplusplus" indent { - putd "#define FFF_EXTERN_C extern \"C\"{" - putd "#define FFF_END_EXTERN_C } " + putd "#define FFF_EXTERN_C extern \"C\"{" + putd "#define FFF_END_EXTERN_C } " } putd "#else /* ansi c */" indent { @@ -231,6 +249,39 @@ def define_reset_fake_helper putd "}" } end + +def define_fake_helpers + putd <<-EOH +#define FFF(FN) FN##_fake +#define FFF_CALLS(FN) FFF(FN).call_count +#define FFF_LAST_ARG_VAL(FN, ARG_IDX) FFF(FN).arg##ARG_IDX##_val +#define FFF_NTH_ARG_VAL(FN, CALL_IDX, ARG_IDX) FFF(FN).arg##ARG_IDX##_history[CALL_IDX-1] +#define FFF_RET(FN) FFF(FN).return_val + EOH +end + +def define_call_verification_helpers + putd <<-EOH +#define _FFF_VERIFY_ARG(FN, VAL, ARG_IDX) VAL == FFF_LAST_ARG_VAL(FN, ARG_IDX) +#define _FFF_VERIFY_HISTORICAL_ARG(FN, CALL_IDX, VAL, ARG_IDX) (VAL == FFF_NTH_ARG_VAL(FN, CALL_IDX, ARG_IDX)) +#define _FFF_AND_VERIFY_NTH_CALL_ARG(FN, CALL_IDX, VAL, ARG_IDX) && _FFF_VERIFY_HISTORICAL_ARG(FN, CALL_IDX, VAL, ARG_IDX) +#define _FFF_VERIFY_NTH_CALL(FN, CALL_IDX, ...) \ + ( (CALL_IDX > 0) && (CALL_IDX <= FFF_CALLS(FN)) PP_2PAR_EACH_IDX(_FFF_AND_VERIFY_NTH_CALL_ARG, FN, CALL_IDX, __VA_ARGS__) ) + +//This uses GCC compound statement expression: +//https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html +#define _FFF_VERIFY_ANY_CALL(FN, ...) ({ \ + int verified = 0; \ + int call_idx = FFF_CALLS(FN); \ + while(call_idx && !verified) { \ + verified |= _FFF_VERIFY_NTH_CALL(FN, call_idx, __VA_ARGS__); \ + call_idx--; \ + } \ + verified; \ + }) + + EOH +end # ------ End Helper macros ------ # #fakegen helpers to print at levels of indentation @@ -254,7 +305,7 @@ def popd end def indent - pushd + pushd yield popd end @@ -275,7 +326,7 @@ def output_macro(arg_count, has_varargs, is_value_function) output_variables(saved_arg_count, has_varargs, is_value_function) } } - + puts output_macro_header(define_macro_name, saved_arg_count, has_varargs, return_type) indent { @@ -289,9 +340,9 @@ def output_macro(arg_count, has_varargs, is_value_function) putd_backslash "DEFINE_RESET_FUNCTION(FUNCNAME)" } } - + puts - + output_macro_header(fake_macro_name, saved_arg_count, has_varargs, return_type) indent { putd macro_signature_for(declare_macro_name, saved_arg_count, has_varargs, return_type) @@ -329,7 +380,7 @@ def macro_signature_for(macro_name, arg_count, has_varargs, return_type) def output_variables(arg_count, has_varargs, is_value_function) in_struct{ - arg_count.times { |argN| + arg_count.times { |argN| putd_backslash "DECLARE_ARG(ARG#{argN}_TYPE, #{argN}, FUNCNAME)" } putd_backslash "DECLARE_ALL_FUNC_COMMON" @@ -472,14 +523,14 @@ def define_fff_globals indent { putd_backslash "if(fff.call_history_idx < FFF_CALL_HISTORY_LEN)" indent { - putd "fff.call_history[fff.call_history_idx++] = (fff_function_t)function;" + putd "fff.call_history[fff.call_history_idx++] = (fff_function_t)function;" } } end def extern_c putd_backslash "FFF_EXTERN_C" - indent { + indent { yield } putd_backslash "FFF_END_EXTERN_C" @@ -509,8 +560,8 @@ def msvc_expand_macro_fix putd "#define EXPAND(x) x" end -def generate_arg_sequence(args, prefix, do_reverse, joinstr) - fmap = (0..args).flat_map {|i| [prefix + i.to_s]} +def generate_arg_sequence(args, prefix, do_reverse, joinstr, first_idx = 0) + fmap = (first_idx..args).flat_map {|i| [prefix + i.to_s]} if do_reverse then fmap.reverse.join(joinstr) else fmap.join(", ") end end @@ -532,33 +583,25 @@ def counting_macro_instance(type, vararg = :non_vararg, prefix = "") end def output_macro_counting_shortcuts - msvc_expand_macro_fix + ppiter = PPIterators.new($MAX_ITER, use_gcc_extensions: true) putd <<-MACRO_COUNTING -#define PP_NARG_MINUS2(...) \ - EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())) - -#define PP_NARG_MINUS2_(...) \ - EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__)) - -#define PP_ARG_MINUS2_N(returnVal, #{generate_arg_sequence($MAX_ARGS, '_', false, ", ")}, N, ...) N - -#define PP_RSEQ_N_MINUS2() \ - #{generate_arg_sequence($MAX_ARGS, '', true, ',')} +#ifndef PP_NARG +#{ppiter.narg_common} +#{ppiter.narg} +#endif +#{ppiter.narg_minus(1)} -#define PP_NARG_MINUS1(...) \ - EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())) - -#define PP_NARG_MINUS1_(...) \ - EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__)) - -#define PP_ARG_MINUS1_N(#{generate_arg_sequence($MAX_ARGS, '_', false, ", ")}, N, ...) N - -#define PP_RSEQ_N_MINUS1() \ - #{generate_arg_sequence($MAX_ARGS, '', true, ',')} +#{ppiter.narg_minus(2)} +#ifndef PP_1PAR_EACH_IDX +#{ppiter.parameterised_each_with_index(1)} +#endif +#ifndef PP_2PAR_EACH_IDX +#{ppiter.parameterised_each_with_index(2)} +#endif /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */ @@ -584,6 +627,55 @@ def output_macro_counting_shortcuts MACRO_COUNTING end +def output_assertions + putd <<-'EOA' +/* ASSERTIONS (Public API) */ + +#define FFF_ASSERT_CALLS(FN, COUNT) _FFF_ASSERT_EQ_MSG(COUNT, FFF_CALLS(FN), #FN " called incorrect number of times") + +#define FFF_ASSERT_CALLED(FN) FFF_ASSERT_CALLS(FN, 1); + +#define FFF_ASSERT_NOT_CALLED(FN) FFF_ASSERT_CALLS(FN, 0); + +#define FFF_ASSERT(FN, ...) \ + FFF_ASSERT_CALLS(FN, 1); \ + PP_1PAR_EACH_IDX(_FFF_ASSERT_ARG, FN, __VA_ARGS__) + +#define FFF_ASSERT_NTH(FN, CALL_IDX, ...) \ + _FFF_ASSERT_TRUE_MSG(CALL_IDX > 0, "Invalid call index -- expected >0, got " #CALL_IDX); \ + _FFF_ASSERT_TRUE_MSG(FFF_CALLS(FN) >= CALL_IDX, #FN " not called " #CALL_IDX " times"); \ + PP_2PAR_EACH_IDX(_FFF_ASSERT_HISTORICAL_ARG, FN, CALL_IDX, __VA_ARGS__) + +#define FFF_ASSERT_LAST(FN, ...) FFF_ASSERT_NTH(FN, FFF_CALLS(FN), __VA_ARGS__) + +#define FFF_ASSERT_ANY(FN, ...) _FFF_ASSERT_TRUE_MSG(_FFF_VERIFY_ANY_CALL(FN, __VA_ARGS__), "No calls made to '"#FN"("#__VA_ARGS__")'") + +#define FFF_ASSERT_NONE(FN, ...) _FFF_ASSERT_FALSE_MSG(_FFF_VERIFY_ANY_CALL(FN, __VA_ARGS__), "At least one call made to '"#FN"("#__VA_ARGS__")'") + +/* ASSERTIONS (Internal) */ + +#ifndef _FFF_ASSERT_EQ_MSG +#include +#include +#define _FFF_ASSERT_EQ_MSG(expected, actual, message) do { \ + if(expected!=actual) {printf(message);} \ + assert(expected==actual); \ +} while(0) +#endif + +#ifndef _FFF_ASSERT_EQ +#define _FFF_ASSERT_EQ(expected, actual) _FFF_ASSERT_EQ_MSG(expected, actual, "Expected " #expected " / Got " #actual) +#endif + +#define _FFF_ASSERT_TRUE_MSG(COND, MSG) _FFF_ASSERT_EQ_MSG(((COND)>0), 1, MSG) +#define _FFF_ASSERT_FALSE_MSG(COND, MSG) _FFF_ASSERT_EQ_MSG((COND), 0, MSG) + +#define _FFF_ASSERT_ARG(FN, VAL, ARG_IDX) _FFF_ASSERT_EQ_MSG(VAL, FFF_LAST_ARG_VAL(FN, ARG_IDX), #FN" parameter value mismatch at ARG"#ARG_IDX); + +#define _FFF_ASSERT_HISTORICAL_ARG(FN, CALL_IDX, VAL, ARG_IDX) _FFF_ASSERT_EQ_MSG(VAL, FFF_NTH_ARG_VAL(FN, CALL_IDX, ARG_IDX), #FN", call "#CALL_IDX": value mismatch for arg"#ARG_IDX); +EOA +end + def output_c_and_cpp include_guard { @@ -592,6 +684,7 @@ def output_c_and_cpp output_internal_helper_macros yield output_macro_counting_shortcuts + output_assertions } end diff --git a/fff.h b/fff.h index 230144e..8069006 100644 --- a/fff.h +++ b/fff.h @@ -40,6 +40,19 @@ SOFTWARE. #define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \ FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \ FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN; + +/* FFF_RETURN (begin) */ +#define FFF_RETURN(...) \ + _FFF_SEQ_DEF(__VA_ARGS__); if(PP_NARG(__VA_ARGS__) == 2) {FFF_RETURN_VAL(__VA_ARGS__, 0);} else {_FFF_RETURN_SEQ(HEAD(__VA_ARGS__));} +#define _FFF_RET_TYPE(FN) __typeof__(FFF_RET(FN)) +#define _FFF_SEQ(FN) CAT(FN, __LINE__) +#define _FFF_SEQ_DEF(FN, ...) _FFF_RET_TYPE(FN) _FFF_SEQ(FN)[] = {__VA_ARGS__} +#define _FFF_SEQ_LEN(FN) (sizeof(_FFF_SEQ(FN))/sizeof(FFF_RET(FN))) +#define FFF_RETURN_VAL(FN, ...) FFF_RET(FN) = HEAD(__VA_ARGS__) +#define _FFF_RETURN_SEQ(FN) SET_RETURN_SEQ(FN, _FFF_SEQ(FN), _FFF_SEQ_LEN(FN)); \ + _FFF_ASSERT_TRUE_MSG(FFF(FN).return_val_seq_len>0, "No return values specified") +/* FFF_RETURN (end) */ + #define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \ FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \ FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN; @@ -116,6 +129,20 @@ SOFTWARE. memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \ FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN; \ } +#define FFF(FN) FN##_fake +#define FFF_CALLS(FN) FFF(FN).call_count +#define FFF_LAST_ARG_VAL(FN, ARG_IDX) FFF(FN).arg##ARG_IDX##_val +#define FFF_NTH_ARG_VAL(FN, CALL_IDX, ARG_IDX) FFF(FN).arg##ARG_IDX##_history[CALL_IDX-1] +#define FFF_RET(FN) FFF(FN).return_val +#define _FFF_VERIFY_ARG(FN, VAL, ARG_IDX) VAL == FFF_LAST_ARG_VAL(FN, ARG_IDX) +#define _FFF_VERIFY_HISTORICAL_ARG(FN, CALL_IDX, VAL, ARG_IDX) (VAL == FFF_NTH_ARG_VAL(FN, CALL_IDX, ARG_IDX)) +#define _FFF_AND_VERIFY_NTH_CALL_ARG(FN, CALL_IDX, VAL, ARG_IDX) && _FFF_VERIFY_HISTORICAL_ARG(FN, CALL_IDX, VAL, ARG_IDX) +#define _FFF_VERIFY_NTH_CALL(FN, CALL_IDX, ...) ( (CALL_IDX > 0) && (CALL_IDX <= FFF_CALLS(FN)) PP_2PAR_EACH_IDX(_FFF_AND_VERIFY_NTH_CALL_ARG, FN, CALL_IDX, __VA_ARGS__) ) + +//This uses GCC compound statement expression: +//https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html +#define _FFF_VERIFY_ANY_CALL(FN, ...) ({ int verified = 0; int call_idx = FFF_CALLS(FN); while(call_idx && !verified) { verified |= _FFF_VERIFY_NTH_CALL(FN, call_idx, __VA_ARGS__); call_idx--; } verified; }) + /* -- END INTERNAL HELPER MACROS -- */ typedef void (*fff_function_t)(void); @@ -179,7 +206,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC0(FUNCNAME) \ DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \ DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \ - + #define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \ FFF_EXTERN_C \ @@ -224,7 +251,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \ DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \ DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ FFF_EXTERN_C \ @@ -272,7 +299,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ FFF_EXTERN_C \ @@ -323,7 +350,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ FFF_EXTERN_C \ @@ -377,7 +404,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ FFF_EXTERN_C \ @@ -434,7 +461,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ FFF_EXTERN_C \ @@ -494,7 +521,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ FFF_EXTERN_C \ @@ -557,7 +584,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ FFF_EXTERN_C \ @@ -623,7 +650,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ FFF_EXTERN_C \ @@ -692,7 +719,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ FFF_EXTERN_C \ @@ -764,7 +791,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ FFF_EXTERN_C \ @@ -839,7 +866,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ FFF_EXTERN_C \ @@ -917,7 +944,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ FFF_EXTERN_C \ @@ -998,7 +1025,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ FFF_EXTERN_C \ @@ -1082,7 +1109,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ FFF_EXTERN_C \ @@ -1169,7 +1196,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ FFF_EXTERN_C \ @@ -1259,7 +1286,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ FFF_EXTERN_C \ @@ -1352,7 +1379,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ FFF_EXTERN_C \ @@ -1448,7 +1475,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ FFF_EXTERN_C \ @@ -1547,7 +1574,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ FFF_EXTERN_C \ @@ -1649,7 +1676,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \ FFF_EXTERN_C \ @@ -1699,7 +1726,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \ DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \ DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \ - + #define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \ FFF_EXTERN_C \ @@ -1752,7 +1779,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \ DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \ DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ FFF_EXTERN_C \ @@ -1808,7 +1835,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ FFF_EXTERN_C \ @@ -1867,7 +1894,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ FFF_EXTERN_C \ @@ -1929,7 +1956,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ FFF_EXTERN_C \ @@ -1994,7 +2021,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ FFF_EXTERN_C \ @@ -2062,7 +2089,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ FFF_EXTERN_C \ @@ -2133,7 +2160,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ FFF_EXTERN_C \ @@ -2207,7 +2234,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ FFF_EXTERN_C \ @@ -2284,7 +2311,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ FFF_EXTERN_C \ @@ -2364,7 +2391,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ FFF_EXTERN_C \ @@ -2447,7 +2474,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ FFF_EXTERN_C \ @@ -2533,7 +2560,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ FFF_EXTERN_C \ @@ -2622,7 +2649,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ FFF_EXTERN_C \ @@ -2714,7 +2741,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ FFF_EXTERN_C \ @@ -2809,7 +2836,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ FFF_EXTERN_C \ @@ -2907,7 +2934,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ FFF_EXTERN_C \ @@ -3008,7 +3035,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ FFF_EXTERN_C \ @@ -3112,7 +3139,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ FFF_EXTERN_C \ @@ -3219,7 +3246,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \ - + #define DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ FFF_EXTERN_C \ @@ -3329,7 +3356,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \ - + #define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \ FFF_EXTERN_C \ @@ -3371,7 +3398,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ FFF_EXTERN_C \ @@ -3416,7 +3443,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ FFF_EXTERN_C \ @@ -3464,7 +3491,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ FFF_EXTERN_C \ @@ -3515,7 +3542,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ FFF_EXTERN_C \ @@ -3569,7 +3596,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ FFF_EXTERN_C \ @@ -3626,7 +3653,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ FFF_EXTERN_C \ @@ -3686,7 +3713,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ FFF_EXTERN_C \ @@ -3749,7 +3776,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ FFF_EXTERN_C \ @@ -3815,7 +3842,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ FFF_EXTERN_C \ @@ -3884,7 +3911,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ FFF_EXTERN_C \ @@ -3956,7 +3983,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ FFF_EXTERN_C \ @@ -4031,7 +4058,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ FFF_EXTERN_C \ @@ -4109,7 +4136,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ FFF_EXTERN_C \ @@ -4190,7 +4217,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ FFF_EXTERN_C \ @@ -4274,7 +4301,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ FFF_EXTERN_C \ @@ -4361,7 +4388,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ FFF_EXTERN_C \ @@ -4451,7 +4478,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ FFF_EXTERN_C \ @@ -4544,7 +4571,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ - + #define DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ FFF_EXTERN_C \ @@ -4640,7 +4667,7 @@ FFF_END_EXTERN_C \ #define FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \ FFF_EXTERN_C \ @@ -4688,7 +4715,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ FFF_EXTERN_C \ @@ -4739,7 +4766,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ FFF_EXTERN_C \ @@ -4793,7 +4820,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ FFF_EXTERN_C \ @@ -4850,7 +4877,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ FFF_EXTERN_C \ @@ -4910,7 +4937,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ FFF_EXTERN_C \ @@ -4973,7 +5000,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ FFF_EXTERN_C \ @@ -5039,7 +5066,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ FFF_EXTERN_C \ @@ -5108,7 +5135,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ FFF_EXTERN_C \ @@ -5180,7 +5207,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ FFF_EXTERN_C \ @@ -5255,7 +5282,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ FFF_EXTERN_C \ @@ -5333,7 +5360,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ FFF_EXTERN_C \ @@ -5414,7 +5441,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ FFF_EXTERN_C \ @@ -5498,7 +5525,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ FFF_EXTERN_C \ @@ -5585,7 +5612,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ FFF_EXTERN_C \ @@ -5675,7 +5702,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ FFF_EXTERN_C \ @@ -5768,7 +5795,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ FFF_EXTERN_C \ @@ -5864,7 +5891,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ FFF_EXTERN_C \ @@ -5963,7 +5990,7 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \ - + #define DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ FFF_EXTERN_C \ @@ -6065,28 +6092,189 @@ FFF_END_EXTERN_C \ #define FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \ - -/* MSVC expand macro fix */ -#define EXPAND(x) x - -#define PP_NARG_MINUS2(...) EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())) - -#define PP_NARG_MINUS2_(...) EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__)) - -#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N -#define PP_RSEQ_N_MINUS2() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 +#ifndef PP_NARG +#ifndef PP_UTIL + #define EXPAND(x) x + #define HEAD(FIRST, ...) FIRST + #define TAIL(FIRST, ...) __VA_ARGS__ + #define CAT(A, B) _CAT(A,B) + #define _CAT(A, B) A ## B + #define PP_RSEQ_N() 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 +#endif //PP_UTIL -#define PP_NARG_MINUS1(...) EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())) +#ifndef PP_NARG + #define PP_NARG(...) EXPAND(PP_ARG_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #define PP_ARG_N(...) EXPAND(_PP_ARG_N(__VA_ARGS__)) + #define _PP_ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, N, ...) N +#endif //PP_NARG -#define PP_NARG_MINUS1_(...) EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__)) +#endif -#define PP_ARG_MINUS1_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N +#ifndef PP_NARG_MINUS1 + #define PP_NARG_MINUS1(...) EXPAND(PP_ARG_MINUS1_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #define PP_ARG_MINUS1_N(...) EXPAND(_PP_ARG_MINUS1_N(__VA_ARGS__)) + #define _PP_ARG_MINUS1_N(__0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, N, ...) N +#endif //PP_NARG_MINUS1 + + +#ifndef PP_NARG_MINUS2 + #define PP_NARG_MINUS2(...) EXPAND(PP_ARG_MINUS2_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #define PP_ARG_MINUS2_N(...) EXPAND(_PP_ARG_MINUS2_N(__VA_ARGS__)) + #define _PP_ARG_MINUS2_N(__1, __0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, N, ...) N +#endif //PP_NARG_MINUS2 + + +#ifndef PP_1PAR_EACH_IDX +#ifndef PP_1PAR_EACH_IDX + #define PP_1PAR_EACH_IDX(TF, P1, ...) _PP_1PAR_EACH_IDX(TF, P1, PP_NARG(__VA_ARGS__), __VA_ARGS__) + #define _PP_1PAR_EACH_IDX(TF, P1, N, ...) __PP_1PAR_EACH_IDX(TF, P1, N, __VA_ARGS__) + #define __PP_1PAR_EACH_IDX(TF, P1, N, ...) _PP_1PAR_IDX_##N(TF, P1, __VA_ARGS__) + + #define _PP_1PAR_IDX_0(TF, ARG, dummy) + #define _PP_1PAR_IDX_1(TF, P1, _0) TF(P1, _0, 0) + #define _PP_1PAR_IDX_2(TF, P1, _0, _1) TF(P1, _0, 0) TF(P1, _1, 1) + #define _PP_1PAR_IDX_3(TF, P1, _0, _1, _2) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) + #define _PP_1PAR_IDX_4(TF, P1, _0, _1, _2, _3) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) + #define _PP_1PAR_IDX_5(TF, P1, _0, _1, _2, _3, _4) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) + #define _PP_1PAR_IDX_6(TF, P1, _0, _1, _2, _3, _4, _5) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) + #define _PP_1PAR_IDX_7(TF, P1, _0, _1, _2, _3, _4, _5, _6) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) + #define _PP_1PAR_IDX_8(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) + #define _PP_1PAR_IDX_9(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) + #define _PP_1PAR_IDX_10(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) + #define _PP_1PAR_IDX_11(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) + #define _PP_1PAR_IDX_12(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) + #define _PP_1PAR_IDX_13(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) + #define _PP_1PAR_IDX_14(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) + #define _PP_1PAR_IDX_15(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) + #define _PP_1PAR_IDX_16(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) + #define _PP_1PAR_IDX_17(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) + #define _PP_1PAR_IDX_18(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) + #define _PP_1PAR_IDX_19(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) + #define _PP_1PAR_IDX_20(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) + #define _PP_1PAR_IDX_21(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) + #define _PP_1PAR_IDX_22(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) + #define _PP_1PAR_IDX_23(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) + #define _PP_1PAR_IDX_24(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) + #define _PP_1PAR_IDX_25(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) + #define _PP_1PAR_IDX_26(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) + #define _PP_1PAR_IDX_27(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) + #define _PP_1PAR_IDX_28(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) + #define _PP_1PAR_IDX_29(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) + #define _PP_1PAR_IDX_30(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) + #define _PP_1PAR_IDX_31(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) + #define _PP_1PAR_IDX_32(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) + #define _PP_1PAR_IDX_33(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) + #define _PP_1PAR_IDX_34(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) + #define _PP_1PAR_IDX_35(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) + #define _PP_1PAR_IDX_36(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) + #define _PP_1PAR_IDX_37(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) + #define _PP_1PAR_IDX_38(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) + #define _PP_1PAR_IDX_39(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) + #define _PP_1PAR_IDX_40(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) + #define _PP_1PAR_IDX_41(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) + #define _PP_1PAR_IDX_42(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) + #define _PP_1PAR_IDX_43(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) + #define _PP_1PAR_IDX_44(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) + #define _PP_1PAR_IDX_45(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) + #define _PP_1PAR_IDX_46(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) + #define _PP_1PAR_IDX_47(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) + #define _PP_1PAR_IDX_48(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) + #define _PP_1PAR_IDX_49(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) + #define _PP_1PAR_IDX_50(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) + #define _PP_1PAR_IDX_51(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) + #define _PP_1PAR_IDX_52(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) + #define _PP_1PAR_IDX_53(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) + #define _PP_1PAR_IDX_54(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) + #define _PP_1PAR_IDX_55(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) + #define _PP_1PAR_IDX_56(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) + #define _PP_1PAR_IDX_57(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) + #define _PP_1PAR_IDX_58(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) + #define _PP_1PAR_IDX_59(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) TF(P1, _58, 58) + #define _PP_1PAR_IDX_60(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) TF(P1, _58, 58) TF(P1, _59, 59) + #define _PP_1PAR_IDX_61(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) TF(P1, _58, 58) TF(P1, _59, 59) TF(P1, _60, 60) + #define _PP_1PAR_IDX_62(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) TF(P1, _58, 58) TF(P1, _59, 59) TF(P1, _60, 60) TF(P1, _61, 61) + #define _PP_1PAR_IDX_63(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) TF(P1, _58, 58) TF(P1, _59, 59) TF(P1, _60, 60) TF(P1, _61, 61) TF(P1, _62, 62) + #define _PP_1PAR_IDX_64(TF, P1, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63) TF(P1, _0, 0) TF(P1, _1, 1) TF(P1, _2, 2) TF(P1, _3, 3) TF(P1, _4, 4) TF(P1, _5, 5) TF(P1, _6, 6) TF(P1, _7, 7) TF(P1, _8, 8) TF(P1, _9, 9) TF(P1, _10, 10) TF(P1, _11, 11) TF(P1, _12, 12) TF(P1, _13, 13) TF(P1, _14, 14) TF(P1, _15, 15) TF(P1, _16, 16) TF(P1, _17, 17) TF(P1, _18, 18) TF(P1, _19, 19) TF(P1, _20, 20) TF(P1, _21, 21) TF(P1, _22, 22) TF(P1, _23, 23) TF(P1, _24, 24) TF(P1, _25, 25) TF(P1, _26, 26) TF(P1, _27, 27) TF(P1, _28, 28) TF(P1, _29, 29) TF(P1, _30, 30) TF(P1, _31, 31) TF(P1, _32, 32) TF(P1, _33, 33) TF(P1, _34, 34) TF(P1, _35, 35) TF(P1, _36, 36) TF(P1, _37, 37) TF(P1, _38, 38) TF(P1, _39, 39) TF(P1, _40, 40) TF(P1, _41, 41) TF(P1, _42, 42) TF(P1, _43, 43) TF(P1, _44, 44) TF(P1, _45, 45) TF(P1, _46, 46) TF(P1, _47, 47) TF(P1, _48, 48) TF(P1, _49, 49) TF(P1, _50, 50) TF(P1, _51, 51) TF(P1, _52, 52) TF(P1, _53, 53) TF(P1, _54, 54) TF(P1, _55, 55) TF(P1, _56, 56) TF(P1, _57, 57) TF(P1, _58, 58) TF(P1, _59, 59) TF(P1, _60, 60) TF(P1, _61, 61) TF(P1, _62, 62) TF(P1, _63, 63) +#endif //PP_1PAR_EACH_IDX -#define PP_RSEQ_N_MINUS1() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 +#endif +#ifndef PP_2PAR_EACH_IDX +#ifndef PP_2PAR_EACH_IDX + #define PP_2PAR_EACH_IDX(TF, P1, P2, ...) _PP_2PAR_EACH_IDX(TF, P1, P2, PP_NARG(__VA_ARGS__), __VA_ARGS__) + #define _PP_2PAR_EACH_IDX(TF, P1, P2, N, ...) __PP_2PAR_EACH_IDX(TF, P1, P2, N, __VA_ARGS__) + #define __PP_2PAR_EACH_IDX(TF, P1, P2, N, ...) _PP_2PAR_IDX_##N(TF, P1, P2, __VA_ARGS__) + + #define _PP_2PAR_IDX_0(TF, ARG, dummy) + #define _PP_2PAR_IDX_1(TF, P1, P2, _0) TF(P1, P2, _0, 0) + #define _PP_2PAR_IDX_2(TF, P1, P2, _0, _1) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) + #define _PP_2PAR_IDX_3(TF, P1, P2, _0, _1, _2) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) + #define _PP_2PAR_IDX_4(TF, P1, P2, _0, _1, _2, _3) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) + #define _PP_2PAR_IDX_5(TF, P1, P2, _0, _1, _2, _3, _4) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) + #define _PP_2PAR_IDX_6(TF, P1, P2, _0, _1, _2, _3, _4, _5) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) + #define _PP_2PAR_IDX_7(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) + #define _PP_2PAR_IDX_8(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) + #define _PP_2PAR_IDX_9(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) + #define _PP_2PAR_IDX_10(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) + #define _PP_2PAR_IDX_11(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) + #define _PP_2PAR_IDX_12(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) + #define _PP_2PAR_IDX_13(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) + #define _PP_2PAR_IDX_14(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) + #define _PP_2PAR_IDX_15(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) + #define _PP_2PAR_IDX_16(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) + #define _PP_2PAR_IDX_17(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) + #define _PP_2PAR_IDX_18(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) + #define _PP_2PAR_IDX_19(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) + #define _PP_2PAR_IDX_20(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) + #define _PP_2PAR_IDX_21(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) + #define _PP_2PAR_IDX_22(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) + #define _PP_2PAR_IDX_23(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) + #define _PP_2PAR_IDX_24(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) + #define _PP_2PAR_IDX_25(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) + #define _PP_2PAR_IDX_26(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) + #define _PP_2PAR_IDX_27(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) + #define _PP_2PAR_IDX_28(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) + #define _PP_2PAR_IDX_29(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) + #define _PP_2PAR_IDX_30(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) + #define _PP_2PAR_IDX_31(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) + #define _PP_2PAR_IDX_32(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) + #define _PP_2PAR_IDX_33(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) + #define _PP_2PAR_IDX_34(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) + #define _PP_2PAR_IDX_35(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) + #define _PP_2PAR_IDX_36(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) + #define _PP_2PAR_IDX_37(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) + #define _PP_2PAR_IDX_38(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) + #define _PP_2PAR_IDX_39(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) + #define _PP_2PAR_IDX_40(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) + #define _PP_2PAR_IDX_41(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) + #define _PP_2PAR_IDX_42(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) + #define _PP_2PAR_IDX_43(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) + #define _PP_2PAR_IDX_44(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) + #define _PP_2PAR_IDX_45(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) + #define _PP_2PAR_IDX_46(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) + #define _PP_2PAR_IDX_47(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) + #define _PP_2PAR_IDX_48(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) + #define _PP_2PAR_IDX_49(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) + #define _PP_2PAR_IDX_50(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) + #define _PP_2PAR_IDX_51(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) + #define _PP_2PAR_IDX_52(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) + #define _PP_2PAR_IDX_53(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) + #define _PP_2PAR_IDX_54(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) + #define _PP_2PAR_IDX_55(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) + #define _PP_2PAR_IDX_56(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) + #define _PP_2PAR_IDX_57(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) + #define _PP_2PAR_IDX_58(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) + #define _PP_2PAR_IDX_59(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) TF(P1, P2, _58, 58) + #define _PP_2PAR_IDX_60(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) TF(P1, P2, _58, 58) TF(P1, P2, _59, 59) + #define _PP_2PAR_IDX_61(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) TF(P1, P2, _58, 58) TF(P1, P2, _59, 59) TF(P1, P2, _60, 60) + #define _PP_2PAR_IDX_62(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) TF(P1, P2, _58, 58) TF(P1, P2, _59, 59) TF(P1, P2, _60, 60) TF(P1, P2, _61, 61) + #define _PP_2PAR_IDX_63(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) TF(P1, P2, _58, 58) TF(P1, P2, _59, 59) TF(P1, P2, _60, 60) TF(P1, P2, _61, 61) TF(P1, P2, _62, 62) + #define _PP_2PAR_IDX_64(TF, P1, P2, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63) TF(P1, P2, _0, 0) TF(P1, P2, _1, 1) TF(P1, P2, _2, 2) TF(P1, P2, _3, 3) TF(P1, P2, _4, 4) TF(P1, P2, _5, 5) TF(P1, P2, _6, 6) TF(P1, P2, _7, 7) TF(P1, P2, _8, 8) TF(P1, P2, _9, 9) TF(P1, P2, _10, 10) TF(P1, P2, _11, 11) TF(P1, P2, _12, 12) TF(P1, P2, _13, 13) TF(P1, P2, _14, 14) TF(P1, P2, _15, 15) TF(P1, P2, _16, 16) TF(P1, P2, _17, 17) TF(P1, P2, _18, 18) TF(P1, P2, _19, 19) TF(P1, P2, _20, 20) TF(P1, P2, _21, 21) TF(P1, P2, _22, 22) TF(P1, P2, _23, 23) TF(P1, P2, _24, 24) TF(P1, P2, _25, 25) TF(P1, P2, _26, 26) TF(P1, P2, _27, 27) TF(P1, P2, _28, 28) TF(P1, P2, _29, 29) TF(P1, P2, _30, 30) TF(P1, P2, _31, 31) TF(P1, P2, _32, 32) TF(P1, P2, _33, 33) TF(P1, P2, _34, 34) TF(P1, P2, _35, 35) TF(P1, P2, _36, 36) TF(P1, P2, _37, 37) TF(P1, P2, _38, 38) TF(P1, P2, _39, 39) TF(P1, P2, _40, 40) TF(P1, P2, _41, 41) TF(P1, P2, _42, 42) TF(P1, P2, _43, 43) TF(P1, P2, _44, 44) TF(P1, P2, _45, 45) TF(P1, P2, _46, 46) TF(P1, P2, _47, 47) TF(P1, P2, _48, 48) TF(P1, P2, _49, 49) TF(P1, P2, _50, 50) TF(P1, P2, _51, 51) TF(P1, P2, _52, 52) TF(P1, P2, _53, 53) TF(P1, P2, _54, 54) TF(P1, P2, _55, 55) TF(P1, P2, _56, 56) TF(P1, P2, _57, 57) TF(P1, P2, _58, 58) TF(P1, P2, _59, 59) TF(P1, P2, _60, 60) TF(P1, P2, _61, 61) TF(P1, P2, _62, 62) TF(P1, P2, _63, 63) +#endif //PP_2PAR_EACH_IDX +#endif /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */ @@ -6181,5 +6369,49 @@ FFF_END_EXTERN_C \ +/* ASSERTIONS (Public API) */ + +#define FFF_ASSERT_CALLS(FN, COUNT) _FFF_ASSERT_EQ_MSG(COUNT, FFF_CALLS(FN), #FN " called incorrect number of times") + +#define FFF_ASSERT_CALLED(FN) FFF_ASSERT_CALLS(FN, 1); + +#define FFF_ASSERT_NOT_CALLED(FN) FFF_ASSERT_CALLS(FN, 0); + +#define FFF_ASSERT(FN, ...) \ + FFF_ASSERT_CALLS(FN, 1); \ + PP_1PAR_EACH_IDX(_FFF_ASSERT_ARG, FN, __VA_ARGS__) + +#define FFF_ASSERT_NTH(FN, CALL_IDX, ...) \ + _FFF_ASSERT_TRUE_MSG(CALL_IDX > 0, "Invalid call index -- expected >0, got " #CALL_IDX); \ + _FFF_ASSERT_TRUE_MSG(FFF_CALLS(FN) >= CALL_IDX, #FN " not called " #CALL_IDX " times"); \ + PP_2PAR_EACH_IDX(_FFF_ASSERT_HISTORICAL_ARG, FN, CALL_IDX, __VA_ARGS__) + +#define FFF_ASSERT_LAST(FN, ...) FFF_ASSERT_NTH(FN, FFF_CALLS(FN), __VA_ARGS__) + +#define FFF_ASSERT_ANY(FN, ...) _FFF_ASSERT_TRUE_MSG(_FFF_VERIFY_ANY_CALL(FN, __VA_ARGS__), "No calls made to '"#FN"("#__VA_ARGS__")'") + +#define FFF_ASSERT_NONE(FN, ...) _FFF_ASSERT_FALSE_MSG(_FFF_VERIFY_ANY_CALL(FN, __VA_ARGS__), "At least one call made to '"#FN"("#__VA_ARGS__")'") + +/* ASSERTIONS (Internal) */ + +#ifndef _FFF_ASSERT_EQ_MSG +#include +#include +#define _FFF_ASSERT_EQ_MSG(expected, actual, message) do { \ + if(expected!=actual) {printf(message);} \ + assert(expected==actual); \ +} while(0) +#endif + +#ifndef _FFF_ASSERT_EQ +#define _FFF_ASSERT_EQ(expected, actual) _FFF_ASSERT_EQ_MSG(expected, actual, "Expected " #expected " / Got " #actual) +#endif + +#define _FFF_ASSERT_TRUE_MSG(COND, MSG) _FFF_ASSERT_EQ_MSG(((COND)>0), 1, MSG) +#define _FFF_ASSERT_FALSE_MSG(COND, MSG) _FFF_ASSERT_EQ_MSG((COND), 0, MSG) + +#define _FFF_ASSERT_ARG(FN, VAL, ARG_IDX) _FFF_ASSERT_EQ_MSG(VAL, FFF_LAST_ARG_VAL(FN, ARG_IDX), #FN" parameter value mismatch at ARG"#ARG_IDX); + +#define _FFF_ASSERT_HISTORICAL_ARG(FN, CALL_IDX, VAL, ARG_IDX) _FFF_ASSERT_EQ_MSG(VAL, FFF_NTH_ARG_VAL(FN, CALL_IDX, ARG_IDX), #FN", call "#CALL_IDX": value mismatch for arg"#ARG_IDX); #endif /* FAKE_FUNCTIONS */ diff --git a/pp_iterators.rb b/pp_iterators.rb new file mode 100755 index 0000000..44cdc6c --- /dev/null +++ b/pp_iterators.rb @@ -0,0 +1,213 @@ +#!/usr/bin/env ruby + +# Generator logic for a family of macros for C metaprogramming +# See these blog posts in relation to VA_EACH: +# - http://ptspts.blogspot.ie/2013/11/how-to-apply-macro-to-all-arguments-of.html +# - https://codecraft.co/2014/11/25/variadic-macros-tricks/ (Similar, but recursive) +# There's a recursive approach described here, that i couldn't get to work... +# - http://saadahmad.ca/cc-preprocessor-metaprogramming-2/ + +require 'date' + +class PPIterators + + class CFile + INDENT = 2 + class << self + + def indent(content) + " " * INDENT + content.gsub("\n","\n ") + end + + def include_guard(name, content) + "#ifndef #{name}\n" + indent(content) + "\n#endif //#{name}\n" + + end + + def wrap_macro_body(m) + m.empty? ? m : "\#define #{m}" + end + + def wrap_macro_bodies(macros) + macros.map{ |m| wrap_macro_body(m) }.join("\n") + end + + def wrap_macro_set(guard_name, macros) + include_guard(guard_name, wrap_macro_bodies(macros)) + end + end + end + + MAX_ARG_COUNT_DEFAULT = 64 + attr_reader :max_arg_count + def initialize(n = MAX_ARG_COUNT_DEFAULT, use_gcc_extensions: true) + @gcc = use_gcc_extensions + @max_arg_count = n + end + + def arg_seq(reverse: false, first: 0, last: @max_arg_count, prefix: '', sep:', ') + seq = (first..last).map{ |i| "#{prefix}#{i}"} + seq.reverse! if reverse + seq.join(sep) + end + + def narg_common + CFile::wrap_macro_set('PP_UTIL', + [ + # Fix for MSVC expansion order (nicked from fff project) + "EXPAND(x) x", + "HEAD(FIRST, ...) FIRST", + "TAIL(FIRST, ...) __VA_ARGS__", + "CAT(A, B) _CAT(A,B)", + "_CAT(A, B) A ## B", + "PP_RSEQ_N() #{arg_seq(reverse: true)}" + ] + ) + end + + def arg_n_seq(delta) + seq = arg_seq(first: 1, last: @gcc ? @max_arg_count+1 : @max_arg_count, prefix: '_') + delta==0 ? seq :[arg_seq(first: 0, last: delta-1, prefix: '__', reverse: true), seq].join(', ') + end + + def narg + narg_minus(0) + end + + def narg_minus(m) + suffix = m>0 ? "_MINUS#{m}" : '' + CFile::wrap_macro_set("PP_NARG#{suffix}", + [ + "PP_NARG#{suffix}(...) EXPAND(PP_ARG#{suffix}_N(#{'_0, ##' if @gcc}__VA_ARGS__, PP_RSEQ_N()))", + "PP_ARG#{suffix}_N(...) EXPAND(_PP_ARG#{suffix}_N(__VA_ARGS__))", + "_PP_ARG#{suffix}_N(#{arg_n_seq(m)}, N, ...) N", + ] + ) + end + + def each + CFile::wrap_macro_set('PP_EACH', + [ + "PP_EACH(TF, ...) _PP_EACH(TF, PP_NARG(__VA_ARGS__), __VA_ARGS__)", + "_PP_EACH(TF, N, ...) __PP_EACH(TF, N, __VA_ARGS__)", + "__PP_EACH(TF, N, ...) _PP_EACH_##N(TF, __VA_ARGS__)", + "", + "_PP_EACH_0(TF, ...)", + "_PP_EACH_1(TF, next_arg) TF(next_arg)", + ] + (2..@max_arg_count).map { |arg_count| "_PP_EACH_#{arg_count}(TF, next_arg, ...) TF(next_arg) _PP_EACH_#{arg_count-1}(TF, __VA_ARGS__)" } + ) + end + + def each_with_index + CFile::wrap_macro_set('PP_EACH_IDX', + [ + "PP_EACH_IDX(TF, ...) _PP_EACH_IDX(TF, PP_NARG(__VA_ARGS__), __VA_ARGS__)", + "_PP_EACH_IDX(TF, N, ...) __PP_EACH_IDX(TF, N, __VA_ARGS__)", + "__PP_EACH_IDX(TF, N, ...) _PP_EACH_IDX_##N(TF, __VA_ARGS__)", + "", + "_PP_EACH_IDX_0(TF, dummy)" + ] + (1..@max_arg_count).map do |arg_count| + arg_indices = (0..arg_count-1) + arg_ids = arg_indices.map{ |aidx| "_#{aidx}"} + macro_signature = "_PP_EACH_IDX_#{arg_count}(TF, #{arg_ids.join(', ')})" + macro_body = arg_indices.map { |aidx| "TF(_#{aidx}, #{aidx})" }.join(' ') + "#{macro_signature} #{macro_body}" + end + ) + end + + def parameterised_each_with_index(n) + fargs = (1..n).map { |aidx| "P#{aidx}"}.join(", ") + CFile::wrap_macro_set("PP_#{n}PAR_EACH_IDX", + [ + "PP_#{n}PAR_EACH_IDX(TF, #{fargs}, ...) _PP_#{n}PAR_EACH_IDX(TF, #{fargs}, PP_NARG(__VA_ARGS__), __VA_ARGS__)", + "_PP_#{n}PAR_EACH_IDX(TF, #{fargs}, N, ...) __PP_#{n}PAR_EACH_IDX(TF, #{fargs}, N, __VA_ARGS__)", + "__PP_#{n}PAR_EACH_IDX(TF, #{fargs}, N, ...) _PP_#{n}PAR_IDX_##N(TF, #{fargs}, __VA_ARGS__)", + "", + "_PP_#{n}PAR_IDX_0(TF, ARG, dummy)", + ] + (1..@max_arg_count).map do |arg_count| + arg_indices = (0..arg_count-1) + arg_ids = arg_indices.map{ |aidx| "_#{aidx}"} + macro_signature = "_PP_#{n}PAR_IDX_#{arg_count}(TF, #{fargs}, #{arg_ids.join(', ')})" + macro_body = arg_indices.map { |aidx| "TF(#{fargs}, _#{aidx}, #{aidx})" }.join(' ') + "#{macro_signature} #{macro_body}" + end + ) + end + + def generate_header + <<-EOH +/** + * @file + * + * pp_iter.h + * Some useful c preprocessor extensions for dealing with variadic macros + * + * @author Cormac Cannon (cormacc.public@gmail.com) + * + * This is auto-generated code. The generator script and further background/usage info may be found here: + * https://github.com/cormacc/va_args_iterators + * + * Autogenerated on #{DateTime.now.strftime("%d/%m/%Y %H:%M")} + * - Script: #{$0} + * - Max argument count: #{@max_arg_count} + * + * I initially encountered the variadic macro counting logic in this post by Laurent Deniau: + * https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s + * Refined by arpad. and zhangj to handle the no-argument case + * + * Recursive PP_EACH implementation based on this blog post by Daniel Hardman: + * https://codecraft.co/2014/11/25/variadic-macros-tricks/ + * + * The PP_nPAR_EACH_IDX macro implementations extend the non-recursive PP_EACH implementation + * described in this (anonymous) blog post: + * http://ptspts.blogspot.ie/2013/11/how-to-apply-macro-to-all-arguments-of.html + * + * This MSVC macro expansion fix was lifted from the excellent fake function framework: + * https://github.com/meekrosoft/fff + */ + +#ifndef PP_ITER_H +# define PP_ITER_H + +# ifdef __cplusplus +extern "C" { +# endif + +//MSVC non-standard macro expansion fix +#{narg_common} + +//Argument counting +#{narg} + + +//PP_EACH +#{each} + + +//PP_EACH_IDX +#{each_with_index} + + +//PP_1PAR_EACH_IDX +#{parameterised_each_with_index(1)} + + +//PP_2PAR_EACH_IDX +#{parameterised_each_with_index(2)} + +# ifdef __cplusplus +} +# endif + +#endif /* PP_ITER_H */ +EOH + end + +end + +# Generate a header if run standalone rather than required as a dependency +if __FILE__==$0 + ppi = ARGV.empty? ? PPIterators.new() : PPIterators.new(ARGV[0].to_i) + puts ppi.generate_header +end diff --git a/test/fff_test_c.c b/test/fff_test_c.c index 6763439..87e0d4a 100644 --- a/test/fff_test_c.c +++ b/test/fff_test_c.c @@ -1,4 +1,3 @@ - // Want to keep the argument history for 13 calls #define OVERRIDE_ARG_HIST_LEN 13u #define FFF_ARG_HISTORY_LEN OVERRIDE_ARG_HIST_LEN @@ -6,6 +5,7 @@ #define OVERRIDE_CALL_HIST_LEN 17u #define FFF_CALL_HISTORY_LEN OVERRIDE_CALL_HIST_LEN + #include "../fff.h" #include "c_test_framework.h" @@ -13,7 +13,9 @@ #include #include - +// Could move this into c_test_framework.h, but it uses the PP iteration macros from fff.h.... +#define RUN_INDEXED_TEST(SUITE, TEST_COUNT, TESTNAME, IDX) do { printf(" Running (%d/%d) %s.%s: \n", IDX+1, TEST_COUNT, #SUITE, #TESTNAME); setup(); TESTNAME(); printf(" SUCCESS\n"); } while (0); +#define RUN_TESTS(SUITE, ...) PP_2PAR_EACH_IDX(RUN_INDEXED_TEST, SUITE, PP_NARG(__VA_ARGS__), __VA_ARGS__) enum MYBOOL { FALSE = 899, TRUE }; struct MyStruct { @@ -34,6 +36,9 @@ FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t); FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); FAKE_VALUE_FUNC(int, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); +#include "test_cases.include" +#include "test_cases_assertions.include" + void setup() { RESET_FAKE(voidfunc1); @@ -46,10 +51,10 @@ void setup() RESET_FAKE(valuefunc3var); RESET_FAKE(strlcpy3); FFF_RESET_HISTORY(); + RESET_FAKE_ASSERTIONS(); } -#include "test_cases.include" TEST_F(FFFTestSuite, default_constants_can_be_overridden) { @@ -68,44 +73,85 @@ int main() fflush(0); /* Run tests */ - RUN_TEST(FFFTestSuite, when_void_func_never_called_then_callcount_is_zero); - RUN_TEST(FFFTestSuite, when_void_func_called_once_then_callcount_is_one); - RUN_TEST(FFFTestSuite, when_void_func_called_once_and_reset_then_callcount_is_zero); - RUN_TEST(FFFTestSuite, when_void_func_with_1_integer_arg_called_then_last_arg_captured); - RUN_TEST(FFFTestSuite, when_void_func_with_1_integer_arg_called_twice_then_last_arg_captured); - RUN_TEST(FFFTestSuite, when_void_func_with_1_integer_arg_called_and_reset_then_captured_arg_is_zero); - RUN_TEST(FFFTestSuite, when_void_func_with_2_char_args_called_then_last_args_captured); - RUN_TEST(FFFTestSuite, when_void_func_with_2_char_args_called_twice_then_last_args_captured); - RUN_TEST(FFFTestSuite, when_void_func_with_2_char_args_called_and_reset_then_captured_arg_is_zero); - RUN_TEST(FFFTestSuite, when_fake_func_called_then_const_arguments_captured); - - RUN_TEST(FFFTestSuite, when_fake_func_created_default_history_is_fifty_calls); - RUN_TEST(FFFTestSuite, when_fake_func_called_then_arguments_captured_in_history); - RUN_TEST(FFFTestSuite, argument_history_is_reset_when_RESET_FAKE_called); - RUN_TEST(FFFTestSuite, when_fake_func_called_max_times_then_no_argument_histories_dropped); - RUN_TEST(FFFTestSuite, when_fake_func_called_max_times_plus_one_then_one_argument_history_dropped); - - RUN_TEST(FFFTestSuite, value_func_will_return_zero_by_default); - RUN_TEST(FFFTestSuite, value_func_will_return_value_given); - RUN_TEST(FFFTestSuite, value_func_will_return_zero_after_reset); - RUN_TEST(FFFTestSuite, register_call_macro_registers_one_call); - RUN_TEST(FFFTestSuite, register_call_macro_registers_two_calls); - RUN_TEST(FFFTestSuite, reset_call_history_resets_call_history); - RUN_TEST(FFFTestSuite, call_history_will_not_write_past_array_bounds); - RUN_TEST(FFFTestSuite, calling_fake_registers_one_call); - - RUN_TEST(FFFTestSuite, return_value_sequences_not_exhausted); - RUN_TEST(FFFTestSuite, return_value_sequences_exhausted); - RUN_TEST(FFFTestSuite, default_constants_can_be_overridden); - - RUN_TEST(FFFTestSuite, can_register_custom_fake); - RUN_TEST(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_return_value); - - RUN_TEST(FFFTestSuite, use_void_vararg_fake_with_different_number_of_arguments); - RUN_TEST(FFFTestSuite, use_value_vararg_fake_with_different_number_of_arguments); - - RUN_TEST(FFFTestSuite, can_capture_upto_20_arguments_correctly); - RUN_TEST(FFFTestSuite, value_func_can_capture_upto_20_arguments_correctly); + + RUN_TESTS(FFFTestSuite, + when_void_func_never_called_then_callcount_is_zero, + when_void_func_called_once_then_callcount_is_one, + when_void_func_called_once_and_reset_then_callcount_is_zero, + when_void_func_with_1_integer_arg_called_then_last_arg_captured, + when_void_func_with_1_integer_arg_called_twice_then_last_arg_captured, + when_void_func_with_1_integer_arg_called_and_reset_then_captured_arg_is_zero, + when_void_func_with_2_char_args_called_then_last_args_captured, + when_void_func_with_2_char_args_called_twice_then_last_args_captured, + when_void_func_with_2_char_args_called_and_reset_then_captured_arg_is_zero, + when_fake_func_called_then_const_arguments_captured, + + when_fake_func_created_default_history_is_fifty_calls, + when_fake_func_called_then_arguments_captured_in_history, + argument_history_is_reset_when_RESET_FAKE_called, + when_fake_func_called_max_times_then_no_argument_histories_dropped, + when_fake_func_called_max_times_plus_one_then_one_argument_history_dropped, + + value_func_will_return_zero_by_default, + value_func_will_return_value_given, + value_func_will_return_zero_after_reset, + + register_call_macro_registers_one_call, + register_call_macro_registers_two_calls, + reset_call_history_resets_call_history, + call_history_will_not_write_past_array_bounds, + calling_fake_registers_one_call, + + return_value_sequences_not_exhausted, + return_value_sequences_exhausted, + + default_constants_can_be_overridden, + + can_register_custom_fake, + when_value_custom_fake_called_THEN_it_returns_custom_return_value, + + use_void_vararg_fake_with_different_number_of_arguments, + use_value_vararg_fake_with_different_number_of_arguments, + + can_capture_upto_20_arguments_correctly, + value_func_can_capture_upto_20_arguments_correctly, + + variadic_return_values_should_set_return_val_given_single_value, + variadic_return_values_should_set_return_sequence_given_multiple_values, + variadic_return_values, + variadic_return_values_no_array_name_collisions_when_called_repeatedly, + variadic_return_values_no_assertion_given_single_value, + variadic_return_values_assertion_valid_given_value_sequence, + variadic_return_values_assertion_invalid_given_0_length_sequence, + + assert_calls_assertion_valid_given_match, + assert_calls_assertion_invalid_when_underestimated, + assert_calls_assertion_invalid_when_overestimated, + + assert_called_assertion_valid_when_called_once, + assert_called_assertion_invalid_when_not_called, + assert_called_assertion_invalid_when_called_more_than_once, + + assert_not_called_assertion_valid_when_not_called, + assert_not_called_assertion_invalid_when_called_once, + assert_not_called_assertion_invalid_when_called_more_than_once, + + assert_call_assertion_valid_when_all_args_specified_and_matched, + assert_call_assertion_valid_when_some_args_specified_and_matched, + assert_call_assertion_invalid_when_called_more_than_once, + assert_call_assertion_invalid_given_arg_mismatch, + + assert_nth_call_assertion_valid_given_matching_args, + assert_nth_call_assertion_invalid_given_arg_mismatch, + + assert_last_call_assertion_valid_given_multiple_calls, + assert_last_call_assertion_invalid_given_previous_call_args, + + assert_any_call_assertion_valid_given_any_match, + assert_any_call_assertion_invalid_given_no_match, + assert_no_call_assertion_invalid_given_any_match, + assert_no_call_assertion_valid_given_no_match + ) printf("\n-------------\n"); printf("Complete\n"); diff --git a/test/test_cases_assertions.include b/test/test_cases_assertions.include new file mode 100644 index 0000000..00292e0 --- /dev/null +++ b/test/test_cases_assertions.include @@ -0,0 +1,351 @@ +static int valid_assertions_, invalid_assertions_; +#define _FFF_ASSERT_EQ_MSG(EXP, ACT, MSG) if ((EXP)==(ACT)) { valid_assertions_++; } else { invalid_assertions_++; } + +enum AssertionResult { + INVALID, + VALID +}; + +#define ASSERT_FAKE_ASSERTION_WAS(RSLT) \ + if((RSLT)==VALID) ASSERT_EQ(1, valid_assertions_>0); \ + ASSERT_EQ((!(RSLT)), invalid_assertions_>0) + +#define RESET_FAKE_ASSERTIONS() valid_assertions_ = invalid_assertions_ = 0 + +TEST_F(FFFTestSuite, variadic_return_values_should_set_return_val_given_single_value) +{ + FFF_RETURN(longfunc0, 3); + ASSERT_EQ(3, FFF_RET(longfunc0)); + ASSERT_EQ(NULL, FFF(longfunc0).return_val_seq); + ASSERT_EQ(0, FFF(longfunc0).return_val_seq_len); +} + +TEST_F(FFFTestSuite, variadic_return_values_should_set_return_sequence_given_multiple_values) +{ + FFF_RETURN(longfunc0, 3, 2, 1); + ASSERT_EQ(0, FFF_RET(longfunc0)); + ASSERT_EQ(3, FFF(longfunc0).return_val_seq_len); + ASSERT_EQ(3, FFF(longfunc0).return_val_seq[0]); + ASSERT_EQ(2, FFF(longfunc0).return_val_seq[1]); + ASSERT_EQ(1, FFF(longfunc0).return_val_seq[2]); +} + +TEST_F(FFFTestSuite, variadic_return_values) +{ + FFF_RETURN(longfunc0, 3, 7, 9); + ASSERT_EQ(3, longfunc0()); + ASSERT_EQ(7, longfunc0()); + ASSERT_EQ(9, longfunc0()); + ASSERT_EQ(9, longfunc0()); + ASSERT_EQ(9, longfunc0()); +} + +TEST_F(FFFTestSuite, variadic_return_values_no_array_name_collisions_when_called_repeatedly) +{ + FFF_RETURN(longfunc0, 3, 7, 9); + FFF_RETURN(longfunc0, 2, 4); + ASSERT_EQ(2, longfunc0()); + ASSERT_EQ(4, longfunc0()); + ASSERT_EQ(4, longfunc0()); +} + +TEST_F(FFFTestSuite, variadic_return_values_no_assertion_given_single_value) +{ + FFF_RETURN(longfunc0, 1); + + ASSERT_EQ(0, valid_assertions_); + ASSERT_EQ(0, invalid_assertions_); +} + +TEST_F(FFFTestSuite, variadic_return_values_assertion_valid_given_value_sequence) +{ + FFF_RETURN(longfunc0, 1, 2, 3); + + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, variadic_return_values_assertion_invalid_given_0_length_sequence) +{ + FFF_RETURN(longfunc0); + + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +static void _callFake(int ncalls) +{ + //... reset assertion counters + valid_assertions_ = invalid_assertions_ = 0; + RESET_FAKE(longfunc0); + //... make the calls + while(ncalls--) { + longfunc0(); + } +} + + +static void do_FFF_ASSERT_CALLS_test(int ncalls_made, int ncalls_asserted) +{ + + //Given + _callFake(ncalls_made); + + //When + FFF_ASSERT_CALLS(longfunc0, ncalls_asserted); + + //Then + ASSERT_FAKE_ASSERTION_WAS(ncalls_made==ncalls_asserted); +} + +TEST_F(FFFTestSuite, assert_calls_assertion_valid_given_match) +{ + do_FFF_ASSERT_CALLS_test(0,0); + do_FFF_ASSERT_CALLS_test(1,1); + do_FFF_ASSERT_CALLS_test(9,9); +} + +TEST_F(FFFTestSuite, assert_calls_assertion_invalid_when_overestimated) +{ + do_FFF_ASSERT_CALLS_test(0,1); + do_FFF_ASSERT_CALLS_test(1,3); + do_FFF_ASSERT_CALLS_test(9,15); +} + +TEST_F(FFFTestSuite, assert_calls_assertion_invalid_when_underestimated) +{ + do_FFF_ASSERT_CALLS_test(3,2); + do_FFF_ASSERT_CALLS_test(9,7); +} + +TEST_F(FFFTestSuite, assert_called_assertion_valid_when_called_once) +{ + //Given + _callFake(1); + + //When + FFF_ASSERT_CALLED(longfunc0); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, assert_called_assertion_invalid_when_not_called) +{ + //Given + _callFake(0); + + //When + FFF_ASSERT_CALLED(longfunc0); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_called_assertion_invalid_when_called_more_than_once) +{ + //Given + _callFake(2); + + //When + FFF_ASSERT_CALLED(longfunc0); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_not_called_assertion_valid_when_not_called) +{ + //Given + _callFake(0); + + //When + FFF_ASSERT_NOT_CALLED(longfunc0); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + + +TEST_F(FFFTestSuite, assert_not_called_assertion_invalid_when_called_once) +{ + //Given + _callFake(1); + + //When + FFF_ASSERT_NOT_CALLED(longfunc0); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_not_called_assertion_invalid_when_called_more_than_once) +{ + //Given + _callFake(5); + + //When + FFF_ASSERT_NOT_CALLED(longfunc0); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_call_assertion_valid_when_all_args_specified_and_matched) +{ + //Given + voidfunc2('a', 'b'); + + //When + FFF_ASSERT(voidfunc2, 'a', 'b'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, assert_call_assertion_valid_when_some_args_specified_and_matched) +{ + //Given + voidfunc2('a', 'b'); + + //When + FFF_ASSERT(voidfunc2, 'a'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, assert_call_assertion_invalid_when_called_more_than_once) +{ + //Given + voidfunc2('a', 'b'); + voidfunc2('a', 'b'); + + //When + FFF_ASSERT(voidfunc2, 'a', 'b'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_call_assertion_invalid_given_arg_mismatch) +{ + //Given + voidfunc2('a', 'b'); + + //When + FFF_ASSERT(voidfunc2, 'a', 'a'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_nth_call_assertion_valid_given_matching_args) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + voidfunc2('b', 'a'); + + //When + FFF_ASSERT_NTH(voidfunc2, 2, 'a', 'b'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, assert_nth_call_assertion_invalid_given_arg_mismatch) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + voidfunc2('b', 'a'); + + //When + FFF_ASSERT_NTH(voidfunc2, 3, 'a', 'b'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_last_call_assertion_valid_given_multiple_calls) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + + //When + FFF_ASSERT_LAST(voidfunc2, 'a', 'b'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, assert_last_call_assertion_invalid_given_previous_call_args) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + + //When + FFF_ASSERT_LAST(voidfunc2, 'a', 'a'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_any_call_assertion_valid_given_any_match) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + voidfunc2('b', 'a'); + + //When + FFF_ASSERT_ANY(voidfunc2, 'a', 'b'); + FFF_ASSERT_ANY(voidfunc2, 'a', 'a'); + FFF_ASSERT_ANY(voidfunc2, 'b', 'a'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +} + +TEST_F(FFFTestSuite, assert_any_call_assertion_invalid_given_no_match) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + voidfunc2('b', 'a'); + + //When + FFF_ASSERT_ANY(voidfunc2, 'a', 'c'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_no_call_assertion_invalid_given_any_match) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + voidfunc2('b', 'a'); + + //When + FFF_ASSERT_NONE(voidfunc2, 'a', 'a'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} + +TEST_F(FFFTestSuite, assert_no_call_assertion_valid_given_no_match) +{ + //Given + voidfunc2('a', 'a'); + voidfunc2('a', 'b'); + voidfunc2('b', 'a'); + + //When + FFF_ASSERT_NONE(voidfunc2, 'a', 'c'); + + //Then + ASSERT_FAKE_ASSERTION_WAS(VALID); +}