123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // Copyright Daniel Wallin 2005. 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)
- #ifndef BOOST_PARAMETER_INVOKER_051210_HPP
- # define BOOST_PARAMETER_INVOKER_051210_HPP
- # include <boost/mpl/begin.hpp>
- # include <boost/mpl/next.hpp>
- # include <boost/mpl/deref.hpp>
- # include <boost/mpl/size.hpp>
- # include <boost/parameter/keyword.hpp>
- # include <boost/preprocessor/iteration/iterate.hpp>
- namespace boost { namespace parameter { namespace python { namespace aux {
- template <long Arity, class M, class R, class Args>
- struct invoker;
- template <class M, class R>
- struct make_invoker
- {
- template <class Args>
- struct apply
- {
- typedef invoker<
- mpl::size<Args>::value, M, R, Args
- > type;
- };
- };
- template <long Arity, class M, class R, class T, class Args>
- struct member_invoker;
- template <class M, class R, class T>
- struct make_member_invoker
- {
- template <class Args>
- struct apply
- {
- typedef member_invoker<
- mpl::size<Args>::value, M, R, T, Args
- > type;
- };
- };
- template <long Arity, class T, class R, class Args>
- struct call_invoker;
- template <class T, class R>
- struct make_call_invoker
- {
- template <class Args>
- struct apply
- {
- typedef call_invoker<
- mpl::size<Args>::value, T, R, Args
- > type;
- };
- };
- template <long Arity, class T, class Args>
- struct init_invoker;
- template <class T>
- struct make_init_invoker
- {
- template <class Args>
- struct apply
- {
- typedef init_invoker<
- mpl::size<Args>::value, T, Args
- > type;
- };
- };
- template <class M, class R, class Args>
- struct invoker<0, M, R, Args>
- {
- static R execute()
- {
- return M()(boost::type<R>());
- }
- };
- template <class M, class R, class T, class Args>
- struct member_invoker<0, M, R, T, Args>
- {
- static R execute(T& self)
- {
- return M()(boost::type<R>(), self);
- }
- };
- template <class T, class R, class Args>
- struct call_invoker<0, T, R, Args>
- {
- static R execute(T& self)
- {
- return self();
- }
- };
- template <class T, class Args>
- struct init_invoker<0, T, Args>
- {
- static T* execute(T& self)
- {
- return new T;
- }
- };
- # define BOOST_PP_ITERATION_PARAMS_1 (4, \
- (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 1))
- # include BOOST_PP_ITERATE()
- # define BOOST_PP_ITERATION_PARAMS_1 (4, \
- (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 2))
- # include BOOST_PP_ITERATE()
- # define BOOST_PP_ITERATION_PARAMS_1 (4, \
- (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 3))
- # include BOOST_PP_ITERATE()
- # define BOOST_PP_ITERATION_PARAMS_1 (4, \
- (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 4))
- # include BOOST_PP_ITERATE()
- }}}} // namespace boost::parameter::python::aux
- #endif // BOOST_PARAMETER_INVOKER_051210_HPP
|