annotate DEPENDENCIES/generic/include/boost/parameter/aux_/python/invoker.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Copyright Daniel Wallin 2005. Use, modification and distribution is
Chris@16 2 // subject to the Boost Software License, Version 1.0. (See accompanying
Chris@16 3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 4
Chris@16 5 #ifndef BOOST_PARAMETER_INVOKER_051210_HPP
Chris@16 6 # define BOOST_PARAMETER_INVOKER_051210_HPP
Chris@16 7
Chris@16 8 # include <boost/mpl/begin.hpp>
Chris@16 9 # include <boost/mpl/next.hpp>
Chris@16 10 # include <boost/mpl/deref.hpp>
Chris@16 11 # include <boost/mpl/size.hpp>
Chris@16 12 # include <boost/parameter/keyword.hpp>
Chris@16 13 # include <boost/preprocessor/iteration/iterate.hpp>
Chris@16 14
Chris@16 15 namespace boost { namespace parameter { namespace python { namespace aux {
Chris@16 16
Chris@16 17 template <long Arity, class M, class R, class Args>
Chris@16 18 struct invoker;
Chris@16 19
Chris@16 20 template <class M, class R>
Chris@16 21 struct make_invoker
Chris@16 22 {
Chris@16 23 template <class Args>
Chris@16 24 struct apply
Chris@16 25 {
Chris@16 26 typedef invoker<
Chris@16 27 mpl::size<Args>::value, M, R, Args
Chris@16 28 > type;
Chris@16 29 };
Chris@16 30 };
Chris@16 31
Chris@16 32 template <long Arity, class M, class R, class T, class Args>
Chris@16 33 struct member_invoker;
Chris@16 34
Chris@16 35 template <class M, class R, class T>
Chris@16 36 struct make_member_invoker
Chris@16 37 {
Chris@16 38 template <class Args>
Chris@16 39 struct apply
Chris@16 40 {
Chris@16 41 typedef member_invoker<
Chris@16 42 mpl::size<Args>::value, M, R, T, Args
Chris@16 43 > type;
Chris@16 44 };
Chris@16 45 };
Chris@16 46
Chris@16 47 template <long Arity, class T, class R, class Args>
Chris@16 48 struct call_invoker;
Chris@16 49
Chris@16 50 template <class T, class R>
Chris@16 51 struct make_call_invoker
Chris@16 52 {
Chris@16 53 template <class Args>
Chris@16 54 struct apply
Chris@16 55 {
Chris@16 56 typedef call_invoker<
Chris@16 57 mpl::size<Args>::value, T, R, Args
Chris@16 58 > type;
Chris@16 59 };
Chris@16 60 };
Chris@16 61
Chris@16 62 template <long Arity, class T, class Args>
Chris@16 63 struct init_invoker;
Chris@16 64
Chris@16 65 template <class T>
Chris@16 66 struct make_init_invoker
Chris@16 67 {
Chris@16 68 template <class Args>
Chris@16 69 struct apply
Chris@16 70 {
Chris@16 71 typedef init_invoker<
Chris@16 72 mpl::size<Args>::value, T, Args
Chris@16 73 > type;
Chris@16 74 };
Chris@16 75 };
Chris@16 76
Chris@16 77 template <class M, class R, class Args>
Chris@16 78 struct invoker<0, M, R, Args>
Chris@16 79 {
Chris@16 80 static R execute()
Chris@16 81 {
Chris@16 82 return M()(boost::type<R>());
Chris@16 83 }
Chris@16 84 };
Chris@16 85
Chris@16 86 template <class M, class R, class T, class Args>
Chris@16 87 struct member_invoker<0, M, R, T, Args>
Chris@16 88 {
Chris@16 89 static R execute(T& self)
Chris@16 90 {
Chris@16 91 return M()(boost::type<R>(), self);
Chris@16 92 }
Chris@16 93 };
Chris@16 94
Chris@16 95 template <class T, class R, class Args>
Chris@16 96 struct call_invoker<0, T, R, Args>
Chris@16 97 {
Chris@16 98 static R execute(T& self)
Chris@16 99 {
Chris@16 100 return self();
Chris@16 101 }
Chris@16 102 };
Chris@16 103
Chris@16 104 template <class T, class Args>
Chris@16 105 struct init_invoker<0, T, Args>
Chris@16 106 {
Chris@16 107 static T* execute(T& self)
Chris@16 108 {
Chris@16 109 return new T;
Chris@16 110 }
Chris@16 111 };
Chris@16 112
Chris@16 113 # define BOOST_PP_ITERATION_PARAMS_1 (4, \
Chris@16 114 (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 1))
Chris@16 115 # include BOOST_PP_ITERATE()
Chris@16 116
Chris@16 117 # define BOOST_PP_ITERATION_PARAMS_1 (4, \
Chris@16 118 (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 2))
Chris@16 119 # include BOOST_PP_ITERATE()
Chris@16 120
Chris@16 121 # define BOOST_PP_ITERATION_PARAMS_1 (4, \
Chris@16 122 (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 3))
Chris@16 123 # include BOOST_PP_ITERATE()
Chris@16 124
Chris@16 125 # define BOOST_PP_ITERATION_PARAMS_1 (4, \
Chris@16 126 (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 4))
Chris@16 127 # include BOOST_PP_ITERATE()
Chris@16 128
Chris@16 129 }}}} // namespace boost::parameter::python::aux
Chris@16 130
Chris@16 131 #endif // BOOST_PARAMETER_INVOKER_051210_HPP
Chris@16 132