diff --git a/.appveyor.yml b/.appveyor.yml index 8cbacf1..0c4e1f2 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,5 +1,7 @@ version: '{build}-appveyor' image: Visual Studio 2017 +install: + - set PATH=C:\Ruby200\bin;%PATH% build: verbosity: minimal test_script: @@ -10,4 +12,4 @@ test_script: C:\projects\fff\test\ms_vc_fff_test\x64\Debug\ms_vc_fff_test_global_cpp.exe - C:\projects\fff\test\ms_vc_fff_test\x64\Debug\ms_vc_fff_test_global_c.exe \ No newline at end of file + C:\projects\fff\test\ms_vc_fff_test\x64\Debug\ms_vc_fff_test_global_c.exe diff --git a/README.md b/README.md index a9757fd..5d35485 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,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) { @@ -101,6 +111,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) { @@ -111,7 +132,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 @@ -120,7 +140,23 @@ type (a char pointer in this example). A variable is created for every argument in the form `"function_name"fake.argN_val` -## Return Values +### 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 When you want to define a fake function that returns a value, you should use the `FAKE_VALUE_FUNC` macro. For instance: @@ -142,6 +178,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) { @@ -167,7 +218,37 @@ you would use a syntax like this: ```c FAKE_VALUE_FUNC(double, pow, double, double); ``` -## Resetting a Fake + +*N.B.* When using the (GCC only) 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 Good tests are isolated tests, so it is important to reset the fakes for each unit test. All the fakes have a reset function to reset their arguments and @@ -237,6 +318,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) { @@ -298,6 +391,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 }; @@ -638,10 +746,20 @@ 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); | -| FAKE_VOID_FUNC_VARARG(fn [,arg_types*], ...); | Define a fake variadic function returning void with type return_type taking n arguments and n variadic arguments | FAKE_VOID_FUNC_VARARG(fn, const char*, ...) | +| 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); | +| FAKE_VOID_FUNC_VARARG(fn [,arg_types*], ...); | Define a fake variadic function returning void with type return_type taking n arguments and n variadic arguments | FAKE_VOID_FUNC_VARARG(fn, const char*, ...) | | FAKE_VALUE_FUNC_VARARG(return_type, fn [,arg_types*], ...); | Define a fake variadic function returning a value with type return_type taking n arguments and n variadic arguments | FAKE_VALUE_FUNC_VARARG(int, fprintf, FILE*, const char*, ...) | -| RESET_FAKE(fn); | Reset the state of fake function called fn | RESET_FAKE(DISPLAY_init); | +| RESET_FAKE(fn); | Reset the state of fake function called fn | RESET_FAKE(DISPLAY_init); | +| FFF_RETURN(fn, ...return_value(s)*); | Set one or (GCC only) 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)) | (GCC only) 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)) | (GCC only) 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/buildandtest b/buildandtest index bd9945b..278efa8 100755 --- a/buildandtest +++ b/buildandtest @@ -6,7 +6,7 @@ echo >> fff.h ruby fakegen.rb >> fff.h make clean make all -build/fff_test_c +build/fff_test_c build/fff_test_cpp --gtest_output=xml:build/test_results.xml build/ui_test_ansic build/ui_test_cpp --gtest_output=xml:build/example_results.xml diff --git a/fakegen.rb b/fakegen.rb index 229bf5c..ba34f15 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 @@ -31,18 +32,15 @@ def output_constants putd "#define FFF_GCC_FUNCTION_ATTRIBUTES" } putd "#endif" - -end - - +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 @@ -59,17 +57,42 @@ 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__));} +#ifdef _MSC_VER +//MSVC decltype ~= typeof, but only in c++ mode.... +#define _FFF_RET_TYPE(FN) decltype(FFF_RET(FN)) +#else +#define _FFF_RET_TYPE(FN) __typeof__(FFF_RET(FN)) +#endif +#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 @@ -237,6 +260,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 @@ -546,9 +602,9 @@ 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]} - if do_reverse then fmap.reverse.join(joinstr) else fmap.join(", ") end +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 def counting_macro_instance(type, has_calling_conventions, vararg = :non_vararg, prefix = "") @@ -573,36 +629,27 @@ def counting_macro_instance(type, has_calling_conventions, vararg = :non_vararg, end def output_macro_counting_shortcuts(has_calling_conventions) - has_calling_conventions ? - (arg_depth = ["3", "2"]; calling_conv = "callingConv, ") : - (arg_depth = ["2", "1"]; calling_conv = "") - msvc_expand_macro_fix + ppiter = PPIterators.new(recursive: false) putd <<-MACRO_COUNTING -#define PP_NARG_MINUS#{arg_depth[0]}(...) \ - EXPAND(PP_NARG_MINUS#{arg_depth[0]}_(__VA_ARGS__, PP_RSEQ_N_MINUS#{arg_depth[0]}())) - -#define PP_NARG_MINUS#{arg_depth[0]}_(...) \ - EXPAND(PP_ARG_MINUS#{arg_depth[0]}_N(__VA_ARGS__)) +#{ppiter.embed_macros} -#define PP_ARG_MINUS#{arg_depth[0]}_N(returnVal, #{calling_conv} #{generate_arg_sequence($MAX_ARGS, '_', false, ", ")}, N, ...) N +#{ppiter.narg_minus(1)} -#define PP_RSEQ_N_MINUS#{arg_depth[0]}() \ - #{generate_arg_sequence($MAX_ARGS, '', true, ',')} +#{ppiter.narg_minus(2)} -#define PP_NARG_MINUS#{arg_depth[1]}(...) \ - EXPAND(PP_NARG_MINUS#{arg_depth[1]}_(__VA_ARGS__, PP_RSEQ_N_MINUS#{arg_depth[1]}())) +#{ppiter.narg_minus(3)} -#define PP_NARG_MINUS#{arg_depth[1]}_(...) \ - EXPAND(PP_ARG_MINUS#{arg_depth[1]}_N(__VA_ARGS__)) - -#define PP_ARG_MINUS#{arg_depth[1]}_N(#{calling_conv} #{generate_arg_sequence($MAX_ARGS, '_', false, ", ")}, N, ...) N - -#define PP_RSEQ_N_MINUS#{arg_depth[1]}() \ - #{generate_arg_sequence($MAX_ARGS, '', true, ',')} +#{ppiter.parameterised_each_with_index} +#ifndef PP_1PAR_EACH_IDX +#{ppiter.parameterised_each_with_index_n(1)} +#endif +#ifndef PP_2PAR_EACH_IDX +#{ppiter.parameterised_each_with_index_n(2)} +#endif /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */ @@ -628,6 +675,55 @@ def output_macro_counting_shortcuts(has_calling_conventions) 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), true, MSG) +#define _FFF_ASSERT_FALSE_MSG(COND, MSG) _FFF_ASSERT_EQ_MSG((COND), false, 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(has_calling_conventions) include_guard { include_dependencies @@ -635,6 +731,7 @@ def output_c_and_cpp(has_calling_conventions) output_internal_helper_macros yield output_macro_counting_shortcuts(has_calling_conventions) + output_assertions } end diff --git a/fff.h b/fff.h index 3bfae78..89493d7 100644 --- a/fff.h +++ b/fff.h @@ -43,6 +43,24 @@ 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__));} +#ifdef _MSC_VER +//MSVC decltype ~= typeof, but only in c++ mode.... +#define _FFF_RET_TYPE(FN) decltype(FFF_RET(FN)) +#else +#define _FFF_RET_TYPE(FN) __typeof__(FFF_RET(FN)) +#endif +#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; @@ -119,6 +137,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); @@ -6378,26 +6410,509 @@ FFF_END_EXTERN_C 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 -#define PP_NARG_MINUS1(...) EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())) +//Defer / evaluate macros +#ifndef DEFER + #define PP_NOP() + #define DEFER(...) __VA_ARGS__ PP_NOP() + #define DEFER2(...) __VA_ARGS__ DEFER(PP_NOP) () + #define DEFER3(...) __VA_ARGS__ DEFER2(PP_NOP) () + #define DEFER4(...) __VA_ARGS__ DEFER3(PP_NOP) () + #define DEFER5(...) __VA_ARGS__ DEFER4(PP_NOP) () + #define DEFER6(...) __VA_ARGS__ DEFER5(PP_NOP) () +#endif //DEFER + +#ifndef EVAL + #define EVAL(...) _EVAL_6(__VA_ARGS__) + #define _EVAL_1(...) __VA_ARGS__ + #define _EVAL_2(...) _EVAL_1(_EVAL_1(__VA_ARGS__)) + #define _EVAL_3(...) _EVAL_2(_EVAL_2(__VA_ARGS__)) + #define _EVAL_4(...) _EVAL_3(_EVAL_3(__VA_ARGS__)) + #define _EVAL_5(...) _EVAL_4(_EVAL_4(__VA_ARGS__)) + #define _EVAL_6(...) _EVAL_5(_EVAL_5(__VA_ARGS__)) +#endif //EVAL + +#ifndef EVAL_ + #define EVAL_(...) _EVAL__6(__VA_ARGS__) + #define _EVAL__1(...) __VA_ARGS__ + #define _EVAL__2(...) _EVAL__1(_EVAL__1(__VA_ARGS__)) + #define _EVAL__3(...) _EVAL__2(_EVAL__2(__VA_ARGS__)) + #define _EVAL__4(...) _EVAL__3(_EVAL__3(__VA_ARGS__)) + #define _EVAL__5(...) _EVAL__4(_EVAL__4(__VA_ARGS__)) + #define _EVAL__6(...) _EVAL__5(_EVAL__5(__VA_ARGS__)) +#endif //EVAL_ + + +//Token concatenation (tuple-aware) +#ifndef PP_CAT + #define PP_CAT + // Defer the call to the CAT so that we get the updated parameters first + #define CAT(a, b) _CAT_EVAL ( _CAT_EXPAND_PARAMETERS(a, b) ) + #define _CAT_EVAL(...) _CAT_HELPER __VA_ARGS__ + + // Find the result of testing whether a macro is enclosed or not + #define _CAT_EXPAND_PARAMETERS(a, b) (a, _CAT_PAREN_CHECK b, DEFAULT, b ) + #define _CAT_PAREN_CHECK(...) EXPANDED, ENCLOSED, (__VA_ARGS__) ) EAT ( + + // Pattern match the result of testing if it is enclose or not + #define _CAT_HELPER(a, _, f, b) _CAT_HELPER_ ## f (a, b) + #define _CAT_HELPER_ENCLOSED(a, b) a b + #define _CAT_HELPER_DEFAULT(a, b) a ## b +#endif //PP_CAT + + +//Logical operations +#ifndef PP_LOGIC + #define PP_LOGIC + //Usage: IF() (, ) + #define IF(value) CAT(_IF_, value) + #define _IF_1(true, ...) true + #define _IF_0(true, ...) __VA_ARGS__ + + #define NOT(x) PP_MATCHER ( CAT(NOT_, x), 0 ) + #define NOT_0 EXISTS(1) + + //== Building blocks + + //PP_MATCHER + #define PP_MATCHER(value, ...) IF ( _MATCH(_MATCH_FIND(value)) ) ( _MATCH_EXTRACT(value), __VA_ARGS__ ) + + #define _MATCH(x) CAT(__MATCH_, x) + #define __MATCH_EXISTS(...) 1 + #define __MATCH_UNMATCHED 0 + + #define _MATCH_FIND(x) __MATCH_RESULT_EXTRACT ( __MATCH_RESULT_FIND(x) ) + + /** + * Extract 2nd element of a match result in the format: + * (IGNORED, EXISTS(DEFINED_VALUE)) or (IGNORED, UNMATCHED) + * This is appended to __MATCH_ to convert result to a boolean, + */ + #define __MATCH_RESULT_EXTRACT(x) __MATCH_RESULT_EXTRACT_HELPER x + #define __MATCH_RESULT_EXTRACT_HELPER(match, return_value) return_value + + /** + * __MATCH_RESULT_FIND( EXISTS(bla) ) returns ( EXPANDED, EXISTS(bla) ) + * __MATCH_RESULT_FIND( bla ) returns ( TEST_bla, UNMATCHED) + */ + #define __MATCH_RESULT_FIND(x) ( CAT(__MATCH_RESULT_EXPAND_, x), UNMATCHED ) + #define __MATCH_RESULT_EXPAND_EXISTS(...) EXPANDED, EXISTS(__VA_ARGS__) ) EAT ( + #define EAT(...) + + //_MATCH_EXTRACT / __MATCH_EXTRACT_EXISTS + #define _MATCH_EXTRACT(value) CAT(__MATCH_EXTRACT_, value) + #define __MATCH_EXTRACT_EXISTS(...) __VA_ARGS__ +#endif //PP_LOGIC + + +//Lists (HEAD, TAIL, ISEMPTY etc.) +#ifndef PP_LISTS + #define PP_LISTS + #define HEAD(FIRST, ...) FIRST + #define TAIL(FIRST, ...) __VA_ARGS__ + + #define TEST_LAST EXISTS(1) + #define NOT_EMPTY(...) NOT(IS_EMPTY(__VA_ARGS__)) + #if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #define IS_EMPTY(...) NOT(PP_NARG(__VA_ARGS__)) + #else + #define IS_EMPTY(...)_ISEMPTY( /* test if there is just one argument, eventually an empty one */ HAS_COMMA(__VA_ARGS__), /* test if _TRIGGER_PARENTHESIS_ together with the argument adds a comma */ HAS_COMMA(_TRIGGER_PARENTHESIS_ __VA_ARGS__), /* test if the argument together with a parenthesis adds a comma */ HAS_COMMA(__VA_ARGS__ (/*empty*/)), /* test if placing it between _TRIGGER_PARENTHESIS_ and the parenthesis adds a comma */ HAS_COMMA(_TRIGGER_PARENTHESIS_ __VA_ARGS__ (/*empty*/)) ) + + #define _ISEMPTY(_0, _1, _2, _3) HAS_COMMA(PASTE5(_IS_EMPTY_CASE_, _0, _1, _2, _3)) + #define HAS_COMMA(...) PP_ARG_N(__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0) + #define _TRIGGER_PARENTHESIS_(...) , + #define PASTE5(_0, _1, _2, _3, _4) _0 ## _1 ## _2 ## _3 ## _4 + #define _IS_EMPTY_CASE_0001 , + #endif +#endif //PP_LISTS + + +//Tuples +#ifndef PP_TUPLES + #define PP_TUPLES + #define PAREN(...) ( __VA_ARGS__ ) + #define DEPAREN(...) DEPAREN_ __VA_ARGS__ + #define DEPAREN_(...) __VA_ARGS__ + + #define IS_ENCLOSED(x, ...) PP_MATCHER ( IS_ENCLOSED_TEST x, 0 ) + #define IS_ENCLOSED_TEST(...) EXISTS(1) + + #define IF_ENCLOSED(...) CAT(_IF_ENCLOSED_, IS_ENCLOSED(__VA_ARGS__)) + #define _IF_ENCLOSED_0(true, ...) __VA_ARGS__ + #define _IF_ENCLOSED_1(true, ...) true + // This function will optionally remove parentheses around its arguments + // if there are any. Otherwise it will return normally + #define OPT_DEPAREN(...) IF_ENCLOSED (__VA_ARGS__) ( DEPAREN(__VA_ARGS__), __VA_ARGS__ ) +#endif //PP_TUPLES + + +//Argument counting +#ifndef PP_UTIL + #define PP_UTIL + #define EXPAND(x) x + #define PP_SEQ_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 + #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 + +#ifndef PP_NARG + #define PP_ARG_N(...) EXPAND(_PP_ARG_N(__VA_ARGS__)) + #if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #define PP_NARG(...) EXPAND(PP_ARG_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #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 + #else + #define PP_NARG(...) EXPAND(PP_ARG_N(__VA_ARGS__, PP_RSEQ_N())) + #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, N, ...) N + #endif +#endif //PP_NARG + + +//PP_EACH +#ifndef PP_EACH + #define PP_EACH(TF, ...) _PP_EACH(TF, PP_NARG(__VA_ARGS__), __VA_ARGS__) + #define _PP_EACH(TF, N, ...) __PP_EACH(TF, N, __VA_ARGS__) + #define __PP_EACH(TF, N, ...) EXPAND(_PP_EACH_##N(TF, __VA_ARGS__)) + #define _PP_EACH_0(TF, ...) + #define _PP_EACH_1(TF, next_arg) TF(next_arg) + #define _PP_EACH_2(TF, next_arg, ...) TF(next_arg) _PP_EACH_1(TF, __VA_ARGS__) + #define _PP_EACH_3(TF, next_arg, ...) TF(next_arg) _PP_EACH_2(TF, __VA_ARGS__) + #define _PP_EACH_4(TF, next_arg, ...) TF(next_arg) _PP_EACH_3(TF, __VA_ARGS__) + #define _PP_EACH_5(TF, next_arg, ...) TF(next_arg) _PP_EACH_4(TF, __VA_ARGS__) + #define _PP_EACH_6(TF, next_arg, ...) TF(next_arg) _PP_EACH_5(TF, __VA_ARGS__) + #define _PP_EACH_7(TF, next_arg, ...) TF(next_arg) _PP_EACH_6(TF, __VA_ARGS__) + #define _PP_EACH_8(TF, next_arg, ...) TF(next_arg) _PP_EACH_7(TF, __VA_ARGS__) + #define _PP_EACH_9(TF, next_arg, ...) TF(next_arg) _PP_EACH_8(TF, __VA_ARGS__) + #define _PP_EACH_10(TF, next_arg, ...) TF(next_arg) _PP_EACH_9(TF, __VA_ARGS__) + #define _PP_EACH_11(TF, next_arg, ...) TF(next_arg) _PP_EACH_10(TF, __VA_ARGS__) + #define _PP_EACH_12(TF, next_arg, ...) TF(next_arg) _PP_EACH_11(TF, __VA_ARGS__) + #define _PP_EACH_13(TF, next_arg, ...) TF(next_arg) _PP_EACH_12(TF, __VA_ARGS__) + #define _PP_EACH_14(TF, next_arg, ...) TF(next_arg) _PP_EACH_13(TF, __VA_ARGS__) + #define _PP_EACH_15(TF, next_arg, ...) TF(next_arg) _PP_EACH_14(TF, __VA_ARGS__) + #define _PP_EACH_16(TF, next_arg, ...) TF(next_arg) _PP_EACH_15(TF, __VA_ARGS__) + #define _PP_EACH_17(TF, next_arg, ...) TF(next_arg) _PP_EACH_16(TF, __VA_ARGS__) + #define _PP_EACH_18(TF, next_arg, ...) TF(next_arg) _PP_EACH_17(TF, __VA_ARGS__) + #define _PP_EACH_19(TF, next_arg, ...) TF(next_arg) _PP_EACH_18(TF, __VA_ARGS__) + #define _PP_EACH_20(TF, next_arg, ...) TF(next_arg) _PP_EACH_19(TF, __VA_ARGS__) + #define _PP_EACH_21(TF, next_arg, ...) TF(next_arg) _PP_EACH_20(TF, __VA_ARGS__) + #define _PP_EACH_22(TF, next_arg, ...) TF(next_arg) _PP_EACH_21(TF, __VA_ARGS__) + #define _PP_EACH_23(TF, next_arg, ...) TF(next_arg) _PP_EACH_22(TF, __VA_ARGS__) + #define _PP_EACH_24(TF, next_arg, ...) TF(next_arg) _PP_EACH_23(TF, __VA_ARGS__) + #define _PP_EACH_25(TF, next_arg, ...) TF(next_arg) _PP_EACH_24(TF, __VA_ARGS__) + #define _PP_EACH_26(TF, next_arg, ...) TF(next_arg) _PP_EACH_25(TF, __VA_ARGS__) + #define _PP_EACH_27(TF, next_arg, ...) TF(next_arg) _PP_EACH_26(TF, __VA_ARGS__) + #define _PP_EACH_28(TF, next_arg, ...) TF(next_arg) _PP_EACH_27(TF, __VA_ARGS__) + #define _PP_EACH_29(TF, next_arg, ...) TF(next_arg) _PP_EACH_28(TF, __VA_ARGS__) + #define _PP_EACH_30(TF, next_arg, ...) TF(next_arg) _PP_EACH_29(TF, __VA_ARGS__) + #define _PP_EACH_31(TF, next_arg, ...) TF(next_arg) _PP_EACH_30(TF, __VA_ARGS__) + #define _PP_EACH_32(TF, next_arg, ...) TF(next_arg) _PP_EACH_31(TF, __VA_ARGS__) + #define _PP_EACH_33(TF, next_arg, ...) TF(next_arg) _PP_EACH_32(TF, __VA_ARGS__) + #define _PP_EACH_34(TF, next_arg, ...) TF(next_arg) _PP_EACH_33(TF, __VA_ARGS__) + #define _PP_EACH_35(TF, next_arg, ...) TF(next_arg) _PP_EACH_34(TF, __VA_ARGS__) + #define _PP_EACH_36(TF, next_arg, ...) TF(next_arg) _PP_EACH_35(TF, __VA_ARGS__) + #define _PP_EACH_37(TF, next_arg, ...) TF(next_arg) _PP_EACH_36(TF, __VA_ARGS__) + #define _PP_EACH_38(TF, next_arg, ...) TF(next_arg) _PP_EACH_37(TF, __VA_ARGS__) + #define _PP_EACH_39(TF, next_arg, ...) TF(next_arg) _PP_EACH_38(TF, __VA_ARGS__) + #define _PP_EACH_40(TF, next_arg, ...) TF(next_arg) _PP_EACH_39(TF, __VA_ARGS__) + #define _PP_EACH_41(TF, next_arg, ...) TF(next_arg) _PP_EACH_40(TF, __VA_ARGS__) + #define _PP_EACH_42(TF, next_arg, ...) TF(next_arg) _PP_EACH_41(TF, __VA_ARGS__) + #define _PP_EACH_43(TF, next_arg, ...) TF(next_arg) _PP_EACH_42(TF, __VA_ARGS__) + #define _PP_EACH_44(TF, next_arg, ...) TF(next_arg) _PP_EACH_43(TF, __VA_ARGS__) + #define _PP_EACH_45(TF, next_arg, ...) TF(next_arg) _PP_EACH_44(TF, __VA_ARGS__) + #define _PP_EACH_46(TF, next_arg, ...) TF(next_arg) _PP_EACH_45(TF, __VA_ARGS__) + #define _PP_EACH_47(TF, next_arg, ...) TF(next_arg) _PP_EACH_46(TF, __VA_ARGS__) + #define _PP_EACH_48(TF, next_arg, ...) TF(next_arg) _PP_EACH_47(TF, __VA_ARGS__) + #define _PP_EACH_49(TF, next_arg, ...) TF(next_arg) _PP_EACH_48(TF, __VA_ARGS__) + #define _PP_EACH_50(TF, next_arg, ...) TF(next_arg) _PP_EACH_49(TF, __VA_ARGS__) + #define _PP_EACH_51(TF, next_arg, ...) TF(next_arg) _PP_EACH_50(TF, __VA_ARGS__) + #define _PP_EACH_52(TF, next_arg, ...) TF(next_arg) _PP_EACH_51(TF, __VA_ARGS__) + #define _PP_EACH_53(TF, next_arg, ...) TF(next_arg) _PP_EACH_52(TF, __VA_ARGS__) + #define _PP_EACH_54(TF, next_arg, ...) TF(next_arg) _PP_EACH_53(TF, __VA_ARGS__) + #define _PP_EACH_55(TF, next_arg, ...) TF(next_arg) _PP_EACH_54(TF, __VA_ARGS__) + #define _PP_EACH_56(TF, next_arg, ...) TF(next_arg) _PP_EACH_55(TF, __VA_ARGS__) + #define _PP_EACH_57(TF, next_arg, ...) TF(next_arg) _PP_EACH_56(TF, __VA_ARGS__) + #define _PP_EACH_58(TF, next_arg, ...) TF(next_arg) _PP_EACH_57(TF, __VA_ARGS__) + #define _PP_EACH_59(TF, next_arg, ...) TF(next_arg) _PP_EACH_58(TF, __VA_ARGS__) + #define _PP_EACH_60(TF, next_arg, ...) TF(next_arg) _PP_EACH_59(TF, __VA_ARGS__) + #define _PP_EACH_61(TF, next_arg, ...) TF(next_arg) _PP_EACH_60(TF, __VA_ARGS__) + #define _PP_EACH_62(TF, next_arg, ...) TF(next_arg) _PP_EACH_61(TF, __VA_ARGS__) + #define _PP_EACH_63(TF, next_arg, ...) TF(next_arg) _PP_EACH_62(TF, __VA_ARGS__) + #define _PP_EACH_64(TF, next_arg, ...) TF(next_arg) _PP_EACH_63(TF, __VA_ARGS__) +#endif //PP_EACH + + +//PP_EACH_IDX +#ifndef PP_EACH_IDX + #define PP_EACH_IDX(TF, ...) _PP_EACH_IDX(TF, PP_NARG(__VA_ARGS__), __VA_ARGS__) + #define _PP_EACH_IDX(TF, N, ...) __PP_EACH_IDX(TF, N, __VA_ARGS__) + #define __PP_EACH_IDX(TF, N, ...) EXPAND(_PP_EACH_IDX_##N(TF, __VA_ARGS__)) + #define _PP_EACH_IDX_0(TF, dummy) + #define _PP_EACH_IDX_1(TF, _0) TF(_0, 0) + #define _PP_EACH_IDX_2(TF, _0, _1) TF(_0, 0) TF(_1, 1) + #define _PP_EACH_IDX_3(TF, _0, _1, _2) TF(_0, 0) TF(_1, 1) TF(_2, 2) + #define _PP_EACH_IDX_4(TF, _0, _1, _2, _3) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) + #define _PP_EACH_IDX_5(TF, _0, _1, _2, _3, _4) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) + #define _PP_EACH_IDX_6(TF, _0, _1, _2, _3, _4, _5) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) + #define _PP_EACH_IDX_7(TF, _0, _1, _2, _3, _4, _5, _6) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) + #define _PP_EACH_IDX_8(TF, _0, _1, _2, _3, _4, _5, _6, _7) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) + #define _PP_EACH_IDX_9(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) + #define _PP_EACH_IDX_10(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) + #define _PP_EACH_IDX_11(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) + #define _PP_EACH_IDX_12(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) + #define _PP_EACH_IDX_13(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) + #define _PP_EACH_IDX_14(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) + #define _PP_EACH_IDX_15(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) + #define _PP_EACH_IDX_16(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) + #define _PP_EACH_IDX_17(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) + #define _PP_EACH_IDX_18(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) + #define _PP_EACH_IDX_19(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) + #define _PP_EACH_IDX_20(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) + #define _PP_EACH_IDX_21(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) + #define _PP_EACH_IDX_22(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) + #define _PP_EACH_IDX_23(TF, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) TF(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) + #define _PP_EACH_IDX_24(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) + #define _PP_EACH_IDX_25(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) + #define _PP_EACH_IDX_26(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) + #define _PP_EACH_IDX_27(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) + #define _PP_EACH_IDX_28(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) + #define _PP_EACH_IDX_29(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) + #define _PP_EACH_IDX_30(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) + #define _PP_EACH_IDX_31(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) + #define _PP_EACH_IDX_32(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) + #define _PP_EACH_IDX_33(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) + #define _PP_EACH_IDX_34(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) + #define _PP_EACH_IDX_35(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) + #define _PP_EACH_IDX_36(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) + #define _PP_EACH_IDX_37(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) + #define _PP_EACH_IDX_38(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) + #define _PP_EACH_IDX_39(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) + #define _PP_EACH_IDX_40(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) + #define _PP_EACH_IDX_41(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) + #define _PP_EACH_IDX_42(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) + #define _PP_EACH_IDX_43(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) + #define _PP_EACH_IDX_44(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) + #define _PP_EACH_IDX_45(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) + #define _PP_EACH_IDX_46(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) + #define _PP_EACH_IDX_47(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) + #define _PP_EACH_IDX_48(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) + #define _PP_EACH_IDX_49(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) + #define _PP_EACH_IDX_50(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) + #define _PP_EACH_IDX_51(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) + #define _PP_EACH_IDX_52(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) + #define _PP_EACH_IDX_53(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) + #define _PP_EACH_IDX_54(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) + #define _PP_EACH_IDX_55(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) + #define _PP_EACH_IDX_56(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) + #define _PP_EACH_IDX_57(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) + #define _PP_EACH_IDX_58(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) + #define _PP_EACH_IDX_59(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) TF(_58, 58) + #define _PP_EACH_IDX_60(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) TF(_58, 58) TF(_59, 59) + #define _PP_EACH_IDX_61(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) TF(_58, 58) TF(_59, 59) TF(_60, 60) + #define _PP_EACH_IDX_62(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) TF(_58, 58) TF(_59, 59) TF(_60, 60) TF(_61, 61) + #define _PP_EACH_IDX_63(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) TF(_58, 58) TF(_59, 59) TF(_60, 60) TF(_61, 61) TF(_62, 62) + #define _PP_EACH_IDX_64(TF, _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(_0, 0) TF(_1, 1) TF(_2, 2) TF(_3, 3) TF(_4, 4) TF(_5, 5) TF(_6, 6) TF(_7, 7) TF(_8, 8) TF(_9, 9) TF(_10, 10) TF(_11, 11) TF(_12, 12) TF(_13, 13) TF(_14, 14) TF(_15, 15) TF(_16, 16) TF(_17, 17) TF(_18, 18) TF(_19, 19) TF(_20, 20) TF(_21, 21) TF(_22, 22) TF(_23, 23) TF(_24, 24) TF(_25, 25) TF(_26, 26) TF(_27, 27) TF(_28, 28) TF(_29, 29) TF(_30, 30) TF(_31, 31) TF(_32, 32) TF(_33, 33) TF(_34, 34) TF(_35, 35) TF(_36, 36) TF(_37, 37) TF(_38, 38) TF(_39, 39) TF(_40, 40) TF(_41, 41) TF(_42, 42) TF(_43, 43) TF(_44, 44) TF(_45, 45) TF(_46, 46) TF(_47, 47) TF(_48, 48) TF(_49, 49) TF(_50, 50) TF(_51, 51) TF(_52, 52) TF(_53, 53) TF(_54, 54) TF(_55, 55) TF(_56, 56) TF(_57, 57) TF(_58, 58) TF(_59, 59) TF(_60, 60) TF(_61, 61) TF(_62, 62) TF(_63, 63) +#endif //PP_EACH_IDX + + +//PP_PAR_EACH_IDX +#ifndef PP_PAR_EACH_IDX + #define PP_PAR_EACH_IDX(TF, FARGS, ...) _PP_PAR_EACH_IDX(TF, FARGS, PP_NARG(__VA_ARGS__), __VA_ARGS__) + #define _PP_PAR_EACH_IDX(TF, FARGS, N, ...) __PP_PAR_EACH_IDX(TF, FARGS, N, __VA_ARGS__) + #define __PP_PAR_EACH_IDX(TF, FARGS, N, ...) EXPAND(_PP_PAR_IDX_##N(TF, FARGS, __VA_ARGS__)) + #define _PP_APPLY(TF, FARGS, VARG, IDX) DEFER(TF) (DEPAREN(FARGS), VARG, IDX) + #define _PP_PAR_IDX_0(TF, FARGS, dummy) + #define _PP_PAR_IDX_1(TF, FARGS, _0) EVAL(_PP_APPLY(TF, FARGS, _0, 0)) + #define _PP_PAR_IDX_2(TF, FARGS, _0, _1) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1)) + #define _PP_PAR_IDX_3(TF, FARGS, _0, _1, _2) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2)) + #define _PP_PAR_IDX_4(TF, FARGS, _0, _1, _2, _3) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3)) + #define _PP_PAR_IDX_5(TF, FARGS, _0, _1, _2, _3, _4) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4)) + #define _PP_PAR_IDX_6(TF, FARGS, _0, _1, _2, _3, _4, _5) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5)) + #define _PP_PAR_IDX_7(TF, FARGS, _0, _1, _2, _3, _4, _5, _6) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6)) + #define _PP_PAR_IDX_8(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7)) + #define _PP_PAR_IDX_9(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8)) + #define _PP_PAR_IDX_10(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9)) + #define _PP_PAR_IDX_11(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10)) + #define _PP_PAR_IDX_12(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11)) + #define _PP_PAR_IDX_13(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12)) + #define _PP_PAR_IDX_14(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13)) + #define _PP_PAR_IDX_15(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14)) + #define _PP_PAR_IDX_16(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15)) + #define _PP_PAR_IDX_17(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16)) + #define _PP_PAR_IDX_18(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17)) + #define _PP_PAR_IDX_19(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18)) + #define _PP_PAR_IDX_20(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19)) + #define _PP_PAR_IDX_21(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20)) + #define _PP_PAR_IDX_22(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21)) + #define _PP_PAR_IDX_23(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22)) + #define _PP_PAR_IDX_24(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23)) + #define _PP_PAR_IDX_25(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24)) + #define _PP_PAR_IDX_26(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25)) + #define _PP_PAR_IDX_27(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26)) + #define _PP_PAR_IDX_28(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27)) + #define _PP_PAR_IDX_29(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28)) + #define _PP_PAR_IDX_30(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29)) + #define _PP_PAR_IDX_31(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30)) + #define _PP_PAR_IDX_32(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31)) + #define _PP_PAR_IDX_33(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32)) + #define _PP_PAR_IDX_34(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33)) + #define _PP_PAR_IDX_35(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34)) + #define _PP_PAR_IDX_36(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35)) + #define _PP_PAR_IDX_37(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36)) + #define _PP_PAR_IDX_38(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37)) + #define _PP_PAR_IDX_39(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38)) + #define _PP_PAR_IDX_40(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39)) + #define _PP_PAR_IDX_41(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40)) + #define _PP_PAR_IDX_42(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41)) + #define _PP_PAR_IDX_43(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42)) + #define _PP_PAR_IDX_44(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43)) + #define _PP_PAR_IDX_45(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44)) + #define _PP_PAR_IDX_46(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45)) + #define _PP_PAR_IDX_47(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46)) + #define _PP_PAR_IDX_48(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47)) + #define _PP_PAR_IDX_49(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48)) + #define _PP_PAR_IDX_50(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49)) + #define _PP_PAR_IDX_51(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50)) + #define _PP_PAR_IDX_52(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51)) + #define _PP_PAR_IDX_53(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52)) + #define _PP_PAR_IDX_54(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53)) + #define _PP_PAR_IDX_55(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54)) + #define _PP_PAR_IDX_56(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55)) + #define _PP_PAR_IDX_57(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56)) + #define _PP_PAR_IDX_58(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57)) + #define _PP_PAR_IDX_59(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58)) + #define _PP_PAR_IDX_60(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59)) + #define _PP_PAR_IDX_61(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60)) + #define _PP_PAR_IDX_62(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60) _PP_APPLY(TF, FARGS, _61, 61)) + #define _PP_PAR_IDX_63(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60) _PP_APPLY(TF, FARGS, _61, 61) _PP_APPLY(TF, FARGS, _62, 62)) + #define _PP_PAR_IDX_64(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60) _PP_APPLY(TF, FARGS, _61, 61) _PP_APPLY(TF, FARGS, _62, 62) _PP_APPLY(TF, FARGS, _63, 63)) +#endif //PP_PAR_EACH_IDX + + +//PP_xPAR_EACH_IDX (Wrappers for deprecated macros) +#define PP_1PAR_EACH_IDX(TF, P1, ...) PP_PAR_EACH_IDX(TF, (P1), __VA_ARGS__) + +#define PP_2PAR_EACH_IDX(TF, P1, P2, ...) PP_PAR_EACH_IDX(TF, (P1, P2), __VA_ARGS__) + + + + +#ifndef PP_NARG_MINUS1 + #define PP_ARG_MINUS1_N(...) EXPAND(_PP_ARG_MINUS1_N(__VA_ARGS__)) + #if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #define PP_NARG_MINUS1(...) EXPAND(PP_ARG_MINUS1_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #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 + #else + #define PP_NARG_MINUS1(...) EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__, PP_RSEQ_N())) + #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, N, ...) N + #endif +#endif //PP_NARG_MINUS1 + + +#ifndef PP_NARG_MINUS2 + #define PP_ARG_MINUS2_N(...) EXPAND(_PP_ARG_MINUS2_N(__VA_ARGS__)) + #if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #define PP_NARG_MINUS2(...) EXPAND(PP_ARG_MINUS2_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #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 + #else + #define PP_NARG_MINUS2(...) EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__, PP_RSEQ_N())) + #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, N, ...) N + #endif +#endif //PP_NARG_MINUS2 + + +#ifndef PP_NARG_MINUS3 + #define PP_ARG_MINUS3_N(...) EXPAND(_PP_ARG_MINUS3_N(__VA_ARGS__)) + #if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #define PP_NARG_MINUS3(...) EXPAND(PP_ARG_MINUS3_N(_0, ##__VA_ARGS__, PP_RSEQ_N())) + #define _PP_ARG_MINUS3_N(__2, __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 + #else + #define PP_NARG_MINUS3(...) EXPAND(PP_ARG_MINUS3_N(__VA_ARGS__, PP_RSEQ_N())) + #define _PP_ARG_MINUS3_N(__2, __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, N, ...) N + #endif +#endif //PP_NARG_MINUS3 + + +#ifndef PP_PAR_EACH_IDX + #define PP_PAR_EACH_IDX(TF, FARGS, ...) _PP_PAR_EACH_IDX(TF, FARGS, PP_NARG(__VA_ARGS__), __VA_ARGS__) + #define _PP_PAR_EACH_IDX(TF, FARGS, N, ...) __PP_PAR_EACH_IDX(TF, FARGS, N, __VA_ARGS__) + #define __PP_PAR_EACH_IDX(TF, FARGS, N, ...) EXPAND(_PP_PAR_IDX_##N(TF, FARGS, __VA_ARGS__)) + #define _PP_APPLY(TF, FARGS, VARG, IDX) DEFER(TF) (DEPAREN(FARGS), VARG, IDX) + #define _PP_PAR_IDX_0(TF, FARGS, dummy) + #define _PP_PAR_IDX_1(TF, FARGS, _0) EVAL(_PP_APPLY(TF, FARGS, _0, 0)) + #define _PP_PAR_IDX_2(TF, FARGS, _0, _1) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1)) + #define _PP_PAR_IDX_3(TF, FARGS, _0, _1, _2) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2)) + #define _PP_PAR_IDX_4(TF, FARGS, _0, _1, _2, _3) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3)) + #define _PP_PAR_IDX_5(TF, FARGS, _0, _1, _2, _3, _4) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4)) + #define _PP_PAR_IDX_6(TF, FARGS, _0, _1, _2, _3, _4, _5) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5)) + #define _PP_PAR_IDX_7(TF, FARGS, _0, _1, _2, _3, _4, _5, _6) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6)) + #define _PP_PAR_IDX_8(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7)) + #define _PP_PAR_IDX_9(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8)) + #define _PP_PAR_IDX_10(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9)) + #define _PP_PAR_IDX_11(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10)) + #define _PP_PAR_IDX_12(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11)) + #define _PP_PAR_IDX_13(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12)) + #define _PP_PAR_IDX_14(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13)) + #define _PP_PAR_IDX_15(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14)) + #define _PP_PAR_IDX_16(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15)) + #define _PP_PAR_IDX_17(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16)) + #define _PP_PAR_IDX_18(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17)) + #define _PP_PAR_IDX_19(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18)) + #define _PP_PAR_IDX_20(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19)) + #define _PP_PAR_IDX_21(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20)) + #define _PP_PAR_IDX_22(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21)) + #define _PP_PAR_IDX_23(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22)) + #define _PP_PAR_IDX_24(TF, FARGS, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23)) + #define _PP_PAR_IDX_25(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24)) + #define _PP_PAR_IDX_26(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25)) + #define _PP_PAR_IDX_27(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26)) + #define _PP_PAR_IDX_28(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27)) + #define _PP_PAR_IDX_29(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28)) + #define _PP_PAR_IDX_30(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29)) + #define _PP_PAR_IDX_31(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30)) + #define _PP_PAR_IDX_32(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31)) + #define _PP_PAR_IDX_33(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32)) + #define _PP_PAR_IDX_34(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33)) + #define _PP_PAR_IDX_35(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34)) + #define _PP_PAR_IDX_36(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35)) + #define _PP_PAR_IDX_37(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36)) + #define _PP_PAR_IDX_38(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37)) + #define _PP_PAR_IDX_39(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38)) + #define _PP_PAR_IDX_40(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39)) + #define _PP_PAR_IDX_41(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40)) + #define _PP_PAR_IDX_42(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41)) + #define _PP_PAR_IDX_43(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42)) + #define _PP_PAR_IDX_44(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43)) + #define _PP_PAR_IDX_45(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44)) + #define _PP_PAR_IDX_46(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45)) + #define _PP_PAR_IDX_47(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46)) + #define _PP_PAR_IDX_48(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47)) + #define _PP_PAR_IDX_49(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48)) + #define _PP_PAR_IDX_50(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49)) + #define _PP_PAR_IDX_51(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50)) + #define _PP_PAR_IDX_52(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51)) + #define _PP_PAR_IDX_53(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52)) + #define _PP_PAR_IDX_54(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53)) + #define _PP_PAR_IDX_55(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54)) + #define _PP_PAR_IDX_56(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55)) + #define _PP_PAR_IDX_57(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56)) + #define _PP_PAR_IDX_58(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57)) + #define _PP_PAR_IDX_59(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58)) + #define _PP_PAR_IDX_60(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59)) + #define _PP_PAR_IDX_61(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60)) + #define _PP_PAR_IDX_62(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60) _PP_APPLY(TF, FARGS, _61, 61)) + #define _PP_PAR_IDX_63(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60) _PP_APPLY(TF, FARGS, _61, 61) _PP_APPLY(TF, FARGS, _62, 62)) + #define _PP_PAR_IDX_64(TF, FARGS, _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) EVAL(_PP_APPLY(TF, FARGS, _0, 0) _PP_APPLY(TF, FARGS, _1, 1) _PP_APPLY(TF, FARGS, _2, 2) _PP_APPLY(TF, FARGS, _3, 3) _PP_APPLY(TF, FARGS, _4, 4) _PP_APPLY(TF, FARGS, _5, 5) _PP_APPLY(TF, FARGS, _6, 6) _PP_APPLY(TF, FARGS, _7, 7) _PP_APPLY(TF, FARGS, _8, 8) _PP_APPLY(TF, FARGS, _9, 9) _PP_APPLY(TF, FARGS, _10, 10) _PP_APPLY(TF, FARGS, _11, 11) _PP_APPLY(TF, FARGS, _12, 12) _PP_APPLY(TF, FARGS, _13, 13) _PP_APPLY(TF, FARGS, _14, 14) _PP_APPLY(TF, FARGS, _15, 15) _PP_APPLY(TF, FARGS, _16, 16) _PP_APPLY(TF, FARGS, _17, 17) _PP_APPLY(TF, FARGS, _18, 18) _PP_APPLY(TF, FARGS, _19, 19) _PP_APPLY(TF, FARGS, _20, 20) _PP_APPLY(TF, FARGS, _21, 21) _PP_APPLY(TF, FARGS, _22, 22) _PP_APPLY(TF, FARGS, _23, 23) _PP_APPLY(TF, FARGS, _24, 24) _PP_APPLY(TF, FARGS, _25, 25) _PP_APPLY(TF, FARGS, _26, 26) _PP_APPLY(TF, FARGS, _27, 27) _PP_APPLY(TF, FARGS, _28, 28) _PP_APPLY(TF, FARGS, _29, 29) _PP_APPLY(TF, FARGS, _30, 30) _PP_APPLY(TF, FARGS, _31, 31) _PP_APPLY(TF, FARGS, _32, 32) _PP_APPLY(TF, FARGS, _33, 33) _PP_APPLY(TF, FARGS, _34, 34) _PP_APPLY(TF, FARGS, _35, 35) _PP_APPLY(TF, FARGS, _36, 36) _PP_APPLY(TF, FARGS, _37, 37) _PP_APPLY(TF, FARGS, _38, 38) _PP_APPLY(TF, FARGS, _39, 39) _PP_APPLY(TF, FARGS, _40, 40) _PP_APPLY(TF, FARGS, _41, 41) _PP_APPLY(TF, FARGS, _42, 42) _PP_APPLY(TF, FARGS, _43, 43) _PP_APPLY(TF, FARGS, _44, 44) _PP_APPLY(TF, FARGS, _45, 45) _PP_APPLY(TF, FARGS, _46, 46) _PP_APPLY(TF, FARGS, _47, 47) _PP_APPLY(TF, FARGS, _48, 48) _PP_APPLY(TF, FARGS, _49, 49) _PP_APPLY(TF, FARGS, _50, 50) _PP_APPLY(TF, FARGS, _51, 51) _PP_APPLY(TF, FARGS, _52, 52) _PP_APPLY(TF, FARGS, _53, 53) _PP_APPLY(TF, FARGS, _54, 54) _PP_APPLY(TF, FARGS, _55, 55) _PP_APPLY(TF, FARGS, _56, 56) _PP_APPLY(TF, FARGS, _57, 57) _PP_APPLY(TF, FARGS, _58, 58) _PP_APPLY(TF, FARGS, _59, 59) _PP_APPLY(TF, FARGS, _60, 60) _PP_APPLY(TF, FARGS, _61, 61) _PP_APPLY(TF, FARGS, _62, 62) _PP_APPLY(TF, FARGS, _63, 63)) +#endif //PP_PAR_EACH_IDX + + +#ifndef PP_1PAR_EACH_IDX +#define PP_1PAR_EACH_IDX(TF, P1, ...) PP_PAR_EACH_IDX(TF, (P1), __VA_ARGS__) -#define PP_NARG_MINUS1_(...) 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, N, ...) N - -#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 +#define PP_2PAR_EACH_IDX(TF, P1, P2, ...) PP_PAR_EACH_IDX(TF, (P1, P2), __VA_ARGS__) +#endif /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */ @@ -6492,5 +7007,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), true, MSG) +#define _FFF_ASSERT_FALSE_MSG(COND, MSG) _FFF_ASSERT_EQ_MSG((COND), false, 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..b74257e --- /dev/null +++ b/pp_iterators.rb @@ -0,0 +1,472 @@ +#!/usr/bin/env ruby + +# Generator logic for a family of macros for C metaprogramming +# +# See these blog posts in relation to VA_EACH: +# - http://saadahmad.ca/cc-preprocessor-metaprogramming-2/ +# - 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) +# IS_EMPTY implementation adapted from here: +# - https://gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments/ + +require 'date' + +class PPIterators + + class CFile + INDENT = 2 + class << self + + def indent(content) + indentation = " " * INDENT + indentation + content.gsub("\n","\n#{indentation}").gsub("\n#{indentation}\n", "\n\n").sub(/\s+\Z/,"\n") + end + + def include_guard(name, content) + content.prepend("#define #{name}\n") unless content =~ /#define #{name}/ + + "#ifndef #{name}\n" + indent(content) + "#endif //#{name}\n" + end + + def if_gcc_extensions_available(with_gcc, without_gcc) + "#if defined(__GNUC__) && !defined(__STRICT_ANSI__)\n" + indent(with_gcc) + "#else\n" + indent(without_gcc) + "#endif\n" + end + + def define_macro(m) + m.empty? ? m : "\#define #{m}\n" + end + + def define_macros(macros) + macros.map{ |m| define_macro(m) }.join + end + + def define_macro_set(guard_name, macros) + include_guard(guard_name, define_macros(macros)) + end + end + end + + # MSVC enforces the standard minimum requirement of 127 VA_ARGS + MAX_ARG_COUNT_DEFAULT = 63 + MAX_ARG_COUNT_DEFAULT_NON_RECURSIVE = 64 + DEFER_LEVELS_DEFAULT = 6 + + attr_reader :nargs_max, :recursive, :defer_levels + def initialize(recursive: true, + defer_levels: DEFER_LEVELS_DEFAULT) + @recursive = recursive + @nargs_max = @recursive ? MAX_ARG_COUNT_DEFAULT : MAX_ARG_COUNT_DEFAULT_NON_RECURSIVE + @defer_levels = defer_levels + end + + + def arg_seq(reverse: false, first: 0, last: @nargs_max, prefix: '', sep:', ') + seq = (first..last).map{ |i| "#{prefix}#{i}"} + seq.reverse! if reverse + seq.join(sep) + end + + # This complex implementation of a concatenation macro is tuple-aware + # i.e. is valid for braced tuples during pattern matching (see matcher macros later) + # This is required for recursive for_each on an array of tuples, each PP_EACH(TF, (1, 2), (3, 4)) + # As the list empty macros will break down otherwise + # See saadahmad's posts for further info + def concat + CFile::include_guard('PP_CAT', <<-EOH +// Defer the call to the CAT so that we get the updated parameters first +#define CAT(a, b) _CAT_EVAL ( _CAT_EXPAND_PARAMETERS(a, b) ) +#define _CAT_EVAL(...) _CAT_HELPER __VA_ARGS__ + +// Find the result of testing whether a macro is enclosed or not +#define _CAT_EXPAND_PARAMETERS(a, b) (a, _CAT_PAREN_CHECK b, DEFAULT, b ) +#define _CAT_PAREN_CHECK(...) EXPANDED, ENCLOSED, (__VA_ARGS__) ) EAT ( + +// Pattern match the result of testing if it is enclose or not +#define _CAT_HELPER(a, _, f, b) _CAT_HELPER_ ## f (a, b) +#define _CAT_HELPER_ENCLOSED(a, b) a b +#define _CAT_HELPER_DEFAULT(a, b) a ## b + +EOH + ) + end + + def eval_set(suffix: '', prefix: '') + level_count = Math.log2(@nargs_max).ceil + eroot = "#{prefix}EVAL#{suffix}" + CFile::define_macro_set(eroot, + [ + "#{eroot}(...) _#{eroot}_#{level_count}(__VA_ARGS__)", + "_#{eroot}_1(...) __VA_ARGS__" + ] + (2..level_count).map{ |l| "_#{eroot}_#{l}(...) _#{eroot}_#{l-1}(_#{eroot}_#{l-1}(__VA_ARGS__))"} + ) + end + + #Support two levels of eval nesting + def eval + [eval_set, eval_set(:suffix => '_')].join("\n") + end + + def defer + CFile::define_macro_set('DEFER', + [ + 'PP_NOP()', + 'DEFER(...) __VA_ARGS__ PP_NOP()', + 'DEFER2(...) __VA_ARGS__ DEFER(PP_NOP) ()', + ] + (3..@defer_levels).map{ |l| "DEFER#{l}(...) __VA_ARGS__ DEFER#{l-1}(PP_NOP) ()"} + ) + end + + # See http://saadahmad.ca/cc-preprocessor-metaprogramming-basic-pattern-matching-macros-and-conditionals/ + def logical + CFile::include_guard('PP_LOGIC', <<-EOH +//Usage: IF() (, ) +#define IF(value) CAT(_IF_, value) +#define _IF_1(true, ...) true +#define _IF_0(true, ...) __VA_ARGS__ + +#define NOT(x) PP_MATCHER ( CAT(NOT_, x), 0 ) +#define NOT_0 EXISTS(1) + +//== Building blocks + +//PP_MATCHER +#define PP_MATCHER(value, ...) \ + IF ( _MATCH(_MATCH_FIND(value)) )\ + ( _MATCH_EXTRACT(value), __VA_ARGS__ ) + +#define _MATCH(x) CAT(__MATCH_, x) +#define __MATCH_EXISTS(...) 1 +#define __MATCH_UNMATCHED 0 + +#define _MATCH_FIND(x) __MATCH_RESULT_EXTRACT ( __MATCH_RESULT_FIND(x) ) + +/** + * Extract 2nd element of a match result in the format: + * (IGNORED, EXISTS(DEFINED_VALUE)) or (IGNORED, UNMATCHED) + * This is appended to __MATCH_ to convert result to a boolean, + */ +#define __MATCH_RESULT_EXTRACT(x) __MATCH_RESULT_EXTRACT_HELPER x +#define __MATCH_RESULT_EXTRACT_HELPER(match, return_value) return_value + +/** + * __MATCH_RESULT_FIND( EXISTS(bla) ) returns ( EXPANDED, EXISTS(bla) ) + * __MATCH_RESULT_FIND( bla ) returns ( TEST_bla, UNMATCHED) + */ +#define __MATCH_RESULT_FIND(x) ( CAT(__MATCH_RESULT_EXPAND_, x), UNMATCHED ) +#define __MATCH_RESULT_EXPAND_EXISTS(...) EXPANDED, EXISTS(__VA_ARGS__) ) EAT ( +#define EAT(...) + +//_MATCH_EXTRACT / __MATCH_EXTRACT_EXISTS +#define _MATCH_EXTRACT(value) CAT(__MATCH_EXTRACT_, value) +#define __MATCH_EXTRACT_EXISTS(...) __VA_ARGS__ + +EOH +) + end + + IS_EMPTY_NO_GCC_EXTENSIONS = <<-EOH +IS_EMPTY(...)\ +_ISEMPTY(\ + /* test if there is just one argument, eventually an empty one */\ + HAS_COMMA(__VA_ARGS__),\ + /* test if _TRIGGER_PARENTHESIS_ together with the argument adds a comma */\ + HAS_COMMA(_TRIGGER_PARENTHESIS_ __VA_ARGS__),\ + /* test if the argument together with a parenthesis adds a comma */\ + HAS_COMMA(__VA_ARGS__ (/*empty*/)),\ + /* test if placing it between _TRIGGER_PARENTHESIS_ and the parenthesis adds a comma */\ + HAS_COMMA(_TRIGGER_PARENTHESIS_ __VA_ARGS__ (/*empty*/))\ + ) +EOH + + def is_empty + CFile::if_gcc_extensions_available( + CFile::define_macro("IS_EMPTY(...) NOT(PP_NARG(__VA_ARGS__))"), + CFile::define_macros([ + IS_EMPTY_NO_GCC_EXTENSIONS, + "_ISEMPTY(_0, _1, _2, _3) HAS_COMMA(PASTE5(_IS_EMPTY_CASE_, _0, _1, _2, _3))", + "HAS_COMMA(...) PP_ARG_N(__VA_ARGS__, #{'1, '*(@nargs_max-1)} 0)", + "_TRIGGER_PARENTHESIS_(...) ,", + "PASTE5(_0, _1, _2, _3, _4) _0 ## _1 ## _2 ## _3 ## _4", + "_IS_EMPTY_CASE_0001 ," + ]) + ) + end + + def lists + CFile::include_guard('PP_LISTS', <<-EOH +#define HEAD(FIRST, ...) FIRST +#define TAIL(FIRST, ...) __VA_ARGS__ + +#define TEST_LAST EXISTS(1) +#define NOT_EMPTY(...) NOT(IS_EMPTY(__VA_ARGS__)) +#{is_empty} +EOH + ) + end + + def tuples + CFile::include_guard('PP_TUPLES', <<-EOH +#define PAREN(...) ( __VA_ARGS__ ) +#define DEPAREN(...) DEPAREN_ __VA_ARGS__ +#define DEPAREN_(...) __VA_ARGS__ + +#define IS_ENCLOSED(x, ...) PP_MATCHER ( IS_ENCLOSED_TEST x, 0 ) +#define IS_ENCLOSED_TEST(...) EXISTS(1) + +#define IF_ENCLOSED(...) CAT(_IF_ENCLOSED_, IS_ENCLOSED(__VA_ARGS__)) +#define _IF_ENCLOSED_0(true, ...) __VA_ARGS__ +#define _IF_ENCLOSED_1(true, ...) true +// This function will optionally remove parentheses around its arguments +// if there are any. Otherwise it will return normally +#define OPT_DEPAREN(...) \ + IF_ENCLOSED (__VA_ARGS__) ( DEPAREN(__VA_ARGS__), __VA_ARGS__ ) +EOH + ) + end + + def narg_common + CFile::define_macro_set('PP_UTIL', + [ + # Fix for MSVC expansion order (nicked from fff project) + "EXPAND(x) x", + "PP_SEQ_N() #{arg_seq(last: @nargs_max)}", + "PP_RSEQ_N() #{arg_seq(last: @nargs_max, reverse: true)}" + ] + ) + end + + def arg_n_seq(delta, use_gcc_extensions) + seq = arg_seq(first: 1, last: use_gcc_extensions ? @nargs_max+1 : @nargs_max, 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, use_gcc_extensions) + suffix = m>0 ? "_MINUS#{m}" : '' + CFile::define_macros(["PP_NARG#{suffix}(...) EXPAND(PP_ARG#{suffix}_N(#{'_0, ##' if use_gcc_extensions}__VA_ARGS__, PP_RSEQ_N()))", + "_PP_ARG#{suffix}_N(#{arg_n_seq(m, use_gcc_extensions)}, N, ...) N" + ]) + end + + def narg_minus(m) + suffix = m>0 ? "_MINUS#{m}" : '' + CFile::include_guard("PP_NARG#{suffix}", + CFile::define_macro("PP_ARG#{suffix}_N(...) EXPAND(_PP_ARG#{suffix}_N(__VA_ARGS__))")+ + CFile::if_gcc_extensions_available(_narg_minus(m,true), _narg_minus(m,false)) + ) + end + + def pp_each + <<-'EOH' +#define PP_EACH(TF, ...) \ + EVAL(_PP_EACH_DEFER(TF, __VA_ARGS__)) + +#define _PP_EACH_DEFER(TF, ...) \ + IF ( NOT_EMPTY( __VA_ARGS__ ) ) \ + ( \ + DEFER(TF) (OPT_DEPAREN(HEAD(__VA_ARGS__))) \ + DEFER2 ( __PP_EACH_DEFER ) () (TF, TAIL(__VA_ARGS__)) \ + ) + +//This indirection along with the DEFER2 and EVAL macros allows the recursive implementation of _PP_EACH_DEFER +#define __PP_EACH_DEFER() _PP_EACH_DEFER +EOH + end + + def pp_each_non_recursive + CFile::define_macros([ + "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, ...) EXPAND(_PP_EACH_##N(TF, __VA_ARGS__))", + "", + "_PP_EACH_0(TF, ...)", + "_PP_EACH_1(TF, next_arg) TF(next_arg)", + ] + (2..@nargs_max).map { |arg_count| "_PP_EACH_#{arg_count}(TF, next_arg, ...) TF(next_arg) _PP_EACH_#{arg_count-1}(TF, __VA_ARGS__)" } + ) + end + + def each_idx_non_recursive + CFile::define_macros( + [ + "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, ...) EXPAND(_PP_EACH_IDX_##N(TF, __VA_ARGS__))", + "", + "_PP_EACH_IDX_0(TF, dummy)" + ] + (1..@nargs_max).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 pp_each_idx + <<-'EOH' +#define PP_EACH_IDX(TF, ...) EVAL(_PP_EACH_IDX_DEFER(TF, (PP_SEQ_N()), __VA_ARGS__)) + +#define _PP_EACH_IDX_DEFER(TF, VA_INDICES, ...) \ + IF ( NOT_EMPTY( __VA_ARGS__ ) ) \ + ( \ + DEFER2(TF) (OPT_DEPAREN(HEAD(__VA_ARGS__)), DEFER(HEAD)(DEPAREN(VA_INDICES))) \ + DEFER2 ( __PP_EACH_IDX_DEFER ) () (TF, (TAIL VA_INDICES), TAIL(__VA_ARGS__)) \ + ) + + #define __PP_EACH_IDX_DEFER() _PP_EACH_IDX_DEFER +EOH + end + + def pp_par_each_idx + <<-'EOH' +#define PP_PAR_EACH_IDX(TF, FARGS, ...) EVAL(_PP_PAR_EACH_IDX_DEFER(TF, FARGS, (PP_SEQ_N()), __VA_ARGS__)) + +#define _PP_PAR_EACH_IDX_DEFER(TF, FARGS, VA_INDICES, ...) \ + IF ( NOT_EMPTY( __VA_ARGS__ ) ) \ + ( \ + DEFER2(TF) (OPT_DEPAREN(FARGS), OPT_DEPAREN(HEAD(__VA_ARGS__)), DEFER(HEAD)(DEPAREN(VA_INDICES))) \ + DEFER2 ( __PP_PAR_EACH_IDX_DEFER ) () (TF, FARGS, (TAIL VA_INDICES), TAIL(__VA_ARGS__)) \ + ) + +#define __PP_PAR_EACH_IDX_DEFER() _PP_PAR_EACH_IDX_DEFER +EOH + end + + def pp_par_each_idx_non_recursive + CFile::define_macros( + [ + "PP_PAR_EACH_IDX(TF, FARGS, ...) _PP_PAR_EACH_IDX(TF, FARGS, PP_NARG(__VA_ARGS__), __VA_ARGS__)", + "_PP_PAR_EACH_IDX(TF, FARGS, N, ...) __PP_PAR_EACH_IDX(TF, FARGS, N, __VA_ARGS__)", + "__PP_PAR_EACH_IDX(TF, FARGS, N, ...) EXPAND(_PP_PAR_IDX_##N(TF, FARGS, __VA_ARGS__))", + "_PP_APPLY(TF, FARGS, VARG, IDX) DEFER(TF) (DEPAREN(FARGS), VARG, IDX)", + "", + "_PP_PAR_IDX_0(TF, FARGS, dummy)", + ] + (1..@nargs_max).map do |arg_count| + arg_indices = (0..arg_count-1) + arg_ids = arg_indices.map{ |aidx| "_#{aidx}"} + macro_signature = "_PP_PAR_IDX_#{arg_count}(TF, FARGS, #{arg_ids.join(', ')})" + macro_body = arg_indices.map { |aidx| "_PP_APPLY(TF, FARGS, _#{aidx}, #{aidx})" }.join(' ') + "#{macro_signature} EVAL(#{macro_body})" + end + ) + end + + def each + CFile::include_guard('PP_EACH', @recursive ? pp_each : pp_each_non_recursive) + end + + def each_with_index + CFile::include_guard('PP_EACH_IDX', @recursive ? pp_each_idx : each_idx_non_recursive) + end + + def parameterised_each_with_index + CFile::include_guard("PP_PAR_EACH_IDX", @recursive ? pp_par_each_idx : pp_par_each_idx_non_recursive) + end + + def parameterised_each_with_index_n(n) + fargs = (1..n).map { |aidx| "P#{aidx}"}.join(", ") + CFile::define_macro("PP_#{n}PAR_EACH_IDX(TF, #{fargs}, ...) PP_PAR_EACH_IDX(TF, (#{fargs}), __VA_ARGS__)") + 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: #{@nargs_max} + * + * 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 + * + * The (preferred) recursive implementations of PP_EACH, PP_EACH_IDX and PP_PAR_EACH_IDX are based on an excellent series of posts by Saad Ahmad + * http://saadahmad.ca/cc-preprocessor-metaprogramming-2/ + * + * The non- (or semi-) recursive PP_EACH implementation is based on this blog post by Daniel Hardman: + * https://codecraft.co/2014/11/25/variadic-macros-tricks/ + * + * The non-recursive PP_EACH_IDX and PP_PAR_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 + * + * The 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 + +#{embed_macros} + +# ifdef __cplusplus +} +# endif + +#endif /* PP_ITER_H */ +EOH + end + + def embed_macros + <<-EOH + +//Defer / evaluate macros +#{defer} +#{eval} + +//Token concatenation (tuple-aware) +#{concat} + +//Logical operations +#{logical} + +//Lists (HEAD, TAIL, ISEMPTY etc.) +#{lists} + +//Tuples +#{tuples} + +//Argument counting +#{narg_common} +#{narg} + +//PP_EACH +#{each} + +//PP_EACH_IDX +#{each_with_index} + +//PP_PAR_EACH_IDX +#{parameterised_each_with_index} + +//PP_xPAR_EACH_IDX (Wrappers for deprecated macros) +#{parameterised_each_with_index_n(1)} +#{parameterised_each_with_index_n(2)} + +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/Makefile b/test/Makefile index 3368be0..5420620 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,4 +1,3 @@ - BUILD_DIR = ../build FFF_TEST_CPP_OBJS += \ @@ -45,28 +44,28 @@ $(BUILD_DIR)/%.o: %.c # Link targets -$(FFF_TEST_CPP_TARGET): $(FFF_TEST_CPP_OBJS) +$(FFF_TEST_CPP_TARGET): $(FFF_TEST_CPP_OBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' g++ -o "$(FFF_TEST_CPP_TARGET)" $(FFF_TEST_CPP_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' -$(FFF_TEST_C_TARGET): $(FFF_TEST_C_OBJS) +$(FFF_TEST_C_TARGET): $(FFF_TEST_C_OBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C Linker' gcc -o "$(FFF_TEST_C_TARGET)" $(FFF_TEST_C_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' -$(FFF_TEST_GLOBAL_C_TARGET): $(FFF_TEST_GLOBAL_C_OBJS) +$(FFF_TEST_GLOBAL_C_TARGET): $(FFF_TEST_GLOBAL_C_OBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' gcc -o "$(FFF_TEST_GLOBAL_C_TARGET)" $(FFF_TEST_GLOBAL_C_OBJS) $(LIBS) $(WRAP_LDFLAGS) @echo 'Finished building target: $@' @echo ' ' -$(FFF_TEST_GLOBAL_CPP_TARGET): $(FFF_TEST_GLOBAL_CPP_OBJS) +$(FFF_TEST_GLOBAL_CPP_TARGET): $(FFF_TEST_GLOBAL_CPP_OBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' g++ -o "$(FFF_TEST_GLOBAL_CPP_TARGET)" $(FFF_TEST_GLOBAL_CPP_OBJS) $(LIBS) @@ -78,4 +77,3 @@ clean: -$(RM) $(FFF_TEST_CPP_OBJS) $(FFF_TEST_GLOBAL_C_OBJS) $(FFF_TEST_C_OBJS) \ $(FFF_TEST_CPP_TARGET) $(FFF_TEST_C_TARGET) $(FFF_TEST_GLOBAL_CPP_TARGET) $(FFF_TEST_GLOBAL_C_TARGET) -@echo ' ' - diff --git a/test/fff_test_c.c b/test/fff_test_c.c index 8f7af90..2c11475 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,15 @@ #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__) */ +//Temporary hack to diagnose MSVC issues.... +#define RUN_TEST(TESTNAME) do { printf(" Running %s: \n", #TESTNAME); setup(); TESTNAME(); printf(" SUCCESS\n"); } while (0); \ + +#define RUN_TESTS(SUITE, ...) PP_EACH(RUN_TEST, __VA_ARGS__) enum MYBOOL { FALSE = 899, TRUE }; struct MyStruct { @@ -47,6 +55,8 @@ FAKE_VOID_FUNC(__cdecl, voidfunc20, int, int, int, int, int, int, int, int, int, FAKE_VALUE_FUNC(int, __cdecl, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); #endif +#include "test_cases_assertions_setup.include" + void setup() { RESET_FAKE(voidfunc1); @@ -59,10 +69,11 @@ void setup() RESET_FAKE(valuefunc3var); RESET_FAKE(strlcpy3); FFF_RESET_HISTORY(); + RESET_FAKE_ASSERTIONS(); } - #include "test_cases.include" +#include "test_cases_assertions.include" TEST_F(FFFTestSuite, default_constants_can_be_overridden) { @@ -81,48 +92,94 @@ 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, vararg_custom_fake_sequence_not_exhausted); - RUN_TEST(FFFTestSuite, vararg_custom_fake_seq_return_values_saved_in_history); - RUN_TEST(FFFTestSuite, vararg_custom_fake_sequence_exhausted); - RUN_TEST(FFFTestSuite, vararg_custom_fake_sequence_reset); - - 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, + vararg_custom_fake_sequence_not_exhausted, + vararg_custom_fake_seq_return_values_saved_in_history, + vararg_custom_fake_sequence_exhausted, + vararg_custom_fake_sequence_reset, + + can_capture_upto_20_arguments_correctly, + value_func_can_capture_upto_20_arguments_correctly, + +#if !defined(_MSC_VER) || defined(_MSVC_LANG) + 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, +#endif + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + variadic_return_values_assertion_invalid_given_0_length_sequence, +#endif + +#ifdef __GNUC__ + 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, +#endif + + 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 + ) printf("\n-------------\n"); printf("Complete\n"); diff --git a/test/fff_test_cpp.cpp b/test/fff_test_cpp.cpp index f349177..cda41c1 100644 --- a/test/fff_test_cpp.cpp +++ b/test/fff_test_cpp.cpp @@ -37,6 +37,8 @@ FAKE_VOID_FUNC(__cdecl, voidfunc20, int, int, int, int, int, int, int, int, int, FAKE_VALUE_FUNC(int, __cdecl, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); #endif +#include "test_cases_assertions_setup.include" + class FFFTestSuite: public testing::Test { public: @@ -49,6 +51,7 @@ class FFFTestSuite: public testing::Test RESET_FAKE(voidfunc3var); RESET_FAKE(valuefunc3var); FFF_RESET_HISTORY(); + RESET_FAKE_ASSERTIONS(); } }; @@ -99,3 +102,4 @@ TEST_F(FFFTestSuite, cxx_can_register_custom_fake) } #include "test_cases.include" +#include "test_cases_assertions.include" diff --git a/test/fff_test_global_c.c b/test/fff_test_global_c.c index c74ea6a..0bb9d72 100644 --- a/test/fff_test_global_c.c +++ b/test/fff_test_global_c.c @@ -1,4 +1,3 @@ - #include "global_fakes.h" #include "c_test_framework.h" @@ -6,6 +5,14 @@ DEFINE_FFF_GLOBALS; +// 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__) + +#include "test_cases_assertions_setup.include" + void setup() { RESET_FAKE(voidfunc1); @@ -19,10 +26,12 @@ void setup() RESET_FAKE(strlcpy3); FFF_RESET_HISTORY(); + RESET_FAKE_ASSERTIONS(); } #include "test_cases.include" +#include "test_cases_assertions.include" int main() @@ -34,47 +43,92 @@ 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, 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, vararg_custom_fake_sequence_not_exhausted); - RUN_TEST(FFFTestSuite, vararg_custom_fake_seq_return_values_saved_in_history); - RUN_TEST(FFFTestSuite, vararg_custom_fake_sequence_exhausted); - RUN_TEST(FFFTestSuite, vararg_custom_fake_sequence_reset); - - 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, + + 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, + vararg_custom_fake_sequence_not_exhausted, + vararg_custom_fake_seq_return_values_saved_in_history, + vararg_custom_fake_sequence_exhausted, + vararg_custom_fake_sequence_reset, + + can_capture_upto_20_arguments_correctly, + value_func_can_capture_upto_20_arguments_correctly, + +#if !defined(_MSC_VER) || defined(_MSVC_LANG) + 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, +#endif + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + variadic_return_values_assertion_invalid_given_0_length_sequence, +#endif + +#ifdef __GNUC__ + 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, +#endif + + 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 + ) printf("\n-------------\n"); printf("Complete\n"); diff --git a/test/fff_test_global_cpp.cpp b/test/fff_test_global_cpp.cpp index f2cf79e..4ed8390 100644 --- a/test/fff_test_global_cpp.cpp +++ b/test/fff_test_global_cpp.cpp @@ -1,4 +1,3 @@ - extern "C"{ #include "global_fakes.h" } @@ -6,6 +5,8 @@ extern "C"{ DEFINE_FFF_GLOBALS; +#include "test_cases_assertions_setup.include" + class FFFTestSuite: public testing::Test { public: @@ -18,9 +19,9 @@ class FFFTestSuite: public testing::Test RESET_FAKE(voidfunc3var); RESET_FAKE(valuefunc3var); FFF_RESET_HISTORY(); + RESET_FAKE_ASSERTIONS(); } }; #include "test_cases.include" - - +#include "test_cases_assertions.include" diff --git a/test/test_cases_assertions.include b/test/test_cases_assertions.include new file mode 100644 index 0000000..e1ac125 --- /dev/null +++ b/test/test_cases_assertions.include @@ -0,0 +1,345 @@ +//FFF_RETURN requires typeof (GCC) or decltype (MSVC, but only available in C++ mode) +#if !defined(_MSC_VER) +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); +} +#endif + + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +TEST_F(FFFTestSuite, variadic_return_values_assertion_invalid_given_0_length_sequence) +{ + FFF_RETURN(longfunc0); + + ASSERT_FAKE_ASSERTION_WAS(INVALID); +} +#endif + +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); +} + +#ifdef __GNUC__ +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); +} +#endif diff --git a/test/test_cases_assertions_setup.include b/test/test_cases_assertions_setup.include new file mode 100644 index 0000000..fa8fa76 --- /dev/null +++ b/test/test_cases_assertions_setup.include @@ -0,0 +1,12 @@ +static int valid_assertions_, invalid_assertions_; +#define _FFF_ASSERT_EQ_MSG(EXP, ACT, MSG) do {if ((EXP)==(ACT)) { valid_assertions_++; } else { invalid_assertions_++; }} while(0); + +#include +#define INVALID false +#define VALID true + +#define ASSERT_FAKE_ASSERTION_WAS(RSLT) \ + if((RSLT)==VALID) ASSERT_EQ(true, valid_assertions_>0); \ + ASSERT_EQ((!(RSLT)), invalid_assertions_>0) + +#define RESET_FAKE_ASSERTIONS() valid_assertions_ = invalid_assertions_ = 0