Chris@16: // Copyright Daniel Wallin 2005. Use, modification and distribution is Chris@16: // subject to the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_PARAMETER_INVOKER_051210_HPP Chris@16: # define BOOST_PARAMETER_INVOKER_051210_HPP Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: namespace boost { namespace parameter { namespace python { namespace aux { Chris@16: Chris@16: template Chris@16: struct invoker; Chris@16: Chris@16: template Chris@16: struct make_invoker Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: typedef invoker< Chris@16: mpl::size::value, M, R, Args Chris@16: > type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct member_invoker; Chris@16: Chris@16: template Chris@16: struct make_member_invoker Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: typedef member_invoker< Chris@16: mpl::size::value, M, R, T, Args Chris@16: > type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct call_invoker; Chris@16: Chris@16: template Chris@16: struct make_call_invoker Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: typedef call_invoker< Chris@16: mpl::size::value, T, R, Args Chris@16: > type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct init_invoker; Chris@16: Chris@16: template Chris@16: struct make_init_invoker Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: typedef init_invoker< Chris@16: mpl::size::value, T, Args Chris@16: > type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct invoker<0, M, R, Args> Chris@16: { Chris@16: static R execute() Chris@16: { Chris@16: return M()(boost::type()); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct member_invoker<0, M, R, T, Args> Chris@16: { Chris@16: static R execute(T& self) Chris@16: { Chris@16: return M()(boost::type(), self); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct call_invoker<0, T, R, Args> Chris@16: { Chris@16: static R execute(T& self) Chris@16: { Chris@16: return self(); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct init_invoker<0, T, Args> Chris@16: { Chris@16: static T* execute(T& self) Chris@16: { Chris@16: return new T; Chris@16: } Chris@16: }; Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 (4, \ Chris@16: (1, BOOST_PARAMETER_MAX_ARITY, , 1)) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 (4, \ Chris@16: (1, BOOST_PARAMETER_MAX_ARITY, , 2)) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 (4, \ Chris@16: (1, BOOST_PARAMETER_MAX_ARITY, , 3)) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 (4, \ Chris@16: (1, BOOST_PARAMETER_MAX_ARITY, , 4)) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: }}}} // namespace boost::parameter::python::aux Chris@16: Chris@16: #endif // BOOST_PARAMETER_INVOKER_051210_HPP Chris@16: