1169691Skan#!/usr/bin/perl -w 2169691Skanuse English; 3169691Skan 4169691Skan$max = shift @ARGV; 5169691Skan 6169691Skan$template_params = "typename _T1"; 7169691Skan$template_params_unnamed = "typename"; 8169691Skan$template_args = "_T1"; 9169691Skan$params = "_T1 __a1"; 10169691Skan$ref_params = "_T1& __a1"; 11169691Skan$args = "__a1"; 12169691Skan$bind_members = "_T1 _M_arg1;"; 13169691Skan$bind_members_init = "_M_arg1(__a1)"; 14169691Skan$mu_get_tuple_args = "::std::tr1::get<0>(__tuple)"; 15169691Skan$bind_v_template_args = "typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type"; 16169691Skan$bind_v_args = "_Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))"; 17169691Skan$tuple_add_cref = "typename __add_c_ref<_T1>::type __a1"; 18169691Skan$tuple_copy_init = "_M_arg1(__in._M_arg1)"; 19169691Skan$tuple_assign = "_M_arg1 = __in._M_arg1;"; 20169691Skan$template_params_null_class = "typename _T1 = _NullClass"; 21169691Skan$template_args_stripped = "typename __strip_reference_wrapper<_T1>::__type"; 22169691Skan$template_params_u = "typename _U1"; 23169691Skan$template_args_u = "_U1"; 24169691Skan$ref_wrap_params = "ref(__a1)"; 25169691Skan$ref_template_args = "_T1&"; 26169691Skanfor ($num_args = 2; $num_args <= $max; ++$num_args) { 27169691Skan $prev_args = $num_args - 1; 28169691Skan $next_args = $num_args + 1; 29169691Skan $template_params_shifted = $template_params; 30169691Skan $template_args_shifted = $template_args; 31169691Skan $params_shifted = $params; 32169691Skan $args_shifted = $args; 33169691Skan $template_params .= ", typename _T$num_args"; 34169691Skan $template_params_unnamed .= ", typename"; 35169691Skan $template_args .= ", _T$num_args"; 36169691Skan $params .= ", _T$num_args __a$num_args"; 37169691Skan $ref_params .=", _T$num_args& __a$num_args"; 38169691Skan $args .= ", __a$num_args"; 39169691Skan $bind_members .= " _T$num_args _M_arg$num_args;"; 40169691Skan $bind_members_init .= ", _M_arg$num_args(__a$num_args)"; 41169691Skan $mu_get_tuple_args .= ", ::std::tr1::get<$prev_args>(__tuple)"; 42169691Skan $bind_v_template_args .= ", typename result_of<_Mu<_T$num_args> _CV(_T$num_args, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type"; 43169691Skan $bind_v_args .= ", _Mu<_T$num_args>()(_M_arg$num_args, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))"; 44169691Skan $tuple_add_cref .= ", typename __add_c_ref<_T$num_args>::type __a$num_args"; 45169691Skan $tuple_copy_init .= ", _M_arg$num_args(__in._M_arg$num_args)"; 46169691Skan $tuple_assign .= " _M_arg$num_args = __in._M_arg$num_args;"; 47169691Skan $template_params_null_class .= ", typename _T$num_args = _NullClass"; 48169691Skan $template_args_stripped .= ", typename __strip_reference_wrapper<_T$num_args>::__type"; 49169691Skan $template_params_u .= ", typename _U$num_args"; 50169691Skan $template_args_u .= ", _U$num_args"; 51169691Skan $ref_wrap_params .= ", ref(__a$num_args)"; 52169691Skan $ref_template_args .= ", _T$num_args&"; 53169691Skan 54169691Skan if ($num_args == $max) { 55169691Skan print "#define _GLIBCXX_LAST_INCLUDE\n" 56169691Skan } 57169691Skan print "#define _GLIBCXX_NUM_ARGS $num_args\n"; 58169691Skan print "#define _GLIBCXX_COMMA ,\n"; 59169691Skan print "#define _GLIBCXX_TEMPLATE_PARAMS $template_params\n"; 60169691Skan print "#define _GLIBCXX_TEMPLATE_ARGS $template_args\n"; 61169691Skan print "#define _GLIBCXX_PARAMS $params\n"; 62169691Skan print "#define _GLIBCXX_REF_PARAMS $ref_params\n"; 63169691Skan print "#define _GLIBCXX_ARGS $args\n"; 64169691Skan print "#define _GLIBCXX_COMMA_SHIFTED ,\n"; 65169691Skan print "#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED $template_params_shifted\n"; 66169691Skan print "#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED $template_args_shifted\n"; 67169691Skan print "#define _GLIBCXX_PARAMS_SHIFTED $params_shifted\n"; 68169691Skan print "#define _GLIBCXX_ARGS_SHIFTED $args_shifted\n"; 69169691Skan print "#define _GLIBCXX_BIND_MEMBERS $bind_members\n"; 70169691Skan print "#define _GLIBCXX_BIND_MEMBERS_INIT $bind_members_init\n"; 71169691Skan print "#define _GLIBCXX_MU_GET_TUPLE_ARGS $mu_get_tuple_args\n"; 72169691Skan print "#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) $bind_v_template_args\n"; 73169691Skan print "#define _GLIBCXX_BIND_V_ARGS $bind_v_args\n"; 74169691Skan print "#define _GLIBCXX_TUPLE_ADD_CREF $tuple_add_cref\n"; 75169691Skan print "#define _GLIBCXX_TUPLE_COPY_INIT $tuple_copy_init\n"; 76169691Skan print "#define _GLIBCXX_TUPLE_ASSIGN $tuple_assign\n"; 77169691Skan print "#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS $template_params_null_class\n"; 78169691Skan print "#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED $template_args_stripped\n"; 79169691Skan print "#define _GLIBCXX_TEMPLATE_PARAMS_U $template_params_u\n"; 80169691Skan print "#define _GLIBCXX_TEMPLATE_ARGS_U $template_args_u\n"; 81169691Skan print "#define _GLIBCXX_REF_WRAP_PARAMS $ref_wrap_params\n"; 82169691Skan print "#define _GLIBCXX_REF_TEMPLATE_ARGS $ref_template_args\n"; 83169691Skan print "#define _GLIBCXX_NUM_ARGS_PLUS_1 $next_args\n"; 84169691Skan print "#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T$next_args\n"; 85169691Skan print "#include _GLIBCXX_REPEAT_HEADER\n"; 86169691Skan print "#undef _GLIBCXX_T_NUM_ARGS_PLUS_1\n"; 87169691Skan print "#undef _GLIBCXX_NUM_ARGS_PLUS_1\n"; 88169691Skan print "#undef _GLIBCXX_REF_TEMPLATE_ARGS\n"; 89169691Skan print "#undef _GLIBCXX_REF_WRAP_PARAMS\n"; 90169691Skan print "#undef _GLIBCXX_TEMPLATE_ARGS_U\n"; 91169691Skan print "#undef _GLIBCXX_TEMPLATE_PARAMS_U\n"; 92169691Skan print "#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED\n"; 93169691Skan print "#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS\n"; 94169691Skan print "#undef _GLIBCXX_TUPLE_ASSIGN\n"; 95169691Skan print "#undef _GLIBCXX_TUPLE_COPY_INIT\n"; 96169691Skan print "#undef _GLIBCXX_TUPLE_ADD_CREF\n"; 97169691Skan print "#undef _GLIBCXX_BIND_V_ARGS\n"; 98169691Skan print "#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS\n"; 99169691Skan print "#undef _GLIBCXX_MU_GET_TUPLE_ARGS\n"; 100169691Skan print "#undef _GLIBCXX_BIND_MEMBERS_INIT\n"; 101169691Skan print "#undef _GLIBCXX_BIND_MEMBERS\n"; 102169691Skan print "#undef _GLIBCXX_ARGS_SHIFTED\n"; 103169691Skan print "#undef _GLIBCXX_PARAMS_SHIFTED\n"; 104169691Skan print "#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED\n"; 105169691Skan print "#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED\n"; 106169691Skan print "#undef _GLIBCXX_COMMA_SHIFTED\n"; 107169691Skan print "#undef _GLIBCXX_ARGS\n"; 108169691Skan print "#undef _GLIBCXX_REF_PARAMS\n"; 109169691Skan print "#undef _GLIBCXX_PARAMS\n"; 110169691Skan print "#undef _GLIBCXX_TEMPLATE_ARGS\n"; 111169691Skan print "#undef _GLIBCXX_TEMPLATE_PARAMS\n"; 112169691Skan print "#undef _GLIBCXX_COMMA\n"; 113169691Skan print "#undef _GLIBCXX_NUM_ARGS\n"; 114169691Skan if ($num_args == $max) { 115169691Skan print "#undef _GLIBCXX_LAST_INCLUDE\n" 116169691Skan } 117169691Skan} 118169691Skan 119169691Skanprint "\n"; 120169691Skanprint "#ifndef _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS\n"; 121169691Skanprint "# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS $template_params\n"; 122169691Skanprint "# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS_UNNAMED $template_params_unnamed\n"; 123169691Skanprint "# define _GLIBCXX_TUPLE_ALL_TEMPLATE_ARGS $template_args\n"; 124169691Skanprint "#endif\n"; 125169691Skanprint "\n"; 126169691Skan 127