diff --git a/include/boost/function.hpp b/include/boost/function.hpp index b72842bb..104fd9b4 100644 --- a/include/boost/function.hpp +++ b/include/boost/function.hpp @@ -10,57 +10,18 @@ // William Kempf, Jesse Jones and Karl Nelson were all very helpful in the // design of this library. -#include // unary_function, binary_function +// No include guards to allow include again with bigger +// BOOST_FUNCTION_MAX_ARGS -#include -#include - -#ifndef BOOST_FUNCTION_MAX_ARGS -# define BOOST_FUNCTION_MAX_ARGS 10 -#endif // BOOST_FUNCTION_MAX_ARGS - -// Include the prologue here so that the use of file-level iteration -// in anything that may be included by function_template.hpp doesn't break -#include - -// Older Visual Age C++ version do not handle the file iteration well -#if BOOST_WORKAROUND(__IBMCPP__, >= 500) && BOOST_WORKAROUND(__IBMCPP__, < 800) -# if BOOST_FUNCTION_MAX_ARGS >= 0 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 1 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 2 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 3 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 4 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 5 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 6 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 7 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 8 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 9 -# include -# endif -# if BOOST_FUNCTION_MAX_ARGS >= 10 -# include -# endif +#ifndef BOOST_FUNCTION_MAX_ARGS_DEFINED +# include #else -// What is the '3' for? -# define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_FUNCTION_MAX_ARGS,)) -# include BOOST_PP_ITERATE() -# undef BOOST_PP_ITERATION_PARAMS_1 +# ifndef BOOST_FUNCTION_MAX_ARGS +# include +# else +# if BOOST_FUNCTION_MAX_ARGS > BOOST_FUNCTION_MAX_ARGS_DEFINED +# include +# endif +# endif #endif + diff --git a/include/boost/function/detail/function_expand.hpp b/include/boost/function/detail/function_expand.hpp new file mode 100644 index 00000000..0aa64b2b --- /dev/null +++ b/include/boost/function/detail/function_expand.hpp @@ -0,0 +1,91 @@ +// Boost.Function library + +// Copyright Douglas Gregor 2001-2003. Use, modification and +// distribution is subject to the Boost Software License, Version +// 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// For more information, see http://www.boost.org/libs/function + +// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the +// design of this library. + +// No include guards to allow include again with different +// BOOST_FUNCTION_MAX_ARGS + +#include // unary_function, binary_function + +#include +#include + +#ifndef BOOST_FUNCTION_MAX_ARGS +# define BOOST_FUNCTION_MAX_ARGS 10 +#endif // BOOST_FUNCTION_MAX_ARGS + +// Include the prologue here so that the use of file-level iteration +// in anything that may be included by function_template.hpp doesn't break +#include + +// Older Visual Age C++ version do not handle the file iteration well +#if BOOST_WORKAROUND(__IBMCPP__, >= 500) && BOOST_WORKAROUND(__IBMCPP__, < 800) +# if BOOST_FUNCTION_MAX_ARGS >= 0 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 0 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 1 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 1 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 2 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 2 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 3 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 3 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 4 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 4 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 5 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 5 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 6 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 6 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 7 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 7 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 8 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 8 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 9 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 9 +# include +# endif +# if BOOST_FUNCTION_MAX_ARGS >= 10 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 10 +# include +# endif +#else +// What is the '3' for? +# define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_FUNCTION_MAX_ARGS,)) +# include BOOST_PP_ITERATE() +# undef BOOST_PP_ITERATION_PARAMS_1 +#endif diff --git a/include/boost/function/detail/gen_maybe_include.pl b/include/boost/function/detail/gen_maybe_include.pl index d0629205..2b75c85e 100644 --- a/include/boost/function/detail/gen_maybe_include.pl +++ b/include/boost/function/detail/gen_maybe_include.pl @@ -29,6 +29,8 @@ print OUT " BOOST_FUNCTION_NUM_ARGS == $on_arg\n"; print OUT "# ifndef BOOST_FUNCTION_$on_arg\n"; print OUT "# define BOOST_FUNCTION_$on_arg\n"; + print OUT "# undef BOOST_FUNCTION_MAX_ARGS_DEFINED\n"; + print OUT "# define BOOST_FUNCTION_MAX_ARGS_DEFINED $on_arg\n"; print OUT "# include \n"; print OUT "# endif\n"; } diff --git a/include/boost/function/detail/maybe_include.hpp b/include/boost/function/detail/maybe_include.hpp index 92f71bb2..5611a6bb 100644 --- a/include/boost/function/detail/maybe_include.hpp +++ b/include/boost/function/detail/maybe_include.hpp @@ -1,265 +1,358 @@ -// Boost.Function library - -// Copyright Douglas Gregor 2003. Use, modification and -// distribution is subject to the Boost Software License, Version -// 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// For more information, see http://www.boost.org - #if BOOST_FUNCTION_NUM_ARGS == 0 # ifndef BOOST_FUNCTION_0 # define BOOST_FUNCTION_0 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 0 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 1 # ifndef BOOST_FUNCTION_1 # define BOOST_FUNCTION_1 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 1 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 2 # ifndef BOOST_FUNCTION_2 # define BOOST_FUNCTION_2 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 2 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 3 # ifndef BOOST_FUNCTION_3 # define BOOST_FUNCTION_3 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 3 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 4 # ifndef BOOST_FUNCTION_4 # define BOOST_FUNCTION_4 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 4 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 5 # ifndef BOOST_FUNCTION_5 # define BOOST_FUNCTION_5 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 5 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 6 # ifndef BOOST_FUNCTION_6 # define BOOST_FUNCTION_6 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 6 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 7 # ifndef BOOST_FUNCTION_7 # define BOOST_FUNCTION_7 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 7 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 8 # ifndef BOOST_FUNCTION_8 # define BOOST_FUNCTION_8 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 8 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 9 # ifndef BOOST_FUNCTION_9 # define BOOST_FUNCTION_9 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 9 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 10 # ifndef BOOST_FUNCTION_10 # define BOOST_FUNCTION_10 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 10 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 11 # ifndef BOOST_FUNCTION_11 # define BOOST_FUNCTION_11 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 11 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 12 # ifndef BOOST_FUNCTION_12 # define BOOST_FUNCTION_12 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 12 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 13 # ifndef BOOST_FUNCTION_13 # define BOOST_FUNCTION_13 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 13 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 14 # ifndef BOOST_FUNCTION_14 # define BOOST_FUNCTION_14 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 14 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 15 # ifndef BOOST_FUNCTION_15 # define BOOST_FUNCTION_15 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 15 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 16 # ifndef BOOST_FUNCTION_16 # define BOOST_FUNCTION_16 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 16 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 17 # ifndef BOOST_FUNCTION_17 # define BOOST_FUNCTION_17 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 17 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 18 # ifndef BOOST_FUNCTION_18 # define BOOST_FUNCTION_18 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 18 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 19 # ifndef BOOST_FUNCTION_19 # define BOOST_FUNCTION_19 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 19 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 20 # ifndef BOOST_FUNCTION_20 # define BOOST_FUNCTION_20 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 20 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 21 # ifndef BOOST_FUNCTION_21 # define BOOST_FUNCTION_21 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 21 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 22 # ifndef BOOST_FUNCTION_22 # define BOOST_FUNCTION_22 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 22 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 23 # ifndef BOOST_FUNCTION_23 # define BOOST_FUNCTION_23 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 23 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 24 # ifndef BOOST_FUNCTION_24 # define BOOST_FUNCTION_24 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 24 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 25 # ifndef BOOST_FUNCTION_25 # define BOOST_FUNCTION_25 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 25 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 26 # ifndef BOOST_FUNCTION_26 # define BOOST_FUNCTION_26 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 26 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 27 # ifndef BOOST_FUNCTION_27 # define BOOST_FUNCTION_27 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 27 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 28 # ifndef BOOST_FUNCTION_28 # define BOOST_FUNCTION_28 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 28 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 29 # ifndef BOOST_FUNCTION_29 # define BOOST_FUNCTION_29 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 29 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 30 # ifndef BOOST_FUNCTION_30 # define BOOST_FUNCTION_30 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 30 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 31 # ifndef BOOST_FUNCTION_31 # define BOOST_FUNCTION_31 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 31 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 32 # ifndef BOOST_FUNCTION_32 # define BOOST_FUNCTION_32 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 32 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 33 # ifndef BOOST_FUNCTION_33 # define BOOST_FUNCTION_33 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 33 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 34 # ifndef BOOST_FUNCTION_34 # define BOOST_FUNCTION_34 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 34 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 35 # ifndef BOOST_FUNCTION_35 # define BOOST_FUNCTION_35 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 35 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 36 # ifndef BOOST_FUNCTION_36 # define BOOST_FUNCTION_36 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 36 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 37 # ifndef BOOST_FUNCTION_37 # define BOOST_FUNCTION_37 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 37 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 38 # ifndef BOOST_FUNCTION_38 # define BOOST_FUNCTION_38 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 38 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 39 # ifndef BOOST_FUNCTION_39 # define BOOST_FUNCTION_39 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 39 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 40 # ifndef BOOST_FUNCTION_40 # define BOOST_FUNCTION_40 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 40 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 41 # ifndef BOOST_FUNCTION_41 # define BOOST_FUNCTION_41 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 41 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 42 # ifndef BOOST_FUNCTION_42 # define BOOST_FUNCTION_42 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 42 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 43 # ifndef BOOST_FUNCTION_43 # define BOOST_FUNCTION_43 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 43 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 44 # ifndef BOOST_FUNCTION_44 # define BOOST_FUNCTION_44 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 44 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 45 # ifndef BOOST_FUNCTION_45 # define BOOST_FUNCTION_45 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 45 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 46 # ifndef BOOST_FUNCTION_46 # define BOOST_FUNCTION_46 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 46 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 47 # ifndef BOOST_FUNCTION_47 # define BOOST_FUNCTION_47 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 47 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 48 # ifndef BOOST_FUNCTION_48 # define BOOST_FUNCTION_48 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 48 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 49 # ifndef BOOST_FUNCTION_49 # define BOOST_FUNCTION_49 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 49 # include # endif #elif BOOST_FUNCTION_NUM_ARGS == 50 # ifndef BOOST_FUNCTION_50 # define BOOST_FUNCTION_50 +# undef BOOST_FUNCTION_MAX_ARGS_DEFINED +# define BOOST_FUNCTION_MAX_ARGS_DEFINED 50 # include # endif #else