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